in reply to Re: Code challenge: array subrange
in thread Code challenge: array subrange

local $[ = $r->[0]

I had the same thought; localize $[ and let it do the work, and probably ran into the same problem. That sent me diving back into perlvar.

We've had drilled into our heads not to use $[ with such a strong emphasis on DON'T that I at least had completely forgotten...

As of release 5 of Perl, assignment to $[ is treated as a compiler directive, and cannot influence the behavior of any other file. (That's why you can only assign compile-time constants to it.)


Dave

Replies are listed 'Best First'.
Re^3: Code challenge: array subrange
by dragonchild (Archbishop) on Jan 13, 2005 at 16:41 UTC
    Actually, $[ = $r->[0]; will work, but it required more work than I cared to do.
    sub ranger { my @arr = @{$_[0]}; my ($r1, $r2) = @{$_[1]}; my ($sr1, $sr2) = @{$_[2]}; my @v = eval <<__END_EVAL__; \$[ = $r1; ($sr1 < $sr2) ? \@arr[ $sr1 .. $sr2 ] : reverse \@arr[ $sr2 .. $sr1 ]; __END_EVAL__ return @v; }

    Being right, does not endow the right to be rude; politeness costs nothing.
    Being unknowing, is not the same as being stupid.
    Expressing a contrary opinion, whether to the individual or the group, is more often a sign of deeper thought than of cantankerous belligerence.
    Do not mistake your goals as the only goals; your opinion as the only opinion; your confidence as correctness. Saying you know better is not the same as explaining you know better.