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