marvin@smokie:~/perltest $ bleadperl dollar_one_utf8_upgrade.pl
Without utf8::upgrade...
a
b
c
With utf8::upgrade...
a
a
a
Problem persists...
a
a
a
marvin@smokie:~/perltest $
####
use strict;
use warnings;
my $text = "a b c";
print "Without utf8::upgrade...\n";
while ( $text =~ /(\S)/g ) {
print "$1\n";
}
print "With utf8::upgrade...\n";
while ( $text =~ /(\S)/g ) {
print "$1\n";
utf8::upgrade($1);
}
print "Problem persists...\n";
my $more_text = "d e f";
while ( $more_text =~ /(\S)/g ) {
print "$1\n";
}
##
##
marvin@smokie:~/projects/perl-git $ git diff
diff --git a/sv.c b/sv.c
index a53669a..280f064 100644
--- a/sv.c
+++ b/sv.c
@@ -3231,6 +3231,8 @@ Perl_sv_utf8_upgrade_flags_grow(pTHX_ register SV *const sv, const I32 flags,
if (extra) SvGROW(sv, SvCUR(sv) + extra);
return len;
}
+ } else if (SvGMAGICAL(sv) && mg_find(sv, PERL_MAGIC_sv)) {
+ ;
} else {
(void) SvPV_force(sv,len);
}