2012-10-09 26 views
20

Bajo¿Por qué la multiplicación de cadenas de Perl no advierte sobre undef?

use strict; 
use warnings; 
my $foo = undef; 

las expresiones

$foo . '' 

y

"$foo" 

tanto producen

Use of uninitialized value $foo in ... at ... 

pero la siguiente expresión da º e cadena vacía sin previo aviso:

$foo x 1 

Cualquiera sabe por qué? Quiero decir, es genial tener un buen modismo de stringification ($_ x 1 es bastante más corto que defined ? "$_" : ''), pero se siente un poco raro.

+2

Estoy seguro de que no fue intencional, al menos no al principio. – ikegami

+0

'perldoc perlop' (busque" Operadores Multiplicativos ") no dice nada sobre el comportamiento de' x' con un operando 'undef' a la izquierda. Estoy de acuerdo, es probable que sea involuntario. –

Respuesta

9

Una vez vi un espectáculo con una escena en una clase de la escuela de leyes. El instructor presentó dos casos similares a sus alumnos y preguntó por qué dieron lugar a diferentes fallos. Es porque los fallos fueron dictados por los jueces, y los jueces son personas, explicó finalmente.

Eso debería advertir. Los desarrolladores que trabajan en Perl son personas. Ejecute perlbug para enviar un informe de error si lo desea.

+1

+1 para la sabiduría fílmica/televisiva. – pilcrow

Cuestiones relacionadas