perl – foreach和特殊变量$_不按预期运行
发布时间:2020-12-15 23:34:44 所属栏目:大数据 来源:网络整理
导读:我正在学习Perl并编写了一个小脚本来打开perl文件并删除注释 #将删除此评论 我的$name =“”; #不会删除此评论 #!/usr/bin/perl -w - 不会删除此特殊评论 要编辑的文件名称通过终端作为参数传递 die "You need to a give atleast one file-name as an argue
我正在学习Perl并编写了一个小脚本来打开perl文件并删除注释
#将删除此评论 我的$name =“”; #不会删除此评论 #!/usr/bin/perl -w< - 不会删除此特殊评论 要编辑的文件名称通过终端作为参数传递 die "You need to a give atleast one file-name as an arguementn" unless (@ARGV); foreach (@ARGV) { $^I = ""; (-w && open FILE,$_) || die "Oops: $!"; /^s*#[^!]/ || print while(<>); close FILE; print "Done! Please see file: $_n"; } 现在我通过终端运行它: 我得到了输出: 这个脚本正如我所期待的那样完全正常工作 问题1:为什么$_没有打印文件的名称? 问题2:由于循环运行3次,为什么要完成!请看文件:只打印一次? 如何在尽可能少的行中编写此脚本? 如果你有时间,请评论我的代码. 谢谢. 解决方法
while存储由钻石运算符读取的行<>进入$_,所以你要写的是存储文件名的变量.
另一方面,您打开文件时打开但实际上并没有使用句柄来阅读;它使用空钻石运算符代替.空菱形运算符对@ARGV中的文件进行隐式循环,删除文件名,因此foreach只运行一次. 要修复第二个问题,你可以使用while(< FILE>),或者重写循环以利用<>中的隐式循环.并将整个程序写为: $^I = ""; /^s*#[^!]/ || print while(<>); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |