Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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_Variables - Fatal编程技术网

什么是?。用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 @.,

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 @., "\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,插值有很好的文档记录,这与文档直接矛盾。你在说什么?