Menu

PERL TUTORIALS - Perl Subroutines

Perl Subroutines

ADVERTISEMENTS

Define & Call a Subroutine:

sub subroutine_name{
   body of the subroutine
}

ADVERTISEMENTS

&subroutine_name( list of arguments );

ADVERTISEMENTS

#!/usr/bin/perl

# Function definition
sub Hello{
   print "Hello, World!\n";
}

# Function call
&Hello();

Passing Arguments to a Subroutine:

#!/usr/bin/perl

# Function definition
sub Average{
   # get total number of arguments passed.
   $n = scalar(@_);
   $sum = 0;

   foreach $item (@_){
      $sum += $item;
   }
   $average = $sum / $n;

   print "Average for the given numbers : $average\n";
}

# Function call
&Average(10, 20, 30);

#!/usr/bin/perl

# Function definition
sub PrintList{
   my @list = @_;
   print "Given list is @list\n";
}
$a = 10;
@b = (1, 2, 3, 4);

# Function call with list parameter
&PrintList($a, @b);

#!/usr/bin/perl

# Function definition
sub PrintHash{
   my (%hash) = @_;
   
   foreach $item (%hash){
      print "Item : $item\n";
   }
}
%hash = ('name' => 'Tom', 'age' => 19);

# Function call with hash parameter
&PrintHash(%hash);

Returning Value from a Subroutine:

#!/usr/bin/perl

# Function definition
sub Average{
   # get total number of arguments passed.
   $n = scalar(@_);
   $sum = 0;

   foreach $item (@_){
      $sum += $item;
   }
   $average = $sum / $n;

   return $average;
}

# Function call
$num = &Average(10, 20, 30);
print "Average for the given numbers : $num\n";

Private Variables in a Subroutine:

sub somefunc {
   my $variable; # $variable is invisible outside somefunc()
   my ($another, @an_array, %a_hash); # declaring many variables at once
}

#!/usr/bin/perl

# Global variable
$string = "Hello, World!";

# Function definition
sub PrintHello{
   # Private variable for PrintHello function
   my $string;
   $string = "Hello, Perl!";
   print "Inside the function $string\n";
}
# Function call
&PrintHello();
print "Outside the function $string\n";

Temporary Values via local()

#!/usr/bin/perl

# Global variable
$string = "Hello, World!";

sub PrintHello{
   # Private variable for PrintHello function
   local $string;
   $string = "Hello, Perl!";
   PrintMe();
   print "Inside the function PrintHello $string\n";
}
sub PrintMe{
   print "Inside the function PrintMe $string\n";
}

# Function call
&PrintHello();
print "Outside the function $string\n";

State Variables via state()

#!/usr/bin/perl

use feature 'state';

sub PrintCount{
   state $count = 0; # default value

   print "Value of counter is $count\n";
   $count++;
}

for (1..5){
   &PrintCount();
}

Subroutine Call Context

my $datestring = localtime( time );

($sec,$min,$hour,$mday,$mon, $year,$wday,$yday,$isdst) = localtime(time);