大佬教程收集整理的这篇文章主要介绍了perl – 当前文件行号,带$.变量,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
line one line two line three
那么我希望以下代码为每一行添加其行号前缀
for my $line (<FILE>) { print "$. : $line"; }
但是,它给出了以下输出
3 line one 3 line two 3 line three
在每行前面加上文件中的行数.而不是当前的行.
while (my $line = <FILE>) { print "$. : $line"; }
当< filehandle>在列表上下文中调用(因为它在for循环中),它将文件的全部内容作为行列表返回.因此,您的代码的行为方式与您编写代码的方式大致相同:
@H_285_2@my @lines = <FILE>; # now $. is set to the end of the file for my $line (@lines) { ... } # you're just looping over an array,not touching $.要获得所需的结果,您应该调用<>在标量上下文(while条件中的赋值)中重复执行,从文件中一次获取一行并使用$执行循环体.设置为正确的数字.
此外,全局文件句柄被认为是不好的做法.有几个原因,最好使用词法变量引用的文件句柄,如下所示:
open my $file,'<',$filename or die $!; while (my $line = <$file>) { print "$. : $line"; }
另外,因为$.是一个包含最近执行的读取操作的行号的全局变量,如果在< $file>之间有任何其他读取的可能性,则不应该依赖它.和印刷品.相反,请询问您用于其行号的文件句柄:
open my $file,$filename or die $!; while (my $line = <$file>) { print $file->input_line_number," : $line"; }
使用全局文件句柄,即使有点笨拙,它甚至可以工作:
while (my $line = <FILE>) { print ${\*FILE}->input_line_number," : $line"; }
…甚至是由空<>读取的默认值,其名称为ARGV:
while (my $line = <>) { print ${\*ARGV}->input_line_number," : $line"; }
以上是大佬教程为你收集整理的perl – 当前文件行号,带$.变量全部内容,希望文章能够帮你解决perl – 当前文件行号,带$.变量所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。