设置-n
或-p
后,要按号码获取字段,必须同时传递-a
选项以使用@F
。
为什么设置所有内置变量,除了@F必须手动设置?特别是当-n打开时?默认设置对我来说更有意义。有具体原因吗?
答案 0 :(得分:3)
为什么设置除@F之外的所有内置变量都必须手动设置?
变量在设置之前如何具有值?
许多变量反映系统调用(例如%ENV
反映getenv
)或内部Perl变量($!
反映errno
)。访问这些变量访问反射变量或系统调用 - 它们实际上没有自己的值,因此它们似乎始终具有值。
但@F
并未反映任何内容。事实上,它根本不是一个特殊的变量。与$_
,@ISA
等等一样,除非您给它一个,否则它没有值。
现在,readline
可以更改为在从文件中读取一行时填充@F
,但这会浪费多少资源!!!您建议Perl应为每个文件的每个单词创建一个字符串,以避免指定一个字母来激活极少使用的功能。那太糟糕了。
答案 1 :(得分:2)
:)因为不是吗?
另外,@ F并不是一个内置变量,它由-a
创建$ perl -we " print @F "
Name "main::F" used only once: possible typo at -e line 1.
$ perl -wae" print @F "
$ perl -MO=Deparse -ne print
LINE: while (defined($_ = <ARGV>)) {
print $_;
}
-e syntax OK
$ perl -MO=Deparse -ane print
LINE: while (defined($_ = <ARGV>)) {
our(@F) = split(' ', $_, 0);
print $_;
}
-e syntax OK