与perl中的变量混淆

时间:2013-05-16 05:22:43

标签: perl

如果使用use strictuse warning和 如果我指定my数据类型,它可以工作;如果我没有指定my它说错误。

use strict;
use warnings;
my $test=10;
my @arr=(10,20,30);

如果我将数组变量名称声明为数字:

 use strict;
 use warnings;
 my @100=(10,20,30);

然后当我运行该程序时,它说错误:

 Can't use global @100 in "my" at number_sclar.pl line 28, near "my @100"

如果删除my并运行该程序,则运行时没有错误。

那么请有人告诉我为什么数字数组变量名不支持my变量吗?

2 个答案:

答案 0 :(得分:9)

来自perldoc perlvar

  

以数字,控制字符或开头的Perl标识符   标点符号不受“包”的影响   宣言          并且总是被迫成为“主要”的包装; 他们也免于“严格'变种'”错误。其他一些名字也免除   以这些方式...

答案 1 :(得分:4)

作为创造1美元,2美元,3美元,100美元等的无意识的副作用(以保存正则表达式捕获的结果); <1,@ 2,@ 3,@ 100等也会被创建。

但是,perlvar中的这些和大多数特殊变量的名称除了包变量外都不是合法的名称。例如,即使my $(;是包变量 [1] 的有效名称,也无法执行sub (;$(

当在5.6中将词汇添加到Perl时,肯定会认为让这些名称用于用户变量令人困惑。事实上,我怀疑有人甚至没有想过这个想法。

除了Sigil之外,词汇变量必须以[a-zA-Z _] [2] 中的一个字符开头,后面跟着[a-zA-Z0-9_]中的一些字符 [2] 。因此,@100不是词法变量的有效名称。


注意:

  1. >perl -e"our $(;"
    
    >perl -e"my $(;"
    Can't use global $( in "my" at -e line 1, near "my $("
    Execution of -e aborted due to compilation errors.
    
    >perl -e"sub (;"
    Prototype not terminated at -e line 1.
    
  2. 实际上允许使用更多代码点,但它们不属于ASCII的字符集。为简单起见,我只列出了属于ASCII字符集的代码点。