什么是?。用Perl?
perl中的什么是?。用Perl?,perl,variables,Perl,Variables,perl中的@.变量是什么 它似乎是一个特殊的、可写的全局变量,并且(令人惊讶地)不会在双引号字符串中插入: use strict; use warnings; # Under 5.8, 5.10, 5.12, 5.14, and 5.16, # the following lines produce: @. = (3, 2, 1); # no error print "@.\n"; # "@." print @.,
@.
变量是什么
它似乎是一个特殊的、可写的全局变量,并且(令人惊讶地)不会在双引号字符串中插入:
use strict;
use warnings;
# Under 5.8, 5.10, 5.12, 5.14, and 5.16,
# the following lines produce:
@. = (3, 2, 1); # no error
print "@.\n"; # "@."
print @., "\n"; # "321"
eval 'my @.; 1' # Can't use global @. in "my" at (eval 1)
or die $@; # line 1, near "my @."
我不记得以前见过它,也没有在
perlvar
或perldata
$中看到过它。
是最近文件句柄的当前行号(或记录号)
@。
没有特殊意义或用途
“@.”
不插值,但“@{.}”
插值
@。
保留供将来使用,不应使用说明:
Perl变量名也可以是一系列数字或单个标点符号或控制字符。这些名称都是Perl为特殊用途保留的
及
以数字、控制字符或标点字符开头的Perl标识符不受包声明的影响,并且总是强制位于package main
;它们也可以免除严格的“vars”
错误
您正在使用保留名称。您不应该指望能够依赖任何功能。是。那么,这是否事实上也声明了,例如,
%。
?为什么@.
不插值?@pilcrow-与@/
,@~
和其他一些非字母字符数组变量相同。您可以将它们用作数组,但它们不会插值。@pilcrow-也可以用作哈希:%~=qw(12);打印“$~{1}\n”
将打印2
-插值,我相信。.
插值,但您必须编写“@{.}”
。您知道它为什么不插值吗?它由Perl保留。没有理由期望它以任何特定的方式运行。当perl
查看“@.
时,它会检查.
是否是具有特殊含义的变量之一。如果不是,它可能假定您不是有意插入它。我不确定到底需要什么样的魔法才能让它有不同的解释,但我不想冒险去那里。谢谢。FWIW,我认为这里的一个更改将破坏许多处理(原始)正则表达式的字符串表示以匹配电子邮件地址的代码,这是我第一次看到这一点并错误地认为,“哦,那将插值为零。”很可能正是因为这一点,Perl 5移植程序才使其免于插值。但所有这些都是推测,任何不是文档的东西都是未定义的。缺少插值是非常错误的。提交了一个@ikegami:这种行为是没有记录的,所以根本没有错,更不用说非常错误了。编程语言是供人们作为工具使用的:如果你能找到一个程序员,他因为这种反常的行为而感到不便,那么我向你致敬。@Borodin,插值有很好的文档记录,这与文档直接矛盾。你在说什么?