15
Este es un extracto de AnyEvent::Intro
¿Por qué uno elegiría declarar e inicializar una variable léxica en declaraciones separadas?
# register a read watcher
my $read_watcher; $read_watcher = AnyEvent->io (
fh => $fh,
poll => "r",
cb => sub {
my $len = sysread $fh, $response, 1024, length $response;
if ($len <= 0) {
# we are done, or an error occurred, lets ignore the latter
undef $read_watcher; # no longer interested
$cv->send ($response); # send results
}
},
);
¿Por qué usa
my $read_watcher; $read_watcher = AnyEvent->io (...
en lugar de
my $read_watcher = AnyEvent->io (...
?
AFAIK ninguna diferencia; probablemente solo estilo – ShinTakezou
ShinTakezou: ¿lo intentaste? con estricto? Lanzar el 'Símbolo global' $ read_watcher 'requiere el nombre del paquete explícito' en este último es bastante la diferencia. Incluso sin estricto, el $ lexico $ read_watcher sería una variable diferente al paquete con alcance $ read_watcher dentro del valor del código. – MkV
de AnyEvent :: Introducción: El motivo de esto es una peculiaridad en la forma en que funciona Perl: los nombres de variables declarados con "mi" solo son visibles en la siguiente declaración. Si toda la llamada "AnyEvent-> io", incluida la devolución de llamada, se haría en una sola declaración, la devolución de llamada no podría referirse a la variable $ read_watcher a "undef" ine it, por lo que se hace en dos instrucciones. – MkV