2013-07-31 9 views
10

Oto mój skrypt Perl, a jego produkcja:Dlaczego Perl narzeka "Bezużyteczne użycie stałego w pustym kontekście", ale tylko czasami?

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" 

spodziewałbym ostrzeżenia w każdym wierszu. Co jest wyjątkowego w przypadku undef, 0 i , co powoduje, że tak się nie dzieje?

Odpowiedz

13

Udokumentowane w perldoc perldiag wraz z uzasadnieniem:

To ostrzeżenie nie zostanie wydany dla stałych liczbowych równych 0 lub 1 ponieważ są one często stosowane w sprawozdaniach jak

1 while sub_with_side_effects(); 

Jeśli chodzi o undef, jest to funkcja, która używa nawet w pustym kontekście. na przykład undef($x) robi coś podobnego do —, ale różni się od — $x = undef();. (Zazwyczaj chcesz to drugie.) Ostrzeżenie może być wydane dla zastosowań undef bez argumentów w pustym kontekście, ale wymagałoby to wyspecjalizowanego kodu, a po prostu nie jest potrzebne.

+0

Chciałem to również powiedzieć. W sekcji "Bezużyteczne użycie% s w pustym kontekście" jest napisane, że "To ostrzeżenie nie zostanie wydane dla stałych numerycznych równych 0 lub 1" http://perldoc.perl.org/perldiag.html#Useless-use-of- % s-in-void-context – chilemagic

+0

Ładne kopanie przez dokumenty. Nie wyjaśnia jednak '(undef, 1)'. (Czy wyrzucenie 'undef' nie jest uważane za coś odrzuconego?) –

+0

@ Ted Hopp, Dodałem wyjaśnienie dla' undef'. – ikegami

Powiązane problemy