POD2-IT
view release on metacpan or search on metacpan
IT/perlfaq6.pod view on Meta::CPAN
sono ripartite tra le interruzioni di linea (ma non se lo sono tra le
interruzioni dei paragrafi). Per questo esempio non ci serve C</s>,
perchE<eacute> non stiamo usando il punto in un'espressione regolare
che vogliamo attraversi i confini di linea. Non ci serve neppure C</m>
perchE<eacute> non vogliamo che il segno d'omissione o il simbolo del
dollaro effettuino il match in un qualsiasi punto all'interno del
record vicino ai ritorni a capo. Ma E<egrave> imperativo che $/ sia
impostato a qualcosa di diverso rispetto al valore predefinito, altrimenti
non riusciremo mai a leggere un record composto da piE<ugrave> linee.
$/ = ''; # memorizza piu` dell'intero paragrafo, non solo una linea
while ( <> ) {
while ( /\b([\w'-]+)(\s+\1)+\b/gi ) { # la parola inizia con un carattere alfanumerico
print "$1 e` un duplicato, al paragrafo $.\n";
}
}
Qui c'E<egrave> il codice che trova le frasi che iniziano con "From " ["da", NdT]
(che dovrebbe essere storpiato da molti programmi di posta):
$/ = ''; # memorizza piu` dell'intero paragrafo, non solo una linea
while ( <> ) {
while ( /^From /gm ) { # /m fa si` che ^ effettui un match vicino a \n
print "primo from nel paragrafo $.\n";
}
}
Qui c'E<egrave> il codice che trova ogni cosa tra START [inizio, NdT] ed
END [fine, NdT] nel paragrafo:
undef $/; # memorizza l'intero file, non solo una linea od un paragrafo
IT/perlfaq6.pod view on Meta::CPAN
variazione delle variabili dopo la I<primissima> valutazione del pattern.
C</o> viene usato spesso per ottenere un ulteriore grado di efficienza,
non eseguendo le valutazioni successive quando sapete che la cosa non
avrE<agrave> importanza (perchE<eacute> sapete che le variabili
non cambieranno), oppure, piE<ugrave> di rado, quando non volete che
la regex si accorga se le variabili cambiano.
Per esempio, ecco un programma "paragrep":
$/ = ''; # modalita` paragrafo
$pat = shift;
while (<>) {
print if /$pat/o;
}
=head2 Come faccio ad usare un'espressione regolare per togliere da un file i commenti in stile C?
BenchE<eacute> ciE<ograve> possa effettivamente essere realizzato, E<egrave>
molto piE<ugrave> difficile di quanto potreste pensare. Per esempio, questo
programma di una sola riga
IT/perlfaq9.pod view on Meta::CPAN
Consultate i riferimenti elencati nella nella sezione Security della CGI
Meta FAQ [in inglese, NdT]:
http://www.perl.org/CGI_MetaFAQ.html
=head2 Come effettuo il parsing dell'header di una mail?
Per una soluzione veloce-e-sporca, provate questa soluzione derivata da
L<perlfunc/split>:
$/ = '';
$header = <MSG>;
$header =~ s/\n\s+/ /g; # unisce le linee successive
%head = ( UNIX_FROM_LINE, split /^([-\w]+):\s*/m, $header );
Questa soluzione non funziona bene se, ad esempio, state cercando di
gestire tutte le linee Received. Un approccio piE<ugrave> completo
consiste nell'usare il modulo Mail::Header da CPAN (parte del pacchetto
MailTools).
=head2 Come faccio a decodificare una form CGI?
IT/perlfaq9.pod view on Meta::CPAN
BenchE<eacute> sia possibile usare il modulo Mail::Folder (che E<egrave>
disponibile su CPAN come parte del pacchetto MailFolder) oppure il modulo
Mail::Internet (contenuto nel pacchetto MailTools), spesso un modulo
E<egrave> eccessivo. Ecco un programma che ordina i messaggi.
#!/usr/bin/perl
my(@msgs, @sub);
my $msgno = -1;
$/ = ''; # legge paragrafo per paragrafo
while (<>) {
if (/^From/m) {
/^Subject:\s*(?:Re:\s*)*(.*)/mi;
$sub[++$msgno] = lc($1) || '';
}
$msgs[$msgno] .= $_;
}
for my $i (sort { $sub[$a] cmp $sub[$b] || $a <=> $b } (0 .. $#msgs)) {
print $msgs[$i];
}
IT/perlfunc.pod view on Meta::CPAN
=item chomp( LISTA )
=item chomp
Questa versione piE<ugrave> intelligente di L</chop> rimuove dalla coda della
stringa passata come parametro qualsiasi stringa che corrisponda al valore
corrente di C<$/> (conosciuta anche come $INPUT_RECORD_SEPARATOR [record separatore di input, NdT]
nel modulo C<English>). La funzione restituisce il numero totale di caratteri rimossi da
tutti i suoi argomenti. E<Egrave> spesso utilizzato per rimuovere il newline dalla fine di un
record in input, quando temete che il record possa essere sprovvisto del suo newline. Quando
E<egrave> utilizzata in paragraph mode [modalitE<agrave> paragrafo, NdT] (C<$/ = "">), rimuove
tutti i newline in coda ad una stringa. Quando E<egrave> utilizzata in slurp mode
[modalitE<agrave> slurp, NdT] (C<$/ = undef>) o con una lunghezza di record fissa (C<$/>
E<egrave> un riferimento ad un intero o a qualcosa di simile, consultate L<perlvar>), chomp()
non rimuoverE<agrave> nulla. Se VARIABILE viene omessa, chomp agisce su C<$_>. Ad esempio:
while (<>) {
chomp; # rimuove \n dall'ultimo campo
@array = split(/:/);
# ...
}
( run in 0.284 second using v1.01-cache-2.11-cpan-3b35f9de6a3 )