Perl subroutines
How to make subroutines
sub test { }
Add sub identifier.
How to use this?
&test;
Return value
sub res_val { $n; }
Arguments
$_[0], $_[1]; is arguments(@_ is arguments)
example
sub max { # Compare if ( $_[0] > $_[1] ) { $_[0]; } else { $_[1]; } } $max_val = &max(3, 5); print "max is $max_val\n";
If you exceed number of argument lie $max(1,2,3); 3 is ignored.
Use private vars in subroutines
Use my
sub min { my($m, $n); # new private vars for this block ($m, $n) = @_; if ( $m < $n ) { $m } else { $n; } } print ("Min is " . &min(2,4) . "\n"); [/perl] One line [perl] my($m, $n) = @_; # fine [/perl] Oh!, return is not needed. Its's optional. <h3>Check arguments number</h3> [perl] sub max2 { if ( @_ != 2 ) { print "Warinng max2 should get exact two arguments\n"; } } &max2(1,2,3); # Oops!
&
& is to differentiate from general module.
state
Nice description is PerlMonks.
This is persistent vars.