An interesting selection of approaches in this thread, here's a variation on slicing.
knoppix@Microknoppix:~$ perl -E '
> @arr = qw{ one two three four };
> say for do { local @arr = @arr[ 0 .. $#arr - 1 ]; @arr };
> say qq{@arr};'
one
two
three
one two three four
knoppix@Microknoppix:~$
Update: You can't localise a lexical variable so, if running under strictures you would have to declare @arr with our to make it a package variable or make it a lexical with my and declare a new lexical inside the do block.
knoppix@Microknoppix:~$ perl -Mstrict -wE '
> our @arr = qw{ one two three four };
> say for do { local @arr = @arr[ 0 .. $#arr - 1 ]; @arr};
> say qq{@arr};'
one
two
three
one two three four
knoppix@Microknoppix:~$
knoppix@Microknoppix:~$ perl -Mstrict -wE '
> my @arr = qw{ one two three four };
> say for do { my @arr = @arr[ 0 .. $#arr - 1 ]; @arr};
> say qq{@arr};'
one
two
three
one two three four
knoppix@Microknoppix:~$
|