如何在不使用中间变量的情况下临时将哈希转换为数组
例如,在下面的代码中,“@arr”变量是一个存储转换后的哈希值的数组。
my %scientists = (
"Newton" => "Isaac",
"Einstein" => "Albert",
"Darwin" => "Charles",
);
my @arr = %scientists;
print $_ . " " foreach @arr; # "Newton Isaac Darwin Charles Einstein Albert"
Run Code Online (Sandbox Code Playgroud)
我并不是想在这里完成任何具体的事情。只是想知道是否可以将哈希转换为没有中间变量的数组
print ref(\@arr); # print array
Run Code Online (Sandbox Code Playgroud)
同样,是否有一个东西可以代替“”,以便以下是可能的
print ref(<syntax>%scientists%<sytax>) # should print array.
Run Code Online (Sandbox Code Playgroud)
在列表上下文中,%hash结果是标量的键值对。
例如,%scientists结果有六个标量"Newton", "Isaac", "Einstein", "Albert", "Darwin", "Charles",尽管顺序可能不同。
这适用于 的右侧my @arr =。
my @arr = %scientists;
Run Code Online (Sandbox Code Playgroud)
它也适用于 foreach 循环的列表。
print $_ . " " for %scientists;
Run Code Online (Sandbox Code Playgroud)
然而,大多数时候,人们会使用keys( %scientists )而不是仅仅使用%scientists.
say "$_ $scientists{ $_ }" for keys( %scientists );
Run Code Online (Sandbox Code Playgroud)
对于底部的问题,您可以使用
say ref( [ %scientists ] );
Run Code Online (Sandbox Code Playgroud)
[ ... ]大致相当于do { my @anon = ...; \@anon }.
换句话说,它仍然创建一个数组,但该数组是匿名的。