in reply to Subroutines: @_ and shift

my $blah = @_ is almost always not what you want. Pick one of these:

my ($blah) = @_; # note the ()s. w/o them $blah is the size of @_. my $blah = shift;

shift modifies @_, which *typically* you don't need to do. For that reason, and for consistency with cases where my method takes args, I prefer the @_ syntax.

my ($first, $second, @rest) = @_;

In OOP, occasionally you want to delegate part of your work to another method. In that case shift sometimes makes sense. You might see code like this.

sub frontend { shift->backend("an extra arg", @_) }

Update: Perl6 - how could I forget :)

In Perl6, you don't normally need to access @_ explicitly. Declare the formal argument and that's that.

sub mine ($blah) { say "$blah is now visible here."; }