Comment obtenir le numéro de ligne en cours d'ouvrir un fichier à l'aide de Perl?
open my $fp, '<', $file or die $!;
while (<$fp>) {
my $line = $_;
if ($line =~ /$regex/) {
# How do I find out which line number this match happened at?
}
}
close $fp;
- Si vous voulez lire une ligne dans la ligne$, puis lire une ligne dans la ligne $plutôt que de lire une ligne dans une autre variable, puis de le copier à $line: while (my $ligne = <$fp>) {
- ou plutôt
while (defined( my $line = <$fp> )) { ... }
, depuis la dernière ligne pourrait être un zéro et ne pas finir dans un retour à la ligne.
Vous devez vous connecter pour publier un commentaire.
Utilisation
$.
(voirperldoc perlvar
).$.
n'est pas nécessairement le numéro de la ligne; c'est le nombre de fois que lereadline
opérateur a été appelée sur la dernière poignée, il a été appelé depuis cette poignée dernierclose
(pasopen
). Il ne serait pas refléter les lignes si$/
n'est pas définie à"\n"
(comme""
ou"\n%%\n"
, ou si la poignée a euopen
appelé sur elle sans un appel àclose
(comme c'est le cas avecARGV
, et donc avec<>
). Et si elle est pertinente pour les fichiers texte avec mutilé dernières lignes qui n'ont pas une bonne ligne de séquence de fin sur eux, j'ai quitter pour votre propre contemplation.continue
partie dewhile(<>) { ... } continue { close ARGV if eof }
si à l'aide de <>, s'adressant à l'un de @tchrist de bonnes mises en garde.Vous pouvez également le faire via l'interface orientée objet:
C'est dans perldoc perlvar, trop.
$.
, bien sûr.Ne pas utiliser de
$.
, ni$_
ou toute variable globale. Utilisez ceci à la place:Pour éviter cela et beaucoup d'autres, Perl astuces que vous pouvez utiliser sur l'Atome ou VSCode paquets comme linter-perl. D'arrêter de faire du Perl une écriture seule langue!