我使用Perl的钻石 <>
接线员在命令行上指定的文件阅读。
我希望能够回报这类消息"Trouble on line $. of file $FILENAME"
,但我怎么能知道哪些文件是当前使用的钻石?
我使用Perl的钻石 <>
接线员在命令行上指定的文件阅读。
我希望能够回报这类消息"Trouble on line $. of file $FILENAME"
,但我怎么能知道哪些文件是当前使用的钻石?
参见perlvar :
$ARGV
Contains the name of the current file when reading from <> .
还要考虑$.
在perlvar。 如果你这样做与perl -n
它或许并不一定是你想要的方式, 因为计数器不复位 perl -n
使用情况。
$.
对于最近访问过的文件句柄当前行号。
在Perl文件句柄的每个计算已经从它读取的行数。 (根据不同的价值
$/
,什么构成线Perl的想法可能不符合你的。)当线从一个文件句柄读(通过readline()
或<>
或在tell()
或seek()
是调用它,$.
成为一个别名为文件句柄的行计数器。您可以通过分配来调整计数器
$.
,但事实上这并不会移动查找指针。 本地化$.
不会本地化文件句柄的行数。 相反,它将定位Perl的概念,它的文件句柄$.
目前别名。
$.
复位当文件句柄是封闭的,而不是在一个开放的文件句柄是中间没有重新打开close()
有关详细信息,请参阅perlop中的I / O操作员。 因为<>
从来不会显式关闭,整个ARGV文件行数增加(但看到EOF的例子)。你也可以用
HANDLE->input_line_number(EXPR)
来访问的文件句柄的行计数器,而不必担心其处理,这你上次访问。助记:许多程序使用“” 是指当前的行号。
下面是一个例子:
$ perl -nE 'say "$., $ARGV";' foo.pl bar.pl
1, foo.pl
2, foo.pl
3, foo.pl
4, foo.pl
5, foo.pl
6, foo.pl
7, foo.pl
8, foo.pl
9, foo.pl
10, foo.pl
11, foo.pl
12, foo.pl
13, bar.pl
14, bar.pl
15, bar.pl
如果你想让它重置,你需要检查eof
在你读循环( 感谢@Borodin)结束。 还看到了的perldoc eof
:
$ perl -nE 'say "$., $ARGV"; close ARGV if eof' foo.pl bar.pl