#!perl -l use strict; use warnings; sub routine1 { print "Who am I?"; } sub routine2 { print "Where am I?"; } my %all_subs = map { (\&{$main::{$_}} => $_) } grep { defined &{$main::{$_}} } keys %{main::} ; my $some_sub = \&routine1; if ($all_subs{$some_sub}) { print "Found $all_subs{$some_sub}" } else { print "Sub not found"; }