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.454 second using v1.01-cache-2.11-cpan-49f99fa48dc )