Pregunta

Ejecución de ActiveState Perl 5.10.1 en win32.

¿Cómo es que este código:

die(defined($r->unparsed_uri =~ '/(logout.pl)?$'));

... troqueles y moldes con 1, mientras que el cambio de la misma línea de decir esto:

die($r->unparsed_uri =~ '/(logout.pl)?$');

... troqueles y moldes con Use of uninitialized value in die?

¿Cómo es que todavía defined uninitialized? Pensé que no inicializado significaba indefinido.

¿Fue útil?

Solución

En el primer caso, la operación de adaptación está teniendo lugar en contexto escalar. En el segundo caso, se está llevando a cabo en el contexto gama, casi como si hubiera escrito:

my @groups = $r->unparsed_uri =~ '/(logout.pl)?$';
die @groups;

Si $r->unparsed_uri coincide con el patrón, pero $1 está definido porque la cadena coincidente terminó con "/", entonces @groups será una matriz de longitud 1, que contiene el único undef elemento.

poner todo junto, es como si hubieras dicho:

die(undef);

Otros consejos

¿Tiene activadas las advertencias?

Dado

#!/usr/bin/perl -l

use strict; use warnings;

my $uri;

die(defined($uri =~ '/(logout.pl)?$'));

consigo

Use of uninitialized value $uri in pattern match (m//) at E:\t.pl line 7.
1 at E:\t.pl line 7.

que explica lo que está pasando.

$uri no está definido, por lo que obtener una advertencia para el uso que en m//. Debido $uri no está definido, el resultado del partido es falsa, pero definido . Por lo tanto, los rendimientos defined verdadera y die 1 salidas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top