if (strchr("aAZ", lookahead.code)) {
if (lookahead.howlen == e_number) count = lookahead.length;
else {
- if (items > 0)
+ if (items > 0) {
+ if (SvGAMAGIC(*beglist)) {
+ /* Avoid reading the active data more than once
+ by copying it to a temporary. */
+ STRLEN len;
+ const char *const pv = SvPV_const(*beglist, len);
+ SV *const temp = sv_2mortal(newSVpvn(pv, len));
+ if (SvUTF8(*beglist))
+ SvUTF8_on(temp);
+ *beglist = temp;
+ }
count = DO_UTF8(*beglist) ?
sv_len_utf8(*beglist) : sv_len(*beglist);
+ }
else count = 0;
if (lookahead.code == 'Z') count++;
}
}
}
-use Test::More tests => 202;
+use Test::More tests => 208;
package UTF8Toggle;
use strict;
like ($pieces ^ $bits, qr/\A\0+\z/, "something xor itself is zeros");
}
+foreach my $value ("\243", UTF8Toggle->new("\243")) {
+ is (pack ("A/A", $value), pack ("A/A", "\243"),
+ "pack copes with overloading");
+ is (pack ("A/A", $value), pack ("A/A", "\243"));
+ is (pack ("A/A", $value), pack ("A/A", "\243"));
+}
+
END {
1 while -f $tmpfile and unlink $tmpfile || die "unlink '$tmpfile': $!";
}