Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与perl中的变量混淆_Perl - Fatal编程技术网

与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
不是词法变量的有效名称


注:

  • 实际上允许更多的代码点,但它们不属于ASCII字符集。为简单起见,我只列出了属于ASCII字符集的代码点


  • 我想知道我的变量的工作原理。这就是我在这里发布的原因。好吧,我没有一个好的解释;我冒昧地猜测它是为了向后兼容而提供的,与特殊变量一致,例如
    $^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.