13

鉴于此程序:

use strict;
use warnings;

my $zx_size = 32;
my $x = "$zx_size'h0";

Perl 告诉我:

Name "zx_size::h0" used only once: possible typo at concat.pl line 7.
Use of uninitialized value $zx_size::h0 in string at concat.pl line 7.

为什么?

似乎有多种方法可以指定 var 的命名空间。还有其他人吗?

是否可以关闭此行为?

4

3 回答 3

19

旧的包分隔符是一个单引号',最初用于为 Ada 程序员轻松过渡到 Perl。它被替换::为更具可读性和简化 C++ 程序员的过渡。

它仍然支持向后兼容性,但是您可以将标量包装起来{..}以使其正确插值。

my $x = "${zx_size}'h0";

或者

my $x = "$zx_size\'h0";
于 2013-07-01T18:28:00.103 回答
11

早期的 Perls 使用单引号字符'以与 相同的方式表示包范围::,并且仍然支持它以实现向后兼容性。

为了做你想做的事,你需要使用${}语法告诉 Perl 标识符在哪里结束,文字从哪里开始:

"${zx_size}'h0"

$zx_size请注意,如果您希望 的值后跟任何其他合法出现在标识符中的文字字符,则这与您必须做的事情相同:

"${zx_size}foo"
于 2013-07-01T18:27:51.233 回答
4

阅读perlmod。第二段。不,没有办法关闭它,至少现在是这样。理论上,有人可以no feature为它写一个pragma,但20年来一直这样,没有引起太多问题......

于 2013-07-01T18:27:36.807 回答