Instrukcje wyrażenie1 if wyrażenie2 ; wyrażenie1 until wyrażenie2 ; wyrażenie1 wyrażenie2 ; wyrażenie1 wyrażenie2 ; wyrażenie1? wyrażenie2 : wyrażenie3 ; if (wyrażenie) blok [ [ elsif (wyrażenie) blok... ] else blok unless (wyrażenie) blok [ else blok ] [ etykieta: ] while ( wyrażenie) blok [ continue blok ] [ etykieta: ] until ( wyrażenie) blok [ continue blok ] [ etykieta: ] for ( wyrażenie;wyrażenie; wyrażenie) blok [ etykieta: ] foreach zmienna ( tablica) blok [ etykieta: ] blok [ continue blok ] do blok while wyrażenie; do blok unitl wyrażenie; Operatory ** potęgowanie + - * / % operatory arytmetyczne ^ operatory logiczne (bitowe) << >> operatory przesunięć bitowych operatory logiczne. konkatenacja łańcuchów xn n-krotne powtórzenie łańcucha lub tablicy -> wskazanie na pole obiektu \ wskazanie na obiekt! negacja ~ uzupełnienie do 2 (bitowe) 1% 3% Instrukcje sterujące Operatory do blok do funkcja( lista) do plik require plik goto etykieta last [ etykieta ] next [ etykieta ] redo [ etykieta ] return wyrażenie wykonanie bloku wykonanie procedury wykonanie skryptu dołączenie biblioteki z pliku skok do etykiety kończy pętlę pomijając blok continue rozpoczyna kolejną iterację pętli restartuje pętlę bez przeliczenia wyrażenia sterującego wyjście z funkcji ++ -- operatory inkrementacji (dekrementacji) ==!= < > <= >= porównania numeryczne eq ne lt gt le ge porównania tekstowe <=> porównanie numeryczne (zwraca -1, 0 lub 1) cmp porównanie tekstowe (zwraca -1, 0 lub 1) =~!~ dopasowanie wzorca.. wyliczenie?: operator warunkowy, przecinek not and or xor operatory logiczne o niskim priorytecie 2% 4%
Sprawdzenia plików Zmienne specjalne -r -w -x czy plik jest czytelny, zapisywalny, wykonywalny (przez efektywne UID) -R -W -X czy plik jest czytelny, zapisywalny, wykonywalny (przez rzeczywiste UID) -o -O czy plik jest własnością (efektywnego, rzeczywistego UID) -e -z czy plik isnieje, ma rozmiar zero -s czy plik isnieje i ma rozmiar niezerowy (zwraca rozmiar) -f -d -l -S -p czy plik jest zwykłym plikem, katalogiem, linkiem, socket em, pip em -b -c czy plik jest urządzeniem blokowym, znakowym -u -g -k czy plik ma ustawiony bit SUID, SGID, sticky -t czy plik jest terminalem -T -B czy plik jest tekstowy, binarny -M -A -C czasy modyfikacji, odczytu, zmiany inode a _ zmienna domyślna @_ tablica domyślna. numer wiersza w ostatnio odczytywanym pliku / separator wierszy domyślnie \n, separator pól dla operacji print " separator elementów tablicy przy konwersji na tekst? status ostatniej komendy wywołanej przez lub system ] numer wersji interpretera! numer lub tekst błędu (errno) 0 nazwa skryptu identyfikator procesu < rzeczywisty UID tego procesu > efektywny UID tego procesu ( rzeczywisty GID tego procesu ) efektywny GID tego procesu ARGV nazwa aktualnie czytanego pliku (przy odczcie z <>) 5% 7% ABC ABC ABC[...] @ABC #ABC %ABC ABC... ABC \ABC \%ABC *ABC Zmienne uchwyt do pliku lub katalogu zmienna skalarna element tablicy tablica indeksowana liczbą największy indeks tablicy tablica asocjacyjna (indeksowana tekstem) element tablicy asocjacyjnej procedura wskazanie na zmienną ABC wskazanie na tablicę %ABC obiekt wskazywany przez ABC Zmienne specjalne ostatnio dopasowany tekst tekst poprzedzający wystąpienie wzorca tekst następujący po wystąpieniu wzorca 1..910.. teksty pasujące do podwyrażeń @ARGV argumenty z linii komendy (bez nazwy programu) @INC lista katalogów przeszukiwanych przy require i do %ENV aktualne środowisko %SIG obsługa sygnałów 6% 8%
@A przed Operacje macierzowe @r=shift(@a) unshift(@a) @r=pop(@a) f push(@a) c @r d Z @r=splice(@a,2,3,@z) @A po a b c d e Z a b Z e f -d Debugger h help objaśnienia poleceń p print wyświetlenie wartości wyrażenia V variables wyświetlenie informacji o zmiennych T trace wyświetlenie zawartości stosu s step wykonanie polecenia (wchodzi do procedur) n next wykonanie polecenia (nie wchodzi do procedur) <CR> powtórzenie ostatnio wydanego poleceania s lub n c continue kontynuacja programu l list listowanie programu b breakpoint ustawienie pułapki 9% 11% obiekt klasa metoda Programowanie Obiektowe Obiekt to struktura znająca nazwę klasy do której należy. Klasa to pakiet, który zawiera metody do operowania na obiektach. Metoda to procedura, której pierwszym parametrem jest wskazanie na obiekt (lub nazwa klasy). Przykład 1 local %words; while (<>) # liczenie słów chomp; split; foreach w (@_) wordsw++; foreach w (sort(keys %words)) printf( "słowo %s wystąpiło %d raz%s\n", w, wordsw, (wordsw>1)?"y":"" ); 10% 12%
Przykład 2 local %months = ( "Jan" => "Sty", "Feb" => "Lut", "Mar" => "Mar", "Apr" => "Kwi", "May" => "Maj", "Jun" => "Cze", "Jul" => "Lip", "Aug" => "Sie", "Sep" => "Wrz", "Oct" => "Paź", "Nov" => "Lis", "Dec" => "Gru" ); local patt = join(" ", keys %months); open( INP, "ls -l " ); while (<INP>) chomp; s/(patt)/months1/; print _. "\n"; close( INP ); Przykład 3 - rezultat A1(,1,2,3,) A2(,10,20,30,) A3(,100,) a1(,1,2,3,) a2(,10,20,30,) a1(,2,4,7,) a2(,20,40,17,) A1(,2,4,7,) A2(,10,20,30,) A3(,2,4,7,20,40,17,) 13% 15% Przykład 3 sub proc my(a1,@a2)=@_; print "a1(", @a1, ") a2(", @a2, ")\n"; foreach p (@a1) p *= 2; foreach p (@a2) p *= 2; a1->[2] = 7; a2[2] = 17; print "a1(", @a1, ") a2(", @a2, ")\n"; return (@a1,@a2);, = ","; @A1 = ( 1, 2, 3 ); @A2 = ( 10, 20, 30 ); @A3 = ( 100 ); print "A1(", @A1, ") A2(", @A2, ") A3(", @A3, ")\n"; (@A3)=proc(\@A1,@A2); print "A1(", @A1, ") A2(", @A2, ") A3(", @A3, ")\n"; package Aqq; sub new my (type,p1,p2)=@_; my self=; self->alfa = p1; self->beta = p2; return bless(self, type); Przykład 4 sub display my (self,p1,p2)=@_; printf( "p1 " ); foreach i (keys %self) printf( " p2->i=" ); printf( " self->i," ); printf( "\n" ); 14% 16%
package Bzz; @ISA=("Aqq"); sub new my (type,p1,p2)=@_; Przykład 4 cd. my self=type->super::new(p1+7,p2+7); return bless(self, type); sub display my (self,p1,p2)=@_; printf( "Bzz " ); self->super::display(p1,p2); 17% Przykład 4 cd. package main; my a1 = Aqq->new(5,80); a1->display(s1,a1); my a2 = Bzz->new(5,80); a2->display(s2,a2); Rezultat: s1 a1->beta=80, a1->alfa=5, Bzz s2 a2->beta=87, a2->alfa=12, 18%