DaniWeb IT Discussion Community

DaniWeb IT Discussion Community (http://www.daniweb.com/forums/index.php)
-   Perl (http://www.daniweb.com/forums/forum112.html)
-   -   Is it possible to pass a subroutine to another subroutine? (http://www.daniweb.com/forums/thread145990.html)

klactose Sep 15th, 2008 10:26 pm
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!

KevinADC Sep 16th, 2008 12:04 am
Re: Is it possible to pass a subroutine to another subroutine?
 
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";
}

klactose Sep 22nd, 2008 12:37 am
Re: Is it possible to pass a subroutine to another subroutine?
 
Hey Kevin,

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


All times are GMT -4. The time now is 2:46 pm.

Forum system based on vBulletin Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
©2003 - 2009 DaniWeb® LLC