Dans cet exemple, je voudrais modifier le fichier en place (sans tarte):remplacer une chaîne par une autre en place
# Initialise file
open my $fh, '>', 'test';
print $fh 'I love apples';
close $fh;
# Do the replacement
open $fh, '+<', 'test';
s/love/hate/ while(<$fh>);
close $fh;
# Test content (should be 'I hate apples')
open $fh, '<', 'test';
print while(<$fh>);
close $fh;
Malheureusement cet exemple ne fonctionne pas. Je trouve seulement cette solution laide:
# Do the replacement
open $fh, '<', 'test';
my $out;
my $changes;
while(<$fh>) {
$changes += $_ =~ s/love/hate/;
$out.=$_;
}
if($changes) {
open $fh, '>', 'test';
print $fh $out;
}
close $fh;
Une meilleure solution?
Condition: je veux seulement toucher mon fichier s'il y a quelque chose à changer. Astuce: Je suis sur Windows/Cygwin :(
Vous semblez rechercher, lire, imprimer. Ce sera plus moche que de lire tout le fichier en mémoire et de l'imprimer. – ikegami
Est-ce encore le cas pour les gros fichiers? – nowox
hein? Les aspects du code ne sont pas affectés par la taille du fichier de données. – ikegami