$^I ne fonctionne qu'avec ?

Le
ctobini
Bonjour,

J'aurais un petite question concernant $^I :

J'ai ouvert un filehandle comme ceci :

#/bin/env perl

use strict;

$^I = '.bak';

open A, shift;
while(<A>) {
s/ligne/LIGNE/;
print
}
close A;

Ca ne fonctionne pas, de cette manière il n'y a que while(<>) {}
qui effectue un changement.

Sauriez-vous comment faire (en particulier s'il y a plusieurs handle
dans un script et qu'on veut appliquer tel changement à tel handle) ?

En vous remerciant,

C. Tobini
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Klaus
Le #141964
On Mar 24, 1:08 pm, "ctobini"
Bonjour,

J'aurais un petite question concernant $^I :

J'ai ouvert un filehandle comme ceci :

#/bin/env perl

use strict;

$^I = '.bak';

open A, shift;
while(<A>) {
s/ligne/LIGNE/;
print}

close A;

Ca ne fonctionne pas, de cette manière il n'y a que while(<>) {...}
qui effectue un changement.

Sauriez-vous comment faire (en particulier s'il y a plusieurs handle
dans un script et qu'on veut appliquer tel changement à tel handle) ?


Voici un scénario:

On a 4 fichiers à traiter ('a.txt', 'b.txt', 'c.txt', 'd.txt'), mais
on veut appliquer le traitement spécifique (s/ligne/LIGNE/g)
uniquement pour le fichier 'b.txt'.

Voici le programme:
========================= ==========
use strict;
use warnings;

$^I = '.bak';
push @ARGV, 'a.txt', 'b.txt', 'c.txt', 'd.txt';

my @file = @ARGV;
my $lgn = 0;
while (<>) {
$lgn++;
my $fic = $file[-$#ARGV - 2];

my $nbr_rempl = '';
$nbr_rempl = s/ligne/LIGNE/g + 0
if $fic eq 'b.txt'; # <<<<=== voici le if
print '> ', $_;

warn "Fic '$fic', ligne $lgn, nbr rempl = $nbr_rempln";

if (eof) { $lgn = 0; warn "---changement fichiern" }
}
========================= ==========

ctobini
Le #141723
Bonjour et merci beaucoup pour la réponse,

Non seulement elle me satisfait mais je vois aussi de la même
manière :

comment visualiser le fichier courant dans une boucle <>
my $fic = $file[-$#ARGV - 2];

comment comptabiliser le nombre de remplacements directement dans un
scalaire :
$nbr_rempl = s/ligne/LIGNE/g + 0

Merci triplement donc :-) et bonne soirée,

C. Tobini
Publicité
Poster une réponse
Anonyme