POD2-FR
view release on metacpan or search on metacpan
FR/perlfaq6.pod view on Meta::CPAN
Par exemple, ce programme détecte les mots répétés, même dans des
lignes différentes (mais pas dans plusieurs paragraphes). Pour cet
exemple, nous n'avons pas besoin de C</s> car nous n'utilisons pas le
point dans l'expression rationnelle qui doit enjamber les fins de
ligne. Nous n'avons pas besoin non plus de C</m> car nous ne voulons
pas que le circonflexe ou le dollar fasse une reconnaissance d'un
début ou d'une fin d'une nouvelle ligne. Mais il est impératif que $/
ait une autre valeur que la valeur par défaut, ou alors nous n'aurons
pas plusieurs lignes d'un coup à se mettre sous la dent.
$/ = ''; # lis au moins un paragraphe entier,
# pas qu'une seule ligne
while ( <> ) {
while ( /\b([\w'-]+)(\s+\1)+\b/gi ) { # les mots commencent par
# des caractères alphanumériques
print "$1 est répété dans le paragraphe $.\n";
}
}
Voilà le code qui trouve les phrases commençant avec "From " (qui
devrait être transformés par la plupart des logiciels de courrier
électronique)E<nbsp>:
$/ = ''; # lis au moins un paragraphe entier, pas qu'une seule ligne
while ( <> ) {
while ( /^From /gm ) { # /m fait que ^ reconnaisse
# tous les débuts de ligne
print "from de départ dans le paragraphe $.\n";
}
}
Voilà le code qui trouve tout ce qu'il y a entre START et END dans un
S<paragraphe :>
FR/perlfaq6.pod view on Meta::CPAN
la variable ultérieures à la I<toute première> évaluation.
C</o> est souvent utilisé pour gagner en efficacité en ne faisant pas
les évaluations nécessaires quand vous savez que cela ne pose pas de
problème (car vous savez que les variables ne changeront pas), ou plus
rarement, quand vous ne voulez pas que l'expression rationnelle
remarque qu'elles changent.
Par exemple, voici un programme S<"paragrep" :>
$/ = ''; # mode paragraphe
$pat = shift;
while (<>) {
print if /$pat/o;
}
=head2 Comment utiliser une expression rationnelle pour enlever les commentaires de type C d'un S<fichier ?>
Bien que cela puisse se faire, c'est plus compliqué que vous ne
pensez. Par exemple, cette simple ligne
FR/perlfaq9.pod view on Meta::CPAN
Voyez les références à la sécurité dans la Meta FAQ S<CGI :>
http://www.perl.org/CGI_MetaFAQ.html
=head2 Comment analyser un en-tête de mailE<nbsp>?
Pour une solution rapide et peu propre, essayez cette solution dérivée
de L<perlfunc/split>E<nbsp>:
$/ = '';
$header = <MSG>;
$header =~ s/\n\s+/ /g; # fusionne les lignes fractionnées
%head = ( UNIX_FROM_LINE, split /^([-\w]+):\s*/m, $header );
Cette solution ne fonctionne pas correctement si, par exemple, vous
essayez de mettre à jour toutes les lignes reçues. Une approche plus
complète consiste à utiliser le module Mail::Header du CPAN (faisant
parti du paquetage MailTools).
=head2 Comment décoder un formulaire CGIE<nbsp>?
FR/perlfaq9.pod view on Meta::CPAN
Vous pourriez utiliser le module Mail::Folder de CPAN (faisant partie
du paquetage MailFolder) ou le module Mail::Internet de CPAN (faisant
partie du paquetage MailTools), toutefois, un module est souvent un
marteau pour écraser une mouche. Voici un trieur de mail.
#!/usr/bin/perl
my(@msgs, @sub);
my $msgno = -1;
$/ = ''; # lit un paragraphe
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];
}
FR/perlform.pod view on Meta::CPAN
.
Voici un petit programme qui fait a peu près la même chose que S<fmt(1) :>
format =
^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ~~
$_
.
$/ = '';
while (<>) {
s/\s*\n\s*/ /g;
write;
}
=head2 Pied de page
Alors que $FORMAT_TOP_NAME contient le nom de l'en-tête du format en cours, il
n'y a pas de mécanisme de correspondance pour faire la même chose avec le pied
de page. L'une des causes est qu'on ne connaît pas la taille d'un format avant
FR/perlfunc.pod view on Meta::CPAN
=item chomp( LISTE )
=item chomp
Cette version sûre de L</chop> supprime toute fin de ligne
correspondant à la valeur courante de C<$/> (connue aussi sous le nom
de $INPUT_RECORD_SEPARATOR dans le module C<English>). Elle retourne
le nombre total de caractères effacés de tous ses arguments. Elle est
souvent utilisée pour effacer le saut de ligne de la fin d'une entrée
quand vous vous souciez que l'enregistrement final pourrait ne pas
avoir ce saut de ligne. En mode paragraphe (C<$/ = "">), elle efface
tous les sauts de ligne à la fin de la chaîne de caractères. En mode
«slurp» (C<$/ = undef>) ou en mode enregistrement de taille fixe
(C<$/> est une référence vers un entier ou similaire, voir L<perlvar>)
chomp() ne supprime rien du tout. Si VARIABLE est omis, elle tronque
C<$_>. S<Exemple :>
while (<>) {
chomp; # évite le \n du dernier champ
@array = split(/:/);
# ...
FR/perlop.pod view on Meta::CPAN
C</g> n'a encore été faite, revient à utiliser l'assertion C<\A> pour
reconnaître le début de la chaîne. Notez aussi que, actuellement,
C<\G> ne fonctionne bien que si il est utilisé au tout début du motif.
S<Exemples :>
# contexte de liste
($one,$five,$fifteen) = (`uptime` =~ /(\d+\.\d+)/g);
# contexte scalaire
$/ = "";
while (defined($paragraph = <>)) {
while ($paragraph =~ /[a-z]['")]*[.!?]+['")]*\s/g) {
$sentences++;
}
}
print "$sentences\n";
# utilisation de m//gc avec \G
$_ = "ppooqppqq";
while ($i++ < 2) {
( run in 0.355 second using v1.01-cache-2.11-cpan-49f99fa48dc )