954,541 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Is it possible to pass a subroutine to another subroutine?

Hello,

I am writing some testing scripts. At the end of each test I may have to return my environment back to it's default state using various subroutines in various modules. I realize that using the END block I can run these subroutines, however I have hundreds of these test to write and there is various formatting, etc, that is repetitious... so I want to include a single function in my END block that will accept other functions as parameters and then be able to run them from within itself.

A simple example would be:

sub function_runner {
my @exit_functions = @_;
my $counter = 1;
foreach &function (@exit_functions) {
print "Performing exit function $counter:\n"; $counter++;
&function;
}
print "\nAll exit functions completed.\n";
}


I realize this will not work as is, but the gist of what I am trying do is to be able to have function_runner(function1, function2, function3, etc) in my end block. Any help point me in the right direction would be greatly appreciated.

Thanks!

klactose
Light Poster
43 posts since Feb 2008
Reputation Points: 10
Solved Threads: 1
 

You could try using a reference to a function.

sub some_function {
   print "foo";
}

my $some_function = \&some_function;


You can pass $some_function like any other scalar, but you need to use the arrow operator to run the function.

$some_function->()


Assuming you pass references to functions to your sub rotuine:

sub function_runner {
   my @exit_functions = @_;
   my $counter = 1;
   foreach my $function (@exit_functions) {
      print "Performing exit function $counter:\n";
      $counter++;
      $function->();
   }
   print "\nAll exit functions completed.\n";
}
KevinADC
Posting Shark
921 posts since Mar 2006
Reputation Points: 246
Solved Threads: 67
 

Hey Kevin,

Just wanted to thank you. Passing references to the functions is exactly what I was trying to do, and it worked perfectly.

klactose
Light Poster
43 posts since Feb 2008
Reputation Points: 10
Solved Threads: 1
 

This question has already been solved

Post: Markdown Syntax: Formatting Help
You