in reply to Help with argument to a subroutine

All the arguments are in the array @_. In the provided code, the function only has one argument, so it can be referenced as $_[0]. A convenient way of assigning names to your arguments is

sub parse_header { my ($header) = @_; do this and thia }

but some people prefer

sub parse_header { my $header = shift; do this and thia }

Inside a function, shift with no arguments is the same as shift(@_).

If you had more than one argument, the above would look as follows:

sub three_args_func { my ($arg0, $arg1, $arg2) = @_; do this and thia }
sub three_args_func { my $arg0 = shift; my $arg1 = shift; my $arg2 = shift; do this and thia }

Reference: perlsub

Replies are listed 'Best First'.
Re^2: Help with argument to a subroutine
by dsheroh (Monsignor) on May 15, 2006 at 21:37 UTC
    Veering OT for a moment...

    Stylistically, I prefer the

    my ($header) = @_;

    method of receiving arguments, but always end up doing it the other way for the sake of being able to specify defaults when not all arguments are passed:

    my $arg0 = shift || 'foo'; my $arg1 = shift || 'bar'; my $arg2 = shift || 'baz';
    Is there a concise way to get this same functionality when using the my ($arg) = @_ method?
      It would be quite ugly:
      my @defaults = qw( foo bar baz ); my ($arg0, $arg1, $arg2) = map { $_[$_] || $defaults[$_] } 0..$#_;