J'ai un simple script Perl pour lire un fichier ligne par ligne. Le code est ci-dessous. Je veux afficher deux lignes et casser la boucle. Mais ça ne marche pas. Où est le bug?
$file='SnPmaster.txt';
open(INFO, $file) or die("Could not open file.");
$count = 0;
foreach $line (<INFO>) {
print $line;
if ($++counter == 2){
last;
}
}
close(INFO);
Si tu avais use strict
allumé, vous auriez découvert que $++foo
n'a aucun sens.
Voici comment le faire:
use strict;
use warnings;
my $file = 'SnPmaster.txt';
open my $info, $file or die "Could not open $file: $!";
while( my $line = <$info>) {
print $line;
last if $. == 2;
}
close $info;
Ceci profite de la variable spéciale $.
qui garde la trace du numéro de ligne dans le fichier actuel. (Voir perlvar )
Si vous souhaitez utiliser un compteur à la place, utilisez
my $count = 0;
while( my $line = <$info>) {
print $line;
last if ++$count == 2;
}
Avec ces types de programmes complexes, il est préférable de laisser Perl générer le code Perl pour vous:
$ Perl -MO=Deparse -pe'exit if $.>2'
Ce qui se fera un plaisir de vous dire la réponse,
LINE: while (defined($_ = <ARGV>)) {
exit if $. > 2;
}
continue {
die "-p destination: $!\n" unless print $_;
}
Alternativement, vous pouvez simplement l'exécuter en tant que tel à partir de la ligne de commande,
$ Perl -pe'exit if$.>2' file.txt
vous devez utiliser ++$counter
, pas$++counter
, d’où la raison pour laquelle cela ne fonctionne pas ..
En bash foo
est le nom de la variable, et $
est un opérateur qui signifie 'obtenir la valeur de'.
En Perl $foo
est le nom de la variable.