Wie kann ich überprüfen, ob ein Perl-Skalar einen Verweis auf eine bestimmte Subroutine enthält?

8

Mit anderen Worten, wie kann ich nach Coderef "Gleichheit" suchen?

Der Smartmatch-Operator funktioniert nicht aus offensichtlichen Gründen (würde ihn als CODE->(ANY) behandeln) , aber ich habe es in das Beispiel eingefügt, um zu zeigen, wonach ich suche:

%Vor%     
Zaid 11.11.2012, 16:59
quelle

1 Antwort

11

Sie können die normale (numerische) Gleichheit ( == ) verwenden, wie es bei allen Referenzen der Fall ist:

%Vor%

Live in Aktion hier

Das bricht, wenn die Referenz mit etwas gesegnet ist, das == oder 0+ überlädt (was für Coderefs unwahrscheinlich ist). In diesem Fall würden Sie Scalar::Util::refaddr($selected) vergleichen.

Von man perlref :

  

Wenn Sie einen Verweis als Zahl verwenden, wird eine Ganzzahl erzeugt, die den Speicherort im Speicher darstellt. Die einzige nützliche Sache, die damit gemacht wird, ist, zwei zu vergleichen          verweist numerisch darauf, ob sie sich auf den gleichen Ort beziehen.

%Vor%
    
jpalecek 11.11.2012, 17:07
quelle

Tags und Links