为什么perl会将结果转换为结肠?

mmc*_*coo 13 perl

鉴于此计划:

use strict;
use warnings;

my $zx_size = 32;
my $x = "$zx_size'h0";
Run Code Online (Sandbox Code Playgroud)

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.
Run Code Online (Sandbox Code Playgroud)

为什么?

看来有多种方法可以指定var的命名空间.还有其他人吗?

是否可以关闭此行为?

Hun*_*len 19

旧的包分隔符是单引号',最初用于简化Ada程序员向Perl的过渡.它被替换::为更易读并且易于转换C++程序员.

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

my $x = "${zx_size}'h0";
Run Code Online (Sandbox Code Playgroud)

要么

my $x = "$zx_size\'h0";
Run Code Online (Sandbox Code Playgroud)


Okt*_*ist 11

'早期的Perls使用单引号字符来表示包范围::,并且仍然支持向后兼容性.

要做你想做的事,你需要使用${}语法告诉Perl标识符结束的位置和文字开头:

"${zx_size}'h0"
Run Code Online (Sandbox Code Playgroud)

请注意,如果您想要$zx_size在标识符中出现合法的任何其他文字字符后面的值,则必须执行此操作:

"${zx_size}foo"
Run Code Online (Sandbox Code Playgroud)