つまり、coderef の「等価性」を確認するにはどうすればよいでしょうか。
smartmatch 演算子は明らかな理由で機能しません(として扱いますCODE->(ANY)
) が、私が求めているものを示すために例に含めました。
use strict;
use warnings;
use feature 'say';
sub pick_at_random {
my %table = @_;
return ( values %table )[ rand( keys %table ) ];
}
my %lookup = ( A => \&foo,
B => \&bar,
C => \&baz );
my $selected = pick_at_random( %lookup );
say $selected ~~ \&foo ? "Got 'foo'" :
$selected ~~ \&bar ? "Got 'bar'" :
$selected ~~ \&baz ? "Got 'baz'" :
"Got nadda" ;