#!/usr/local/bin/perl -w use strict; sub a { print "Hi from a\n"; } sub b { print "Hi from b\n"; } doit('a'); doit('b'); $main::c=1; $main::c++; doit('c'); sub doit { my $func=shift; unless (exists($::{$func}) && defined(&{$::{$func}})) { print "Invalid function called: $func\n"; return 1; }; no strict 'refs'; &{$func}; } __END__ Hi from a Hi from b Invalid function called: c