[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]
[perl #60374] Safe.pm sort {} bug with -Dusethreads
# New Ticket Created by "Alex Hunsaker"
# Please include the string: [perl #60374]
# in the subject line of all future correspondence about this issue.
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=60374 >
When using a threading perl and you reval an anon sub that contains a sort,
a/$b loose their values. Both 5.8.8 and 5.10.0 seem to be affected.
(see attached perl.v for perl -V output)
-Dusethreads
perl tsafe.pl
debug:
debug:
debug:
debug:
debug:
debug:
debug:
debug:
debug: 5 4 3 2 1
without -Dusethreads
perl1 tsafe.pl
debug: 4
debug: 2
debug: 2
debug: 3
debug: 1
debug: 1 2 3 4 5
tsafe.pl
==========
use Safe;
my $safe = Safe->new('PLPerl');
$safe->permit_only(':default');
$safe->permit(qw(sort));
$safe->share(qw(&debug));
sub debug {
print "debug: ". (shift) . "\n";
}
my $func = $safe->reval(<<'z');
sub {
my @c = sort { debug("$b"); "$a" <=> $b } qw(5 4 3 2 1);
debug(join(" ", @c));
return;
}
z
#my $f = eval 'package PLPerl; sub { @_=(); $func->(); }';
$func->();
die $@ if($@);
perl.v
perl1.v
use Safe;
my $safe = Safe->new('PLPerl');
$safe->permit_only(':default');
$safe->permit(qw(sort));
$safe->share(qw(&debug));
sub debug {
print "debug: ". (shift) . "\n";
}
my $func = $safe->reval(<<'z');
sub {
my @c = sort { debug("$b"); "$a" <=> $b } qw(5 4 3 2 1);
debug(join(" ", @c));
return;
}
z
$main::b = 1;
#my $f = eval 'package PLPerl; sub { @_=(); $func->(); }';
$func->();
die $@ if($@);
[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]