2011-06-21 16 views
8

kod w następujący sposób:Czy konieczne jest używanie ostrzeżeń, gdy już używasz ścisłego?

use strict; 
use warnings; 

Czy use warnings; konieczne tutaj?

+0

Widziałem to zbyt często. Moja nowa odpowiedź będzie następująca: http://joelslinux.blogspot.com/2011/06/use-strict-and-warnings.html –

+2

Szczerze mówiąc, jestem zaskoczony, że społeczność uznała za stosowne głosować tak wysoko, gdy http: //stackoverflow.com/search?q=%5Bperl%5D+strict+warunki pokazują, że zostało to kilka razy odświeżone. –

Odpowiedz

8

Tak, to konieczne.

i use warnings robić różne rzeczy.

od modułu strict manpage:

ścisłym - Perl Pragma ograniczyć niebezpieczne konstrukcje

Od perlrun (dla -w):

drukuje ostrzeżenia o wątpliwych konstruktów takie jak nazwy zmiennych , które są wymienione tylko Zmienne raz skalarne, które są wykorzystywane przed nowo ustawić, podprogramy, odniesienia do niezdefiniowanych uchwytów plików lub uchwytów plików otwarty tylko do odczytu, które są próby zapisu na wartości stosowane jako numer, który NIE wyglądać jak liczb, używając tablicy tak, jakby był skalarem, jeśli podprogramy powtarzają się głębiej niż 100 i niezliczoną liczbę innych rzeczy o numerach .

+0

czy istnieje przykład, który pokazuje "ostrzeżenia użycia" robi dodatkowe rzeczy? –

+0

yes - patrz edit, aby publikować posty podczas komentowania. – Alnitak

+1

Powinieneś cytować [perldiag] (http://p3rl.org/diag) i [perllexwarn] (http://p3rl.org/lexwarn) dla 'use ostrzeżenia' zamiast perlrun' -w'. – daxim

5

Tak. ścisła ochrona przed bardzo ograniczoną liczbą rzeczy. ostrzeżenia informują o innym i znacznie szerszym zestawie problemów.

3

Tak, należy rozważyć:

perl -le "use strict; my $f; my $z = $f*1" 

ścisłe nie poinformować, że $ f jest niezdefiniowany, natomiast ostrzeżenia dodając będzie:

perl -le "use strict; use warnings; my $f; my $z = $f*1" 
Use of uninitialized value $f in multiplication (*) at -e line 1. 

więc rada, aby umożliwić obu.

+0

Nie otrzymałem 'Użycie niezainicjowanej wartości $ f w mnożeniu (*) w linii -1. 'Pod perl v 5.8.8 –

+0

Czy jesteś pewien? Właśnie przetestowałem to na 5.8.8 i 5.10.1. Oba dają ten sam komunikat o błędzie. Czy może masz zmodyfikowaną wersję Perla? A może zapomniałeś "używać ostrzeżeń;". – Htbaa

+0

@new_perl, masz bardzo zepsutą instalację Perla. (Myślę, że 5.8.8 nie wspomniał o "$ f" w ostrzeżeniu, ale wydał ostrzeżenie.) – ikegami

1

"Co rozumiesz przez koniecznie?" to moja odpowiedź.

Jeśli uważasz, że strict i warnings to to samo, jesteś w błędzie. Inni ludzie dali bardzo dobre odpowiedzi, tak jak każda pragma.

use warnings spowoduje, że będziesz lepszym koderem. Jeśli nauka jest ważna, moja odpowiedź brzmi "tak".

Pomoże również w uniknięciu błędów, ułatwi zrozumienie błędów.

Ogólnie rzecz biorąc, chciałbym powiedzieć, że istnieje bardzo niewiele razy, kiedy jest uzasadnione, aby nie używać zarówno strict i warnings. Używam nawet ostrzeżeń w moich liniowych, np.> perl -we 'print "Hello world!"'

Trwa kilka sekund, aby wpisać, ale pozwoli Ci zaoszczędzić godziny bez zbędnego debugowania pracy.

2

To nie jest konieczne w rzeczywistym znaczeniu tego słowa. Oznacza to, że program nie wymaga jego działania. Ludzie często zapominają, co oznacza.

Jeśli jednak twoje pytanie brzmi "Czy ścisłe włączanie ostrzeżeń?", Odpowiedź brzmi "nie". Możesz zobaczyć, co ścisłe robi reading its documentation.

warnings są często przydatne przy wskazywaniu problemów, które należy naprawić. Jednak ostrzeżenia Perla nie wymagają ich poprawiania, więc program może kontynuować, nawet jeśli emituje ostrzeżenia.

Niektórzy ludzie powiedzą Ci, aby zawsze używać ostrzeżeń, ale robią tego rodzaju reguły, aby nie musieli o tym myśleć, ani wyjaśniać osobom, które nie będą o tym myśleć. To niepopularne stanowisko mówiące o czymkolwiek innym niż "zawsze używaj ostrzeżeń".

warnings to narzędzie dla programistów, a jeśli ludzie, którzy widzą ostrzeżenia, nie będą wiedzieli, co to jest i co z nimi zrobić, prawdopodobnie będą powodować irytację lub zamieszanie. Widziałem kilka przypadków, w których nowe perle zaczęły emitować nowe ostrzeżenia dla programów, które następnie zapełniały dyski, ponieważ nikt nie monitorował plików dziennika.

Mam znacznie bardziej zniuansowaną zasadę: "stosuj ostrzeżenia, gdy coś z nimi zrobisz, i nie używaj ich, jeśli tego nie zrobisz".

Nie mówię nawet "Zawsze pisz bez ostrzeżenia kod". Jest mnóstwo kodu, który piszę, że uruchomię dokładnie jeden raz, lub z linii poleceń, lub w innych sytuacjach, w których nie dbam o niechlujstwo. Nie podoba mi się dawanie ostrzeżeń innym ludziom, ale nie mam obsesji na punkcie małych rzeczy, które robię dla siebie.

+0

ostre głosy w sprawie tych, których poglądy się nie zgadzają. W moim przypadku odpowiedź była oparta na interpretowaniu pytania jako "_ jest" używanie ostrzeżeń "podzbiór" użyj ścisłego "?" _ - to znaczy "używaj ścisłego" unika potrzeby "używania ostrzeżeń" w ogóle. – Alnitak

Powiązane problemy