This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
op.c: Distangle split and common-vars
authorFather Chrysostomos <sprout@cpan.org>
Fri, 10 Oct 2014 15:45:29 +0000 (08:45 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Sat, 11 Oct 2014 07:10:19 +0000 (00:10 -0700)
commit4ecee209f85984e2bab6cc57c1bf8429c45778c0
tree2880fe55804ae3b6186fdd3c57fd7051f04973c9
parent821956c5ad64b435bbafd981742317802470912d
op.c: Distangle split and common-vars

The split-to-array optimisation was being skipped if the assignment
referenced the same variable on both sides, or if it referenced @_
(since @_ aliases other vars).  This was to prevent split from freeing
its own argument when writing to the array.

As the previous commit shows, that didn’t actually work properly, and
so that commit used a different means to work around that problem.

So now there is no reason to skip the optimisation in such cases.

    @_ = split;
    @a = split //, $a[0];

now optimise away the assignment.

(This also allows me to move the common-vars check into the peep-
hole optimiser, where it needs to be to work correctly with lexi-
cal aliases.)
op.c