为什么默认情况下不设置@F?

时间:2015-05-11 02:24:27

标签: perl

设置-n-p后,要按号码获取字段,必须同时传递-a选项以使用@F

为什么设置所有内置变量,除了@F必须手动设置?特别是当-n打开时?默认设置对我来说更有意义。有具体原因吗?

2 个答案:

答案 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
相关问题