/* ignore the utf8ness if the pattern is 0 length */
RExC_utf8 = RExC_orig_utf8 = (plen == 0 || IN_BYTES) ? 0 : SvUTF8(pat);
- RExC_uni_semantics = 0;
+
+ /* 'use utf8' in the program indicates Unicode rules are wanted */
+ RExC_uni_semantics = (PL_hints & HINT_UTF8);
+
RExC_contains_locale = 0;
RExC_contains_i = 0;
pRExC_state->runtime_code_qr = NULL;
if (initial_charset == REGEX_LOCALE_CHARSET) {
RExC_contains_locale = 1;
}
- else if (RExC_utf8 && initial_charset == REGEX_DEPENDS_CHARSET) {
+ else if ((RExC_utf8 || RExC_uni_semantics)
+ && initial_charset == REGEX_DEPENDS_CHARSET)
+ {
- /* Set to use unicode semantics if the pattern is in utf8 and has the
- * 'depends' charset specified, as it means unicode when utf8 */
+ /* Set to use unicode semantics if has the 'depends' charset specified,
+ * and either the pattern is in utf8 (as it means unicode when utf8),
+ * or we already know we want unicode rules */
set_regex_charset(&rx_flags, REGEX_UNICODE_CHARSET);
}
require './test.pl';
}
-plan tests => 712; # Update this when adding/deleting tests.
+plan tests => 713; # Update this when adding/deleting tests.
run_tests() unless caller;
like "\x{AA}", qr/a?[\W_]/d, "\\W with /d synthetic start class works";
}
+ {
+ use utf8;
+ unlike("\xe0", qr/\W/, "'use utf8' implies /u");
+ }
} # End of sub run_tests