从文件中读取第3行到第5行,如何将这些行号转换为变量?

时间:2012-07-25 13:43:49

标签: perl

我是perl的新手,但我只是想打开一个文件并从中读取一些行。

到目前为止,代码如下所示:

open FILE, "file.txt" or die "can not open file"; 
while (<FILE>) { 
  print if ($.== 3..5)
}

但我需要能够改变要获得的线条。所以那些3和5的数字需要是变量。

还有人可以帮助我更好地理解这段代码吗?我想知道什么是$。确切地说,如何将打印命令替换为数组或其他东西以进一步处理这些行?

谢谢!

2 个答案:

答案 0 :(得分:3)

小心语法。通过perl -MO=Deparse,-p运行示例表明perl将其解释为

(open(FILE, 'file.txt') or die('can not open file'));
while (defined(($_ = <FILE>))) {
((($. == 3) .. 5) and print($_));

幸运的是,范围运算符执行了您希望它执行的操作,因为..默认使用$.(输入行号)。

要使用变量而不是常量,只需使用

print if $. == $x .. $. == $y;

答案 1 :(得分:0)

$ perl -E'say for "aa".."ah"' | perl -ne'print if 3..5'

根据documentation使用常量时,使用$.是不必要的,但是当您使用变量时,您可以明确地提及它:

perl -E'say for "aa".."ah"' | perl -ne'BEGIN{($f,$t) = splice@ARGV,0,2;}print if ($.==$f)..($.==$t)' 3 5