0

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!

2
Contributors
2
Replies
3
Views
8 Years
Discussion Span
Last Post by klactose
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";
}
Votes + Comments
His post was very helpful
0

Hey Kevin,

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

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.