Considering that /d is the default, why even bother? If you aren't using use re '/l'; or use re '/u'; in an outer scope, there's no need to do use re '/d'; in an inner. Quoting from perlre:
If none of the above apply, for backwards compatibility reasons, the
"/d" modifier is the one in effect by default. As this can lead to
unexpected results, it is best to specify which other rule set should
be used.
Good question. It turns out that the default is different if the code has 'use locale' and this code did:
The use re '/foo' pragma can be used to set default modifiers (including these) for regular expressions compiled within its scope. This pragma has precedence over the other pragmas listed below that change the defaults.
Otherwise, use locale sets the default modifier to /l ; and use feature 'unicode_strings or use VERSION (or higher) set the default to /u when not in the same scope as either use locale or use bytes. Unlike the mechanisms mentioned above, these affect operations besides regular expressions pattern matching, and so give more consistent results with other operators, including using \U , \l , etc. in substitution replacements.
If none of the above apply, for backwards compatibility reasons, the /d modifier is the one in effect by default. As this can lead to unexpected results, it is best to specify which other rule set should be used.
So for code with 'use locale' the default regex behavior changed from 5.12 to 5.14.
| [reply] [Watch: Dir/Any] |