如果使用use strict和use warning,如果我指定my数据类型,它的工作原理; 如果我没有指定my它说错误.
use strict;
use warnings;
my $test=10;
my @arr=(10,20,30);
Run Code Online (Sandbox Code Playgroud)
如果我将数组变量名称声明为数字:
use strict;
use warnings;
my @100=(10,20,30);
Run Code Online (Sandbox Code Playgroud)
然后,当我运行该程序时,它说错误:
Can't use global @100 in "my" at number_sclar.pl line 28, near "my @100"
Run Code Online (Sandbox Code Playgroud)
如果我删除它my并运行该程序,它运行没有错误.
所以,任何人都可以告诉我为什么my数字数组变量名称不支持变量?
以数字,控制字符或标点符号开头的Perl标识符不受"包"声明的影响,并且始终强制在包"main"中; 他们也免于"严格'变量'"错误. 其他一些名字也可以通过这些方式免除......
作为创建 $1、$2、$3、$100 等的无意副作用(用于保存正则表达式捕获的结果);@1、@2、@3、@100 等也会被创建。
然而,除了包变量之外,这些名称以及perlvar中的大多数特殊变量都不是合法名称。例如,您不能执行my $(;or sub (;Eventhough是包变量[1]$(的有效名称。
当 Perl 在 5.6 中添加词法时,允许用户变量使用这样的名称肯定会被认为是令人困惑的。事实上,我怀疑是否有人有过这个想法。
除了 Sigil 之外,词法变量必须以 [a-zA-Z_] [2]中的字符开头,后面可以跟 [a-zA-Z0-9_] [2]中的多个字符。因此,@100不是词法变量的有效名称。
笔记:
>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.
Run Code Online (Sandbox Code Playgroud)实际上允许更多的代码点,但它们不属于 ASCII 的字符集。为了简单起见,我只列出了 ASCII 字符集中的代码点。