PERL(1)

NAZWA
perl - Praktyczny język ekstrakcji i raportowania

SKŁADNIA
perl    [ -sTuU ] [ -hv ] [ -V[:configvar] ]
    [ -cw ] [ -d[:debugger] ] [ -D[number/list] ]
    [ -pna ] [ -Fpattern ] [ -l[octal] ] [ -0[octal] ]
    [ -Idir ] [ -m[-]module ] [ -M[-]'module...' ]
    [ -P ] [ -S ] [ -x[dir] ] [ -i[extension] ]
    [ -e 'command' ] [ -- ] [ programfile ] [ argument ]...

Dla ułatwienia dostępu, podręcznik perla został podzielony na kilka sekcji:

    perl(1)        Przegląd możliwości Perla  (ta sekcja)
    perltoc(1)     Spis treści dokumentacji
    perldata(1)    Struktury danych
    perlsyn(1)     Składnia
    perlop(1)      Operatory Perla i priorytety
    perlre(1)      Wyrażenia regularne
    perlrun(1)     Wywoływanie Perla i opcje
    perlfunc(1)    Wbudowane funkcje
    perlvar(1)     Predefiniowane zmienne
    perlsub(1)     Podprocedury
    perlmod(1)     Moduły
    perlref(1)     Referencje
    perldsc(1)     Wstęp do struktur danych
    perllol(1)     Struktury danych Perla: listy list
    perlobj(1)     Obiekty Perla
    perltie(1)     Obiekty ukryte za prostymi zmiennymi
    perlbot(1)     Sztuczki OO wraz z przykładami
    perldebug(1)   Debuggowanie
    perldiag(1)    Komunikaty diagnostyczne
    perlform(1)    Formaty
    perlipc(1)     Komunikacja międzyprocesowa
    perlsec(1)     Bezpieczeństwo
    perltrap(1)    Pułapki dla nieuważnych
    perlstyle(1)   Przewodnik po stylu Perla
    perlxs(1)      API interfejsu XS
    perlxstut(1)   Podręcznik XS
    perlguts(1)    Wewnętrzne funkcje dla tych, którzy robią rozszerzenia
    perlcall(1)    Konwencje wołania z C
    perlembed(1)   Jak załączyć Perl do aplikacji C lub C++
    perlpod(1)     Czysta stara dokumentacja
    perlbook(1)    Informacje o książkach
(Jeśli masz zamiar przeczytać wszystko za jednym zamachem, to sugerowana kolejność zredukuje ilość odnośników.)

Dodatkową dokumentację dla modułów perla można znaleźć w katalogu /usr/local/man/. Część z tego jest udostępniana standardowo z perlem, lecz znajdziesz tam również moduły dostawców zewnętrznych. Powinieneś być w stanie je oglądać swoim programem man(1) po włączeniu odpowiednich katalogów do plików startowych. Aby dowiedzieć się, gdzie się one znajdują, napisz:

    perl -le 'use Config; print "@Config{man1dir,man3dir}"'
Jeśli katalogami były /usr/local/man/man1 i /usr/local/man/man3, to będziesz musiał dodać tylko ścieżkę /usr/local/man do zmiennej środowiskowej MANPATH. Jeśli były inne, musisz dodać obydwa źródła.

Jeśli z jakiegoś powodu to nie zadziała, możesz użyć dostarczonego skryptu perldoc(1), który służy do przeglądania informacji modułowych. Możesz także zmienić sobie program man.

Jeśli stało się coś dziwnego z twoim programem i nie jesteś pewien, gdzie szukać pomocy; wypróbuj najpierw przełącznik -w. Wskaże on gdzie pojawił się problem.

OPIS
Perl jest językiem interpretowanym, optymalizowanym do skanowania dowolnych plików tekstowych, wyciągania z nich informacji i drukowania raportów w oparciu o te dane. Jest też dobrym językiem dla wielu zadań zarządzania systemem. Język miał w założeniach być raczej praktyczny (łatwy, efektywny, kompletny) niż piękny (mały, elegancki, minimalny).

Perl (wg autora) łączy najlepsze właściwości języków C, sed, awk i sh, więc osoby zaznajomione z tymi językami nie powinny mieć z nim problemów. Składnia wyrażeń odpowiada dość blisko składni C. W przeciwieństwie do większości narzędzi unixowych, perl nie ogranicza arbitralnie rozmiaru twoich danych--jeśli masz wolną pamięć, perl może wessać cały plik jako pojedynczy pojedynczy łańcuch znakowy. Rekurencja jest nieograniczonej głębokości. Tabele używane przez tablice asocjacyjne (hasze) rosną tak, by zachować maksymalną wydajność. Perl używa wyrafinowanych metod porównywania wzorców do bardzo szybkiego przeszukania dużej ilości danych. Mimo że jest optymalizowany do zadań tekstowych, może także zajmować się danymi binarnymi i tworzyć pliki dbm wyglądające jak tablice asocjacyjne. Suidowane skrypty perla są bezpieczniejsze niż programy w C, dzięki mechanizmowi śledzenia przepływających danych, który eliminuje wiele głupich dziur w bezpieczeństwie. Jeśli masz problem, który normalnie wymagałby użycia seda lub awk lub sh, lecz przewyższa ich właściwości lub musi działać szybciej i nie chcesz pisać takiej błahostki w C, to perl jest przypuszczalnie tym, czego szukasz. Jest też wiele translatorów, umożliwiających konwertowanie skryptów seda i awk na skrypty Perla.

Ale czekaj, jest więcej...

Wersja 5 perla jest właściwie napisana od nowa i daje następujące rzeczy: Możliwe jest obecnie pisanie dużo czytelniejszego kodu perla (nawet w wyrażeniach regularnych). Stare, tajemnicze nazwy zmiennych mogą być zastąpione identyfikatorami mnemonicznymi. Komunikaty błędów dają więcej informacji, a opcjonalne ostrzeżenia wychwytują wiele pomyłek, które mogą przytrafić się nowicjuszowi. Kiedy tylko zauważysz jakieś dziwne zachowanie, spróbuj użyć przełącznika -w!!! Kiedy nie zauważysz dziwnych zachowań, także lepiej spróbuj użyć -w. W nowym yacc-u, gramatyka jest połową starej. Uporządkowano wiele reguł gramatyki. Ilość zastrzeżonych słów spadła o 2/3. Mimo tego, prawie wszystkie stare skrypty perla będą działać bez zmian. Zmienne perla mogą być obecnie deklarowane w obrębie zasięgu leksykalnego, podobnie jak zmienne "auto" w C. Dowolna wielkość skalarna, włączając w to dowolny element tablicy, może obecnie zawierać odwołanie do dowolnej innej zmiennej lub podprocedury. Można łatwo tworzyć anonimowe zmienne i podprocedury. Perl obsługuje liczniki odwołań za ciebie. Biblioteka perla jest obecnie zdefiniowana kategoriami modułów, które mogą być łatwo dzielone między wieloma pakietami. Pakiet może wybierać czy chce importować całość, czy tylko część interfejsu modułu. Przez ten sam mechanizm definiowane i używane są pragmy (tj.dyrektywy kompilatora). Pakiet może funkcjonować jako klasa. W prosty sposób i z niewielką ilością nowej składni, wspierane jest dynamiczne i wielokrotne dziedziczenie oraz metody wirtualne. Deskryptory plików mogą być teraz traktowane jako obiekty. Perl może być teraz łatwo osadzany w twoich aplikacjach C lub + i może wołać lub być wywoływanym przez twoje procedury poprzez udokumentowany interfejs. Preprocesor Xs powinien umożliwić łatwe doklejanie procedur C lub + do Perla. Wpierane jest dynamiczne ładowanie modułów. Ważnym nowym modułem jest moduł POSIX, który daje dostęp do wszystkich zdefiniowanych w POSIX procedur i definicji poprzez klasy obiektów. Nowe bloki BEGIN i END dają narzędzia do przechwytywania kontroli podczas kompilacji pakietu i po zakończeniu programu. Jako zdegenerowany przypadek, pracują jak ich odpowiedniki w awk, jeśli użyjesz przełączników -p lub -n. Program w perlu może teraz mieć jednoczesny dostęp do plików DBM, NDBM, SDBM, GDBM i Berkeley DB równocześnie z tego samego skryptu. W rzeczywistości, uogólniono stary interfejs dbmopen, umożliwiając dowiązywanie zmiennych do klas obiektów definiujących ich metody dostępu. W rzeczywistości, mechanizm AUTOLOAD umożliwia również definiowanie dowolnej arbitralnej semantyki dla niezdefiniowanych wywołań podprocedur. Nie odnosi się to wyłącznie do automatycznego ładowania. Możesz przekazywać obecnie niezachłanne kwantyfikatory. Możesz grupować bez tworzenia odwołań wstecznych. Możesz pisać wyrażenia regularne z osadzonymi dla czytelności białymi znakami i komentarzami. Dodano spójny mechanizm rozszerzalności, który jest wstecznie zgodny ze starymi wyrażeniami regularnymi.

ŚRODOWISKO
Używane jeśli nie podano argumentu chdir. Używane jeśli nie podano argumentu chdir i nie ustawiono HOME. Używane w wywoływaniu podprocesów i w znajdywaniu skryptu, jeśli użyto -S. Oddzielona dwukropkami lista katalogów, w których należy szukać plików bibliotecznych perla przed przejrzeniem standardowej biblioteki i bieżącego katalogu. Jeśli nie zdefiniowano PERL5LIB, używane jest PERLLIB Podczas pracy ze sprawdzeniami skaz (taint checks) (gdy skrypt działa jako setuid, setgid lub gdy użyto przełącznika -T), nie jest używana żadna zmienna. Zamiast tego skrypt powinien zawierać

    use lib "/my/directory";
Komenda używana do dostania się do kodu debuggera. Jeśli nie jest ustawione, używa

        BEGIN { require 'perl5db.pl' }
Oddzielona dwukropkami lista katalogów, w których perl szuka plików bibliotecznych, zanim podejrzy bibliotekę standardową i bieżący katalog. Jeśli zdefiniowano PERL5LIB, PERLLIB nie jest używane.

Poza tym, perl nie używa innych zmiennych środowiskowych, nie licząc tego, że udostępnia je uruchamianemu skryptowi i procesom potomnym. Jednak skrypty pracujące pod suid dobrze by czyniły, uruchamiając następujące linie przed dokonaniem czegokolwiek innego, po prostu by być uczciwym:

    $ENV{'PATH'} = '/bin:/usr/bin';    # czy co tam potrzebujesz
    $ENV{'SHELL'} = '/bin/sh' if defined $ENV{'SHELL'};
    $ENV{'IFS'} = ''          if defined $ENV{'IFS'};

AUTOR
Larry Wall <lwall@sems.com>, z pomocą multum innych osób.

PLIKI

 "/tmp/perl-e$$"        plik tymczasowy dla komend -e
 "@INC"                 lokacje bibliotek perla 5

ZOBACZ TAKŻE

 a2p    translator awk na perl
 s2p    translator seda na perl

DIAGNOSTYKA
Przełącznik -w daje uroczą diagnostykę.

Zobacz stronę perldiag(1) dla szczegółów o diagnostyce perla.

Błędy kompilacji dają numer linii z błędem oraz wskazanie kolejnego tokenu lub typu tokenu, który miał być badany. (W wypadku skryptu przekazanego perlowi przez przełącznik -e, każde -e jest traktowane jako pojedyncza linia.)

Skrypty setuidowane mają dodatkowe warunki, mogące dawać błędy w rodzaju "Insecure dependency". Zobacz stronę perlsec(1).

Wspomnieliśmy już, że powinieneś koniecznie rozważyć użycie przełącznika -w?

BŁĘDY
Przełącznik -w nie jest obowiązujący.

Perl polega na tym, jak twoja maszyna definiuje różne operacje, takie jak rzutowanie typów, atof()(3) i sprintf(3). To ostatnie może nawet spowodować coredump kiedy otrzyma nonsensowne wartości wejściowe.

Jeśli twoje stdio wymaga seeka lub eof między odczytami i zapisami w danym strumieniu, to tak też jest w perlu. (Nie tyczy się to sysread() i syswrite().)

Podczas gdy żaden z wbudowanych typów danych nie ma ostatecznego limitu rozmiaru (poza rozmiarem pamięci), istnieje wciąż kilka innych ograniczeń: dany identyfikator nie może być dłuższy niż 255 znaków i żadna ze składowych ścieżki nie może być dłuższa niż 255 w wypadku gdy używasz -S. Wyrażenie regularne nie może się kompilować wewnętrznie do więcej niż 32767 bajtów.

Zobacz bazę danych błędów perla na http://perl.com/perl/bugs/.

Raporty o błędach możesz przesyłać pocztą do perlbug@perl.com (upewnij się, że załączyłeś pełne dane o konfiguracji jako wyjście programu myconfig, załączanego w drzewie źródłowym perla). Jeśli udało ci się skompilować perla, skrypt perlbug(1) z katalogu utils/ może zostać wykorzystany do pomocy w wysłaniu raportu błędu.

Perl właściwie jest skrótem od Pathologically Eclectic Rubbish Lister (Patologicznie Eklektyczny Roztrząsacz Śmieci), ale nie mów nikomu, że tak powiedziałem.

UWAGI
Mottem Perla jest "Istnieje więcej niż jeden sposób by to zrobić.". Odgadnięcie ile pozostało jest ćwiczeniem dla czytelnika.

Trzy główne cnoty programisty to Lenistwo, Niecierpliwość i Pycha. Sprawdź w "książce z wielbłądem" dlaczego (L.Wall, T.Christiansen, R.L.Schwartz - Programmming Perl, O'Reilly & Associates, 1996; wyd.polskie 1999).