如何在不使用中间变量的情况下将哈希转换为数组?

Tal*_*Kit 4 perl

如何在不使用中间变量的情况下临时将哈希转换为数组

例如,在下面的代码中,“@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)

ike*_*ami 6

在列表上下文中,%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 }.

换句话说,它仍然创建一个数组,但该数组是匿名的。