De acuerdo con esta¿Por qué no debería usar UNIVERSAL :: isa?
http://perldoc.perl.org/UNIVERSAL.html
que no debería usar UNIVERSAL :: ISA() y en su lugar debería utilizar $ obj-> ISA() o de clase> ISA().
Esto significa que para saber si algo es una referencia en el primer lugar y luego se hace referencia a esta clase que tengo que hacer
eval { $poss->isa("Class") }
y comprobar $ @ y todo lo que gumph, o de lo contrario
use Scalar::Util 'blessed';
blessed $ref && $ref->isa($class);
Mi pregunta es ¿por qué? ¿Qué pasa con UNIVERSAL :: isa llamado así? Es mucho más limpio para cosas como:
my $self = shift if UNIVERSAL::isa($_[0], __PACKAGE__)
Para ver si esta función se está llamando al objeto o no. ¿Y hay una buena alternativa limpia que no se vuelva engorrosa con los símbolos y las líneas potencialmente largas?
UNIVERSAL :: isa NO requiere una referencia bendecida. Funciona muy bien en referencias no autorizadas también (por ejemplo, UNIVERSAL :: isa ([7], 'ARRAY') devuelve 1). Como se explica en los documentos, si le pasa una cadena, la trata como un nombre de clase (como lo demuestra su ejemplo). – cjm
@cjm: Tienes razón, debería aclarar eso. –
Por supuesto, hay un momento en que [en realidad desea el segundo número] (http://www.perlmonks.org/?node_id=576091) ... pero debe tener cuidado con las otras limitaciones, si eso es lo que Estoy tratando de hacer. – Joe