즉, coderef "평등"을 어떻게 확인할 수 있습니까?Perl 스칼라가 특정 서브 루틴에 대한 참조를 보유하고 있는지 어떻게 확인할 수 있습니까?
smartmatch 연산자 (CODE->(ANY)
로 취급 것) for obvious reasons 작동하지 않습니다,하지만 난 후 난 무엇을 보여주기 위해 예제를 포함 시켰습니다 :
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" ;
놀랍습니다. 설명해 주겠다고? – Zaid
@Zaid 편집을 참조하십시오. – jpalecek
같은 기본 코드가 호출 되더라도 동일한 클로저의 여러 인스턴스 사이에서도 구별 할 수 있습니다. 'for my $ a (1..2) {push @x, sub {print $ a}} $ x [ 0](); $ x [1](); print $ x [0]! = $ x [1] '' – ysth