Servizio NETTuno - PoP di MODENA - perl primer
 |
esempi
|
- I/O: <STDIN>, <STDOUT>, hex, die, incremento
- countdown: while, sleep, contatori
- parametri formali: foreach
- cat
- grep
- find
- dir
- count
- type
- formattazione di un testo
- operazioni sulle stringhe
- estrazione parametri
- scrittura di un file
CICAIA
dell'Università di Modena
*
PoP di Modena del servizio
print "programma p01: ";
print "I/O, conversione da esadecimale, incremento\n\n";
#
print "Introduci un numero esadecimale: ";
$esadec=<STDIN>
print "valore decimale: ",hex($esadec),"\n";
$dec=hex($esadec);
print "incremento di 1: ",$dec + 1,"\n";
die "fine";
print "programma p02:\ncoutdown: esempio di while\n";
#
$countdown=10;
while ($countdown !=0) {
print "$countdown...";
sleep 1;
--$countdown;
}
print "BOOM!\n";
die;
print "programma p03:\nparametri formali <ARGV>\n\n";
#
print '@ARGV: ',"@ARGV\n";
print '$#ARGV: ',$#ARGV,"\n";
$npar=$#ARGV+1;
print "n. parametri: $npar\n\n";
#
if ($#ARGV < 0) {
die "fine per mancanza di parametri";
}
foreach $i (0 .. $#ARGV) {
print '$ARGV[',"$i]: $ARGV[$i]\n";
}
print "programma p04cat:\nun esempio di cat utilizzando <ARGV>\n\n";
# controllo parametri
if ($#ARGV < 0) {
print "Uso: perl p04cat nomefile\n";
die "fine per mancanza di parametri";
}
#
while ($_ = <ARGV>) {
print $_;
}
#
# si puo' abbreviare in:
#
# while (<>) {
# print;
# }
print "programma p05grep:\nun esempio di grep utilizzando <ARGV>\n\n";
# controllo parametri
if ($#ARGV < 0) {
print "Uso: perl p05grep pattern (tra doppi apici) nomefile\n";
die "fine per mancanza di parametri";
}
#
$pattern=shift(@ARGV);
while (<>) {
if (/$pattern/) {
print;
}
}
print "programma p06find:\nun esempio di find\n";
print "elenca i files presenti nella directory che contengono una parola\n\n";
# controllo parametri
if ($#ARGV < 0) {
print "Uso: perl p05find parola\n";
die "fine per mancanza di parametri";
}
#
print "files che contengono: @ARGV\n\n";
#
open(FIND,"dir /B |") || die "Non riesco a usare dir";
FILE:
while ($filename = <FIND>) {
# print "---$filename";
chop $filename;
next FILE unless -T $filename;
if (!open(TEXTFILE,$filename)) {
print STDERR "Non riesco ad aprire $filename --- continuo\n";
next FILE;
}
while (<TEXTFILE>) {
foreach $word (@ARGV) {
if (index($_,$word) >= 0) {
print $filename, "\n";
next FILE;
}
}
}
}
print "programma p07dir:\ndir su una riga con sort\nuso di liste\n\n";
#
if ($#ARGV < 0) {
print "Uso: perl p07dir *\n";
die "fine per mancanza di parametri";
}
#
while (@ARGV) {
$file = shift @ARGV;
push(@textfiles, $file) if -T $file;
}
@riga=join(' ',@textfiles);
print sort @riga;
print "programma p08count:\nconta le parole di un file\n\n";
#
if ($#ARGV < 0) {
print "Uso: perl p08count file\n";
die "fine per mancanza di parametri";
}
#
print "file: @ARGV\n";
#
# abilita il modo paragrafo e il pattern multiline.
$/ = "";
$* = 1;
#legge i paragrafi, li splitta in parole e le conta nella matrice associativa.
while (<>) {
s/-\n//g;
tr/A-Z/a-z/;
# splitta in parole cercando almeno uno spazio (\s+)
# circondato da zero o + caratteri NON-parola (\W*)
# per non spezzare Job's mentre elimina le virgolette
#
# spesso puo' bastare cercare uno o + spazi: split(/\s+/,$_)
#
@words = split(/\W*\s+\W*/, $_);
foreach $word (@words) {
$wordcount{$word}++;
}
}
#
# stampa tutta la matrice per prova.
# print "array: ",%wordcount,"\n";
# sort per chiave
print "sort per chiave:\n";
foreach $word (sort keys(%wordcount)) {
printf "%20s %d\n", $word, $wordcount{$word};
}
# preparazione file per sort per frequenza
# print "preparazione file per sort per frequenza:\n";
# foreach $word (sort keys(%wordcount)) {
# printf "%10d %s\n", $wordcount{$word}, $word;
# }
print "\nProva lettura random - \n";
print "dammi una parola e termina con e : ";
# $word = <STDIN>;
# $ww=substr($word,0,3);
chop($ww = <STDIN>);
print 'parola: ',$ww,"\n";
print '@wordcount: ',@wordcount{$ww},"\n";
print '$wordcount: ',$wordcount{$ww},"\n";
print "programma p09: type (lettura per riga)\n";
print "viene richiesto il file, se non indicato\n\n";
#
$file=$ARGV[0];
if ($#ARGV < 0) {
print "Nome del file: ";
$file=<STDIN>;
}
print "File: ",$file, "\n";
open (FILE,$file) || die "Non posso aprire $file $!";
while (<FILE>) {
print;
}
print "programma p10:\nformattazione di testo\n\n";
#
# configurazione.
$ANNUAL_PAY_RATE=52*5; # 5 per settimana.
#
# apertura db.
open(STUFF,"animals") || die "Non posso aprire il file: $!\n";
while (<STUFF>) {
($nome, $n, $colore, $premium, $resto) = split(/:/,$_);
$tot=$premium*$n;
$cost=$tot+$resto*$ANNUAL_PAY_RATE;
write;
}
exit;
format top =
----------------------------------------------------------------------
bestia capi colore tot costo
----------------------------------------------------------------------
.
format STDOUT =
@<@<@<@<@<@<@<@<@< @########
@>@>@>@>@>@>@>@>@> @####### @######
$nome, $n, $colore, $tot, $cost
.
sheep:14023:bianco:0.29:256
camels:5972:beige:3.79:1279
oxen:2016:verde:4.95:1008
print "programma p11string:\noperazioni sulle stringhe\n\n";
print "\nDammi la stringa $uno: ";
chop($uno=<STDIN>);
print "Dammi la stringa $due: ";
chop($due=<STDIN>);
print "Dammi un numero: ";
$n=;
print 'concatenazione: $uno . $due ==> ',$uno . $due,"\n";
print 'ripetizione: $uno x $n ==> ',$uno x $n,"\n";
print 'sottostringa: substr($uno,$n,1) ==> ',substr($uno,$n,1),"\n";
print 'ricerca: index($uno,$due) ==> ',index($uno,$due),"\n";
print "programma p12par:\nestrazione parametri formali\n\n";
print "\nDammi una stringa di parametri (es.:V1=1&V2=2b2&V4=ZZ): ";
chop($riga=<STDIN>);
#$riga='V1=a11......+++++.&V2=2b2&V4=ZZ&V3=33c';
print $riga,"\n";
# localizzo il nome della variabile 1
$off=index($riga,"V1=");
$V1='';
if ($off >= 0) { # se ho trovato la variabile, estraggo il resto
$V1=substr($riga,index($riga,"V1=")+3);
# localizzo & e tronco la stringa se lo trovo
$coda=index($V1,'&');
if ($coda >= 0) {
$V1=substr($V1,0,$coda);
}
}
print "V1 >$V1<\n";
# localizzo il nome della variabile 2
$off=index($riga,"V2=");
$V2='';
if ($off >= 0) { # se ho trovato la variabile, estraggo il resto
$V2=substr($riga,index($riga,"V2=")+3);
# localizzo & e tronco la stringa se lo trovo
$coda=index($V2,'&');
if ($coda >= 0) {
$V2=substr($V2,0,$coda);
}
}
print "V2 >$V2<\n";
# localizzo il nome della variabile
$off=index($riga,"V3=");
$V3='';
if ($off >= 0) { # se ho trovato la variabile, estraggo il resto
$V3=substr($riga,index($riga,"V3=")+3);
# localizzo & e tronco la stringa se lo trovo
$coda=index($V3,'&');
if ($coda >= 0) {
$V1=substr($V3,0,$coda);
}
}
print "V3 >$V3<\n";
print "------------\n";
print "$V1 $V2 $V3\n";
chdir("D:\\");
open(OUT,">> OUT");
printf OUT "%10s %10s %10s\n",$V1,$V2,$V3,"\n";
close(OUT);
print "programma p13write:\nscrive un file\n\n";
# versione per sort sulla frequenza.
#
if ($#ARGV < 0) {
print "Uso: perl write file\n";
die "fine per mancanza di parametri";
}
#
# abilita il modo paragrafo e il pattern multiline.
$/ = "";
$* = 1;
#legge i paragrafi, li splitta in parole e le conta nella matrice associativa.
while (<>) {
s/-\n//g;
tr/A-Z/a-z/;
# splitta in parole cercando almeno uno spazio (\s+)
# circondato da zero o + caratteri NON-parola (\W*)
# per non spezzare Job's mentre elimina le virgolette
#
# spesso puo' bastare cercare uno o + spazi: split(/\s+/,$_)
#
@words = split(/\W*\s+\W*/, $_);
foreach $word (@words) {
$wordcount{$word}++;
}
}
#
# preparazione file per sort per frequenza
#
open(OUT,"> out") || die "non riesco a scrivere su file.";
foreach $word (sort keys(%wordcount)) {
printf OUT "%10d %s\n", $wordcount{$word}, $word;
}
close(OUT);
open(OUT,">> out") || die "non riesco a scrivere su file.";
print OUT "uno\ndue\ntre\nciao!\n";
close(OUT);
print "\nHo scritto il file OUT\n";
CICAIA
dell'Università di Modena
*
PoP di Modena del servizio