use strict; use warnings; sub Invoker::first_callback { my $z = shift; print "in first_callback, z=$z\n"; return 1; } sub Invoker::last_callback { my $z = shift; print "in last_callback, z=$z\n"; return 2; } sub invoker { my ($name, $z) = @_; my $handler = 'Invoker::' . $name . "_callback"; no strict 'refs'; my $rc = eval { &$handler($z) }; return defined($rc) ? $rc : -1; } # Main program for testing --------------------------------- for my $name ( "first", "last", "fred" ) { my $rc = invoker( $name, $name . '-arg' ); print "$name: rc=$rc\n"; }