为什么perl将记号转换为冒号?

为什么perl将记号转换为冒号?,perl,Perl,鉴于该计划: 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. 为什么? 似乎有多种方法可以指定变量的名称空间

鉴于该计划:

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.
为什么?

似乎有多种方法可以指定变量的名称空间。还有其他方法吗


是否可以关闭此行为?

请阅读。第二段。不,没有办法关掉它,至少现在是这样。从理论上讲,有人可以为它编写一个
no-feature
pragma,但这种方式已经使用了20年,没有造成太多问题。

早期的PERL使用单引号字符
来表示包范围,其方式与
相同,并且仍然支持向后兼容

要执行所需操作,需要使用
${}
语法告诉Perl标识符的结束位置和文本的开始位置:

"${zx_size}'h0"
请注意,如果要将
$zx_size
的值后跟合法出现在标识符中的任何其他文字字符,则必须执行相同的操作:

"${zx_size}foo"

旧的包分隔符是一个单引号
,最初用于简化Ada程序员到Perl的转换。它被“代码>::/CODE >取代,更易于阅读,便于C++程序员的转换。 它仍然支持向后兼容,但您可以将标量包装在
{..}
中,使其正确插值

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


试试这个“$zx_size'h0”(带反斜杠)或“$zx_size'h0”;(带空格)。实际上,您必须将变量和字符串的内容分开。Perl认为zxsize'h0是变量的名称。或者你可以试试“$zx_尺寸”。“h0”也是。一切都很好。或
my$x=$zx\u大小的可能重复项。“'h0”奇怪。答案是21小时前发布的,但上述评论是20小时前发表的?臭虫@亨特:谢谢你的背景资料。有趣。
my $x = "$zx_size\'h0";