与perl中的变量混淆
如果使用与perl中的变量混淆,perl,Perl,如果使用则使用严格和则使用警告和 如果我指定mydatatype,它会工作;如果我没有指定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
则使用严格
和则使用警告
和
如果我指定my
datatype,它会工作;如果我没有指定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
变量吗?来自:
以数字、控制字符或字符开头的Perl标识符
标点符号不受“包装”的影响
宣言
并且总是被迫在包“主”它们也不受“严格的“变量”错误的影响。一些其他名称也不受影响
在这些方面
作为创建$1、$2、$3、$100等的无意副作用(用于保存正则表达式捕获的结果)@1、@2、@3、@100等也会被创建 但是,除了包变量之外,这些变量和中的大多数特殊变量的名称都不是合法名称。例如,即使
$(
是包变量[1]的有效名称,也不能执行my$(;
或sub(;
)
在5.6中,当Perl中添加了词汇表时,允许用户变量使用这样的名称肯定会让人感到困惑。事实上,我怀疑是否有人愿意接受这种想法
撇开符号不谈,词法变量必须以[a-zA-Z_][2]中的一个字符开头,后面可以跟[a-zA-Z0-9_][2]中的许多字符。因此,@100
不是词法变量的有效名称
注:
我想知道我的变量的工作原理。这就是我在这里发布的原因。好吧,我没有一个好的解释;我冒昧地猜测它是为了向后兼容而提供的,与特殊变量一致,例如
$^W
。仅供参考:您可以使用我们的@100=(10,20,30);
和打印$100[0]
不会触发错误。警告和我的组合意味着数字名称是不可接受的。嗯。从没想过那会起作用。@OneSolitaryNoob:我也有点惊讶!我以为那只是1美元-$9@jozefg,它不是,你可以通过测试来验证。这是怎么得到10票的?它没有我甚至都不想回答OP的问题!包变量以这些名称存在的事实与不能用my
声明它们无关。例如$a
和$\ucode>不受限制,但它们可以用my
声明。
>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.