在试图更好地理解无格变量以及它们与$sigiled变量的区别时,我发现,与$sigiled变量不同,sigilless变量在初始化后无法反弹:
my $a = 42;
my $b := $a;
$b := 42; # No exception generated
my \c := $a;
c := 42; # OUTPUT: «Cannot use bind operator with this left-hand side?»
Run Code Online (Sandbox Code Playgroud)
这是设计的吗?如果是这样,当$不禁止这些变量被禁止时,是否有目的或好处禁止无重复变量重新绑定?
这段代码:
constant %what = { doesn't => 'change' };
%what = { will => "change" }
Run Code Online (Sandbox Code Playgroud)
应该说“不能修改不可变的哈希”。但是,它说:
Potential difficulties:
Useless use of hash composer on right side of hash assignment; did you mean := instead?
Run Code Online (Sandbox Code Playgroud)
Positionals有几乎相同的问题,但错误有所不同。在这种情况下,它不能修改不可变的,而只能修改一个Str:
constant @what = <does not change>;
@what = <does change> # Cannot modify an immutable Str (does)
Run Code Online (Sandbox Code Playgroud)
标量工作正常。这是LTA错误消息的情况,还是我缺少的一些容器魔术在起作用?