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

时间:2014-09-17 15:47:44

标签: perl

为什么我不能声明包含所有数字的变量名称,例如my $123;

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

my $a;

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

my $1;

my $123;

1 个答案:

答案 0 :(得分:6)

这在perldoc中记录为perlvar

  

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

     

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

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

$a
$foo
$_
$_123
$_foo_bar_baz_
$_____

然而,这并不意味着拥有它们是有道理的。

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