Subroutines

Parameters are passed to subroutines by setting global variables or through the default variable. Here is an example which demonstrates how the the default variable is used:

sub max
{
  my $max= shift(@_); 
  foreach $ret (@_)
  { 
    $max = $ret if $max < $ret; 
  }
  return $max;
}
$bestday = max( $mon,  $tue, $wed, $thu, $fri);

The default variable may contain a reference to a hash:

sub find_device_name
{
    my $params = shift; 
    
    my $device = $$params{device}; 
    if( $device)
    {
	delete $$params{device}; 
	goto device_found;
    }
    ...

device_found:
    return " $device"; 
}
    ...
    $buffer = find_device_name( \%params);
    ...

So far, the subroutines returned scalar variables. It is also possible to return an array:

sub1 
{
...
return wantarray ? ( $a, $b, $c) : undef;
}

...
($x, $y, $z) = sub1();
...

The function wantarray returns 1, if the subroutine was called in a list context:

Note that subroutines may return an undefined value:

sub sub1
{
  ...
  $ret_stat = $somevalue; 
  goto finish;
  ...
  $ret_stat = undef; 
  goto finish;
  ...

finish:
  return $ret_stat;
}
$ret = sub1(); 
if( defined $ret)
{
  ...
}
else {
  print "Error\n";
}

The function caller returns information about the calling frame:

($package, $filename, $line) = caller;

There is an optional numeric argument to caller() which specifies the number of frames to be popped from the stack.



Subsections