perl – foreach和特殊变量$_不按预期运行

前端之家收集整理的这篇文章主要介绍了perl – foreach和特殊变量$_不按预期运行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在学习Perl并编写了一个小脚本来打开perl文件删除注释

#将删除评论

我的$name =“”; #不会删除评论

#!/usr/bin/perl -w< - 不会删除此特殊评论 要编辑的文件名称通过终端作为参数传递

die "You need to a give atleast one file-name as an arguement\n" unless (@ARGV);

foreach (@ARGV) {
    $^I = "";
    (-w && open FILE,$_) || die "Oops: $!";
    /^\s*#[^!]/ || print while(<>);
    close FILE;
    print "Done! Please see file: $_\n";
}

现在我通过终端运行它:
perl removeComments file1.pl file2.pl file3.pl

我得到了输出
完成!请看文件

这个脚本正如我所期待的那样完全正常工作

问题1:为什么$_没有打印文件名称

问题2:由于循环运行3次,为什么要完成!请看文件:只打印一次?

如何在尽可能少的行中编写此脚本?

如果你有时间,请评论我的代码.

谢谢.

解决方法

while存储由钻石运算符读取的行<>进入$_,所以你要写的是存储文件名的变量.

另一方面,您打开文件时打开但实际上并没有使用句柄来阅读;它使用空钻石运算符代替.空菱形运算符对@ARGV中的文件进行隐式循环,删除文件名,因此foreach只运行一次.

要修复第二个问题,你可以使用while(< FILE>),或者重写循环以利用<>中的隐式循环.并将整个程序写为:

$^I = "";
/^\s*#[^!]/ || print while(<>);

猜你在找的Perl相关文章