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