POD2-FR

 view release on metacpan or  search on metacpan

FR/perlfaq5.pod  view on Meta::CPAN

positionnez les variables de pilotage.

  $old_fh = select(OUTPUT_HANDLE);
  $| = 1;
  select($old_fh);

Ou, de façon plus idiomatique, en une seule S<instruction :>

  select((select(OUTPUT_HANDLE), $| = 1)[0]);

  $| = 1, select $_ for select OUTPUT_HANDLE;

Certains modules proposent un accès orienté objet aux descripteurs de
fichiers et à leur paramètres (ils seront sans doute un peu lourd si
vous ne leur demandez que cela). Par exemple S<IO::Handle :>

  use IO::Handle;
  open(DEV, ">/dev/printer");   # à quoi ça sert ?
  DEV->autoflush(1);

Ou S<IO::Socket :>

  use IO::Socket;   # une sorte de tube ?
  my $sock = IO::Socket::INET->new( 'www.example.com:80' );

  $sock->autoflush();

=head2 Comment changer une ligne, effacer une ligne, insérer une ligne au milieu ou ajouter une ligne en tête d'un S<fichier ?> X<fichier, édition> X<fichier, modification>

Utiliser le module Tie::File qui fait partie de la distribution
standard depuis Perl 5.8.0.

=head2 Comment déterminer le nombre de lignes d'un S<fichier ?> X<fichier, compter les lignes> X<lignes> X<ligne>

Un moyen assez efficace est de compter les caractères de fin de ligne
dans le fichier. Le programme suivant utilise une propriété de tr///,
décrite dans L<perlop>. Si votre fichier de texte ne se termine pas
par un caractère de fin de ligne, alors ce n'est pas vraiment un
fichier de texte correct, et ce programme vous surprendra en indiquant
une ligne de moins.

    $lines = 0;
    open(FILE, $filename) or die "Can't open `$filename': $!";
    while (sysread FILE, $buffer, 4096) {
        $lines += ($buffer =~ tr/\n//);
    }
    close FILE;

On supposera qu'il n'y a aucune traduction parasite des caractères de
fin de ligne à déplorer.

=head2  Comment utiliser l'option C<-i> de Perl depuis l'intérieur d'un S<programme ?> X<-i> X<sur-place>

L'option C<-i> modifie la valeur de la variable Perl C<$^I> qui
modifie le comportement de S<C<< <> >> ;> voir L<perlrun> pour plus de
détails. En modifiant directement les bonnes variables, vous pouvez
obtenir le même comportement dans votre programme. Par S<exemple :>

   # ...
   {
     local($^I, @ARGV) = ('.orig', glob("*.c"));
     while (<>) {
       if ($. == 1) {
         print "Cette ligne sera en tete de chaque fichier\n";
       }
       s/\b(p)earl\b/${1}erl/i; # Correction en tenant
                                # compte de la casse
       print;
       close ARGV if eof;       # Réinitialise $.
     }
   }
   # $^I et @ARGV reprennent ici leur ancienne valeur

Ce bloc de code modifie tous les fichier C<.c> du répertoire courant
en créant une copie de sauvegarde de chaque fichier original dans un
fichier C<.c.orig>.

=head2 Comment puis-je copier un S<fichier ?> X<copie> X<fichier, copie>

(contribution de brian d foy)

Utilisez le module File::Copy. Il vient avec Perl et sait faire de
vraies copies entre différents systèmes de fichiers, tout cela de
manière portable.

        use File::Copy;

        copy( $original, $new_copy ) or die "Échec de la copie : $!";

Si vous ne pouvez pas utiliser File::Copy, vous devrez faire le
travail S<vous-même :> ouvrez le fichier original, ouvrez le fichier
de destination puis écrivez dans le fichier de destination au fur et à
mesure que vous lisez le fichier original.

=head2 Comment créer un fichier S<temporaire ?> X<fichier, temporaire>

Si vous n'avez pas besoin de connaître le nom du fichier temporaire,
vous pouvez utiliser C<open()> en passant C<undef> à la place d'un nom
de fichier. Le fonction C<open()> créera alors un fichier temporaire
anonyme.

  open my $tmp, '+>', undef or die $!;

Sinon vous pouvez utiliser le module File::Temp.

  use File::Temp qw/ tempfile tempdir /;

  $dir = tempdir( CLEANUP => 1 );
  ($fh, $filename) = tempfile( DIR => $dir );

  # ou si vous n'avez pas besoin du nom du fichier

  $fh = tempfile( DIR => $dir );

Le module File::Temp est un module standard depuis Perl 5.6.1. Si vous
ne disposez pas d'une version moderne de Perl, utilisez la méthode de
classe C<new_tmpfile> du module IO::File pour obtenir un descripteur
de fichier ouvert en lecture écriture. À utiliser si le nom dudit
fichier importe peu.

    use IO::File;



( run in 2.044 seconds using v1.01-cache-2.11-cpan-5e09290becf )