为什么我不能声明包含所有数字的变量名称,例如my $123;
?
我知道$1
是与正则表达式相关的特殊变量。但$a
也是一个特殊变量(与sort
相关),我可以在我的代码中声明它:
my $a;
为什么我可以这样做而不是
my $1;
或
my $123;
答案 0 :(得分:6)
这在perldoc中记录为perlvar。
Perl中的变量名称可以有多种格式。通常,它们必须以字母或下划线开头,在这种情况下,它们可以任意长(最多内部限制为251个字符),并且可以包含字母,数字,下划线或特殊序列::或'。 [...]
Perl变量名也可以是数字序列或单个标点符号或控制字符。这些名称都保留给Perl的特殊用途;例如,所有数字名称用于保存正则表达式匹配后由反向引用捕获的数据。 [...]
考虑到这一点,这些名称是有效的:
$a
$foo
$_
$_123
$_foo_bar_baz_
$_____
然而,这并不意味着拥有它们是有道理的。
在变量包含之后命名变量总是一个好主意。很难猜出名为$99
的变量可能包含什么。也许它是第99个东西,在这种情况下它应该是一个数组索引。或者它可能是99,在这种情况下你可以使用常量(99
)。