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;
使用 $.
(见perldoc perlvar
)。
您也可以通过 OO 接口执行此操作:
use IO::Handle;
# later on ...
my $n = $fp->input_line_number();
这也在perldoc perlvar中。
避免使用 $.
、 $_
或任何全局变量。这是一个很好的答案来解释原因。相反,您可以使用:
while(my $line = <FILE>) {
print $line unless ${*FILE}->input_line_number == 1;
}
为了避免这种情况和许多其他Perl陷阱,您可以使用Atom或Visual Studio Code包,如linter-perl。由于这些问题,有些人认为Perl是一种只写语言。