为什么我不能声明包含所有数字的变量名?

mkH*_*Hun -1 perl

为什么我不能声明一个由所有数字组成的变量名,例如my $123;

我知道这$1是一个与正则表达式相关的特殊变量.但$a也是一个特殊的变量(与之相关sort),我可以在我的代码中声明它,如下所示:

my $a;
Run Code Online (Sandbox Code Playgroud)

我为什么可以这样做而不是

my $1;
Run Code Online (Sandbox Code Playgroud)

要么

my $123;
Run Code Online (Sandbox Code Playgroud)

sim*_*que 6

这在Perldoc中记录,称为perlvar.

Perl中的变量名称可以有多种格式.通常,它们必须以字母或下划线开头,在这种情况下,它们可以任意长(最多内部限制为251个字符),并且可以包含字母,数字,下划线或特殊序列::或'.[...]

Perl变量名也可以是数字序列或单个标点符号或控制字符.这些名称都保留给Perl的特殊用途; 例如,所有数字名称用于保存正则表达式匹配后由反向引用捕获的数据.[...]

考虑到这一点,这些名称是有效的:

$a
$foo
$_
$_123
$_foo_bar_baz_
$_____
Run Code Online (Sandbox Code Playgroud)

但是,这并不意味着拥有它们是有道理的.

在变量包含之后命名变量总是一个好主意.很难猜出所调用的变量$99可能包含什么.也许它是第99个东西,在这种情况下它应该是一个数组索引.或者它可能是99,在这种情况下你可以使用一个常量(99).