Lo studio del Perl puo` anche essere intressante e divertente ...
Le variabili sono di tre tipi:
scalari (con prefisso $)
vettori (prefisso @)
hash (prefisso %) - array associative
Per una trattazione migliore delle variabili, vedi il manuale perldata
Comunque provo a mettere dei commenti al codice, in modo che sia piu` facile interpretarlo.
codice:my $page_number = 1; # definizione e inizializz. di una variabile scalare my %idx; # definizione di una hash while(<> ) { # loop su tutte le righe di input (legge una riga e la mette in $_) for my $word ( split(/\s+/) ) { # spezza la $_ secondo i caratteri blank # salva il primo in $word - dentro la parentesi dello split e` una RE $idx{$word}{$page_number} = 1; # scrive 1 nella posiz della hash la cui chiave e` $word che diventa a sua volta hash con chiave $page_number (su questo ho qualche dubbio) } $page_number++ if ( /\014/ ); # incremente $page_number se $_ e` <FF> # \014 denota numero ottale } foreach my $word (sort keys %idx) { # ordina la hash secondo le chiavi ed estrae le chiavi una alla volta printf "%-20s ", $word; # stampa la chiave (in maniera formattata) print comma_sep(sort {$a <=> $b} keys %{$idx{$word}}); # ordina e stampa in modo CSV print "\n"; # stampa la fine riga } sub comma_sep { # serve per dire alla routine precedente cosa significa CSV my $ret = ""; foreach (@_) { $ret .= $_ . ", "; } chop $ret; chop $ret; return $ret; }

Rispondi quotando