sub lookup_subname { my($pkg, $sub) = @_; no strict 'refs'; return ( grep { $pkg->can($_) eq $sub } keys %{"$pkg\::"} )[0]; } sub foo; sub _bar; my %hash = ( foo => \&foo, bar => \&_foo ); for my $f (keys %hash) { my $name = lookup_subname __PACKAGE__, $hash{$f}; printf "%s is %s\n", $f, ( $name =~ /^_/ ? 'private' : 'public' ); } __output__ bar is private foo is public