esempi

  1. I/O: <STDIN>, <STDOUT>, hex, die, incremento
  2. countdown: while, sleep, contatori
  3. parametri formali: foreach
  4. cat
  5. grep
  6. find
  7. dir
  8. count
  9. type
  10. formattazione di un testo
  11. operazioni sulle stringhe
  12. estrazione parametri
  13. 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