Perl to brzmi jak w trzcinie
Posted on Mon 11 June 2007 in Uncategorized • 2 min read
Nie wiem czy powinienem być dumny ze skryptu w Perlu jaki wydłubałem z pomocą książki o przepisach. Chyba nie, bo jest straszliwy ale robi co ma robić. Z braku wiedzy zastosowałem w nim coś tak programistycznie ohydnego, że aż mnie lekko mdli, ale i odczuwam niewielką, perwersyjną przyjemność, że TO tam wrzuciłem.
Otóż ze zdumieniem odkryłem, zdumieniem że dopiero teraz, pożyteczne pętle: oprócz difoltowych for, while jeszcze uless, until.
Użyłem zatem until w następującym barachle:
until ($return = do pobierz($nazwa_pliku)) {
$nazwa_pliku = nazwa_pliku(nowa_data($tmp_date), $LAST_NUM);
}
czyli dotąd wywołuj funkcję (subroutine) pobierz() aż jej kod zwrotu będzie prawdą, jednocześnie inkrementuj zmienną $nazwa_pliku.
Figo-fago, całość ładnie działa ale zaszło pytanie, a była to już pierwsza w nocy bez środków wspomagających (kofeina, tabaka, tussipect), co jeśli pobierz() nigdy prawdy nie zwróci?
Sytuacja raczej niemożliwa, bo chodzi o zasysanie tabel kursów walut z serwera NBP ale... kto to wie? Wystarczy zmiana ścieżki, zmiana formatu nazw plików XML-owych i mam ładniutką pętlę nieskończoną. Teoretycznie? W praktyce mogłoby się okazać, że mój skrypt wykonuje sie nawet kilka lat bez widocznych rezultatów i bez wpływu na obciążenie systemu bo przecież tylko inkrementuje datę wchodzącą w skład $nazwa_pliku, a inkrementować może dopóki jest prąd i istnieje czas. Potem próbuje zassać plik z serwera ale to żadne obciążenie. ;-)
Perl jest językiem-zmorą, ale tylko dla mnie bo go kompletnie nie znam, w czym utwierdza mnie fakt, że dwa IMHO najlepsze systemy webowe zostały napisane w Perlu właśnie: są to MovableType, system blogowy oraz OpenWebmail system poczty przez www.
Ze zmorą nie umiem walczyć rozsądnie, poznawać mi się jej nie chce, bo ma w sobie tak wiele udziwnień, że wiem że większość tego co zakuję, zaraz zapomnę. Ze zmorą walczę brudnymi hackami, po prostu świństwami.
Możnaby zapytać się mne po jaką cholerę piszę skrypt w Perlu skoro mam tyle obiekcji. Ha! Czysta perwersja! Nie wiem, jak Boga kocham, nie mam zielonego pojęcia. To chyba pozostałość z lat dawnych kiedy nie było jeszcze PHP, a CGI kodowało się właściwie tylko w Perlu. Miałem kilka zleceń na robótki, włącznie z minikslepikiem i... działa przyzwyczajenie. Podziwiam sam siebie, że nie umiejąc nic, coś jednak potrafię wyczesać. To była ironia bo powinno mi się łapska obciąć za zbrodnię, która nastąpi za chwilę.
Zatem, jak zabezpieczyć się przed wieczną pętlą until? A tak:
until ($return = do pobierz($nazwa_pliku)) {
$i++;
if ($i > 30) {
die "Za dużo iteracji";
}
$nazwa_pliku = nazwa_pliku(nowa_data($tmp_date), $LAST_NUM);
}
Dżizas, zupełnie jakby mamut zrobił śmierdzące kupsko na środku chodnika, a ja bym z niedowierzaniem i dziwnym zachwytem w oczach patrzył nań i podziwiał. Jakby było co...