Jeśli jesteś właścicielem tej strony, możesz wyłączyć reklamę poniżej zmieniając pakiet na PRO lub VIP w panelu naszego hostingu już od 4zł!
2013-01-03    Programowanie, Kod, Perl, Błąd, Wikibooks

Witajcie,
Nareszcie udaje mi się wrzucić pierwszy post o "prawdziwym" programowaniu.
Zgodnie z postanowieniami noworocznymi miałem poszerzyć swoją widzę na temat Perla. Przeglądając dziś artykuły na temat tego języka, ujrzałem na stronie wikibooks pewien dosyć poważny błąd.

Otóż, Na jednej z podstron o wyrażeniach regularnych pojawił się następujący kod:

$string = "Sky.";
if($string =~ /[^aeiouy]/) {
   print "$string nie zawiera zadnych samoglosek";
}

Program z mojego punktu ma przeszukać dany string i jeżeli nie znajdzie żadnej samogłoski to ma wypisać konkretny komunikat. Jednak tak się nie stanie.

Autor mylnie stwierdził, że wyrażenie [^aeiouy] jeśli nie znajdzie żadnej samogłoski to zwróci prawdę. Co jest nie prawdą.

Aby łatwiej było nam uświadomić, dlaczego tak się nie stanie, przeanalizujmy poniższy kod:

if($string =~ /[aeiouy]/) {
     print "znalazlem samogloske :)";
}

Kod prościutki, zwróci nam prawdę i wyświetli text jeżeli znajdzie jakąkolwiek samogłoskę.

/[^aeiouy]/ - jak wiemy jest to zanegowanie klasy znaków. Równie dobrze, warunek ten możemy zapisać następująco: /[bcdfghjklmnprstwxz]/ czyli przeszukiwanie takie samo co w listingu 2, tylko z innymi wartościami.
Wyrażenie takie będzie prawdziwe jeżeli wystąpi JAKAKOLWIEK spółgłoska, a przecież nie o to nam chodziło.

A więc jak powinien wyglądać poprawny kod? Można to napisać w następujący sposób:

if($string =~ /^[aeiouy]$/) {
     print "$string nie zawiera zadnych samoglosek";
}
Dodaj komentarz:
Nick:
URL(opcjonalnie):