2011-08-04 18 views

Odpowiedz

5

Zawsze używaj ostrzeżenia, szczególnie na jednego -liners.

Perl nie ma prawdziwych ani fałszywych nazwanych stałych, i bez ostrzeżeń lub ścisłych włączonych, "bareword" (coś, co może być stałą lub funkcją, ale nie jest), jest interpretowane w sposób cichy jako ciąg znaków. Więc robisz if("true") i if("false"), a wszystkie ciągi inne niż "" lub "0" są prawdziwe.

10

Jeśli uruchomić go z surowymi:

perl -Mstrict -e 'if(true) { print 1 }' 

dostaniemy powód:

Bareword "true" not allowed while "strict subs" in use at -e line 1. 

jest interpretowany jako ciąg "true" lub "false" które jest zawsze prawdziwe. Stałe nie są zdefiniowane w Perlu, ale można to zrobić samemu:

use constant { true => 1, false => 0 }; 
if(false) { print 1 } 
8

Używasz gołe słowa true i false. Nagie słowa są złą rzeczą. Jeśli spróbujesz to:

use strict; 
use warnings; 
if (true){print 1} 

Pewnie coś takiego:

Bareword "true" not allowed while "strict subs" in use at - line 3. 
Execution of - aborted due to compilation errors. 

Wszelkie zdefiniowaną wartość, która nie wygląda jak 0 jest uważane za „prawdziwe”. Każda niezdefiniowana wartość lub jakakolwiek wartość, która wygląda jak 0 (taka jak 0 lub "0"), jest uznawana za "fałsz". Nie ma wbudowanego słowa kluczowego dla tych wartości. można po prostu użyć 0 i 1 (lub trzymać w use constant { true => 1, false => 0}; czy to naprawdę przeszkadza. :)

+0

jestem przenoszenie 4GL kod do Perl 5, i mając stałe pomaga. Zapomniałem o nich. Dzięki. – octopusgrabbus

Powiązane problemy