由于有 Perl 背景,我发现 Perl 也很奇怪。
使用括号来初始化哈希(或数组)。哈希是一组字符串和一组标量值之间的映射。
%foo = ( "key1", "value1", "key2", "value2", ... ); # % means hash
%foo = ( key1 => "value1", key2 => "value2", ... ); # same thing
大括号用于定义哈希参考。所有引用都是标量值。
$foo = { key1 => "value1", key2 => "value2", ... }; # $ means scalar
哈希值是not标量值。由于哈希中的值must是标量,因此不可能使用一个哈希作为另一个哈希的值。
%bar = ( key3 => %foo ); # doesn't mean what you think it means
但是我们可以使用哈希引用作为另一个哈希的值,因为哈希引用是标量。
$foo = { key1 => "value1", key2 => "value2" };
%bar = ( key3 => $foo );
%baz = ( key4 => { key5 => "value5", key6 => "value6" } );
这就是为什么您会看到带有大括号的列表列表周围有括号。