为什么@ARGV在这个Perl单行内部未定义?
发布时间:2020-12-15 23:22:05 所属栏目:大数据 来源:网络整理
导读:他的END区块中的Stackoverflower tried to use @ARGV 同伴但无法进行. 为什么@ARGV仅在BEGIN块中定义,具有以下单行: $perl -lne 'BEGIN{ print "BEGIN" if @ARGV } print "MIDDLE" if @ARGV } { print "END" if @ARGV ' file BEGIN perldoc perlrun 对此事
他的END区块中的Stackoverflower
tried to use
@ARGV 同伴但无法进行.
为什么@ARGV仅在BEGIN块中定义,具有以下单行: $perl -lne 'BEGIN{ print "BEGIN" if @ARGV } print "MIDDLE" if @ARGV } { print "END" if @ARGV ' file BEGIN
解决方法
首先,数组不能是未定义的.您正在检查数组是否为空.要理解为什么它被清空,你需要了解-n. -n用你的代码包围你的代码
LINE: while (<>) { ... } 这是短的 LINE: while (defined($_ = <ARGV>)) { ... } ARGV是一个神奇的句柄,可以读取@ARGV中列出的文件,在打开它们时移出文件名. $echo foo1 > foo $echo foo2 >>foo $echo bar1 > bar $echo bar2 >>bar $echo baz1 > baz $echo baz2 >>baz $perl -nlE' BEGIN { say "Files to read: @ARGV" } say "Read $_ from $ARGV. Files left to read: @ARGV"; ' foo bar baz Files to read: foo bar baz Read foo1 from foo. Files left to read: bar baz Read foo2 from foo. Files left to read: bar baz Read bar1 from bar. Files left to read: baz Read bar2 from bar. Files left to read: baz Read baz1 from baz. Files left to read: Read baz2 from baz. Files left to read: 请记住,BEGIN块一经编译就会执行,因此< ARGV>在执行BEGIN块时(即使它出现在程序的早期版本中)尚未执行,因此@ARGV尚未被修改. -n记录于perlrun. ARGV,@ ARGV和$ARGV记录于perlvar. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |