2013-07-31 9 views
10

Ecco il mio script Perl e la sua uscita:Perché Perl si lamenta "Uso inutile di una costante nel contesto vuoto", ma solo qualche volta?

use strict; 
use warnings; 

(undef, 1); # no output 
(0, 1);  # no output 
(1, 1);  # no output 
(2, 1);  # "Useless use of a constant in void context at C:\...\void.pl line 7" 
(3, 1);  # "Useless use of a constant in void context at C:\...\void.pl line 8" 
("", 1); # "Useless use of a constant in void context at C:\...\void.pl line 9" 
("0", 1); # "Useless use of a constant in void context at C:\...\void.pl line 10" 
("1", 1); # "Useless use of a constant in void context at C:\...\void.pl line 11" 

mi aspetterei avvertimenti a ogni linea. Qual è la particolarità di undef, 0 e 1 che causa questo non accadere?

risposta

13

documentato in perldoc perldiag completo di logica:

Questo avviso non sarà rilasciato per le costanti numeriche pari 0 o 1 dal momento che sono spesso utilizzati nelle dichiarazioni come

1 while sub_with_side_effects(); 

Per quanto riguarda undef, è una funzione che utilizza anche nel contesto vuoto. per esempio. undef($x) ha qualcosa di simile a — ma diverso da — $x = undef();. (Di solito si desidera quest'ultima.) Potrebbe essere emesso un avviso per gli usi di undef senza argomenti nel contesto vuoto, ma richiederebbe codice specializzato e semplicemente non è necessario.

+0

Stavo per dire anche questo. Sotto 'Uso inutile di% s nel contesto void' che' Questo avviso non verrà emesso per costanti numeriche uguali a 0 o 1' http://perldoc.perl.org/perldiag.html#Useless-use-of- % s-in-void-context – chilemagic

+0

Bello scavare attraverso i documenti. Non spiega '(undef, 1)', però. (Sta buttando via "undef" considerato che non butta via nulla?) –

+0

@Ted Hopp, ho aggiunto una spiegazione per "undef". – ikegami

Problemi correlati