in reply to Subroutines: @_ and shift

Are you sure you are quoting Learning Perl fairly? I suspect that what you saw was

my ($blah) = @_;
which, like
my $blah = shift;
assigns the first element of @_ to $blah, although the form using shift has the additional effect of removing this first element from @_. Or maybe you saw
my @blah = @_;
which assigns all of @_ to the array @blah.

In contrast, what you quoted,

my $blah = @_;
just assigns to $blah the size of @_.

BTW, golfers are partial to pop:

my $blah = pop;
or perhaps I should say
$b=pop;
which is equivalent to shift when @_ has length 1 (or 0), butsavesem2strokes.

the lowliest monk