Cuando ejecuto el siguiente código, obtengo Can't locate SomePackage.pm in @INC ...
.¿Por qué una sentencia de 'uso' se ejecuta primero en un bloque BEGIN?
BEGIN {
die;
use SomePackage;
}
¿Por qué se ejecuta antes use
die
?
Cuando ejecuto el siguiente código, obtengo Can't locate SomePackage.pm in @INC ...
.¿Por qué una sentencia de 'uso' se ejecuta primero en un bloque BEGIN?
BEGIN {
die;
use SomePackage;
}
¿Por qué se ejecuta antes use
die
?
use SomePackage
es exactamente equivalente a
BEGIN { require SomePackage; SomePackage->import }
Un bloque BEGIN
código se ejecuta tan pronto como sea posible, es decir, el momento en que es completamente definido . El segundo BEGIN
(que está implícito en use
) está completamente definido primero, y por lo tanto se ejecuta primero.
+1 para Perl arcana. Ay. – Axeman
De http://perldoc.perl.org/functions/use.html
Dado que el uso tiene efecto durante la compilación tiempo, que no respeta la corriente de control flujo del código compilado siendo .
No estoy seguro, pero el uso se evalúa en tiempo de compilación y muere en tiempo de ejecución. – Toto
@ M42 Bueno, los bloques 'BEGIN' también se evalúan en tiempo de compilación. –