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;
}