diff options
author | Yitzchak Scott-Thoennes <sthoenna@efn.org> | 2008-03-04 08:54:29 -0800 |
---|---|---|
committer | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2008-03-10 11:07:11 +0000 |
commit | 3788ef8ffa548a64c7425dab843bc6e906dec25c (patch) | |
tree | 27afadca4fd53b59c67971b89905f6830345539e | |
parent | 8ed0547917b5366519f80a9298ced6aebb27aeef (diff) | |
download | perl-3788ef8ffa548a64c7425dab843bc6e906dec25c.tar.gz |
count-only transliteration needlessly makes copy-on-write
From: "Yitzchak Scott-Thoennes" <sthoenna@efn.org>
Message-ID: <47935.71.32.86.11.1204678469.squirrel@webmail.efn.org>
p4raw-id: //depot/perl@33457
-rw-r--r-- | doop.c | 4 | ||||
-rwxr-xr-x | t/op/tr.t | 9 |
2 files changed, 10 insertions, 3 deletions
@@ -633,10 +633,10 @@ Perl_do_trans(pTHX_ SV *sv) PERL_ARGS_ASSERT_DO_TRANS; - if (SvREADONLY(sv)) { + if (SvREADONLY(sv) && !(PL_op->op_private & OPpTRANS_IDENTICAL)) { if (SvIsCOW(sv)) sv_force_normal_flags(sv, 0); - if (SvREADONLY(sv) && !(PL_op->op_private & OPpTRANS_IDENTICAL)) + if (SvREADONLY(sv)) Perl_croak(aTHX_ PL_no_modify); } (void)SvPV_const(sv, len); @@ -6,7 +6,7 @@ BEGIN { require './test.pl'; } -plan tests => 117; +plan tests => 118; my $Is_EBCDIC = (ord('i') == 0x89 & ord('J') == 0xd1); @@ -461,3 +461,10 @@ is($s, "AxBC", "utf8, DELETE"); is($c, "\x20\x30\x40\x50\x60", "tr/\\x00-\\x1f//d"); } +($s) = keys %{{pie => 3}}; +my $wasro = Internals::SvREADONLY($s); +{ + $wasro or local $TODO = "didn't have a COW"; + $s =~ tr/i//; + ok( Internals::SvREADONLY($s), "count-only tr doesn't deCOW COWs" ); +} |