Listing 1 Przykładowy skrypt Perla
$flag=0; #nazwy zmiennych poprzedzamy znakiem $
while (<STDIN>) #czytamy ze standardowego wejścia
{
if ($flag==1)
{
chomp($_); #$_ to domyślny string - linia przeczytana ze standardowego wejścia
# funkcja chomp() odcina ostatni znak - w naszym przypadku znak nowej linii
push(@teksty,$_); #@teksty to tablica, push() dodaje element do tablicy
}
if ($_ eq "<<START>>\n") # eq to porównanie stringów
{
$flag=1;
}
if ($flag==0)
{
chomp($_);
push(@wyrazenia,$_);
}
}
print "Wyrazenia:\n";
foreach $line (@wyrazenia) #pętla foreach pozwala iterować po zawartości tablicy
#długość tablicy sprawdzimy wywołując instrukcję @wyrazenia.length()
{
print "$line\n"; #print wypisuje na standardowe wyjście
}
print "Teksty\n";
foreach $line (@teksty)
{
print "$line\n";
}
print "\nWyniki:\n";
foreach $line (@teksty)
{
$flag=1;
foreach $wyrazenie (@wyrazenia)
{
if ($line !~ m/($wyrazenie)/) #porównuję string z wyrażeniem regularnym
{
$flag=0;
}
}
if ($flag==1)
{
print $line."\n";
}
}
Listing 2 Zawartość pliku in.txt - pierwsze dwie linie to wyrażenia regularne, po linii <<START>> zaczynają się testowane napisy
ko.
al.
<<START>>
ala ma kota
alabasterkot kot
alek ma kola
aba ma kot
Wykonanie skryptu (Linux):
perl skrypt < in.txt
Proszę napisać skrypt Perla znajdujący i wypisujący z pliku wejściowego (przekierowanie j.w. standarddowego wejścia) poprawne adresy e-mail. W zadaniu należy wykorzystać wyrażenia regularne Perla (np. http://www.cs.tut.fi/~jkorpela/perl/regexp.html, http://www.troubleshooters.com/codecorn/littperl/perlreg.htm) oraz funkcje Perla operujące na stringach (np. http://www.cs.cf.ac.uk/Dave/PERL/node56.html).