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; }