纯粹的学术问题,我没有在这里看到禁止它们的说明(虽然我没有找到'学术'标签).
如果我有如下所示的现有哈希,我可以采用它的切片(?),如下所示:
my %hash = (one=>1, two=>2, three=>3, four=>4);
my ($two, $four) = @hash{'two','four'};
Run Code Online (Sandbox Code Playgroud)
如果从这样的示例函数返回哈希,有没有办法做到这一点?
sub get_number_text
{
my %hash = (one=>1, two=>2, three=>3, four=>4);
return %hash;
}
Run Code Online (Sandbox Code Playgroud)
一种有效的方法是:
my ($two, $four) = @{ { get_number_text() } }{'two', 'four'};
Run Code Online (Sandbox Code Playgroud)
据我所知,函数返回一个散列键/值列表,内部{}创建一个匿名散列/ ref,而@ {}使用引用将其"强制转换"为一个列表,即一个哈希切片,因为Perl知道参考哈希.(我对最后一点工作有点惊讶,但对Perl有更多的权力,等等)
但这是在一个表达式中写出那个公认的奇怪访问的最明确方式吗?
通常,避免return %foo从子例程返回flatted hash(); 如果不将其复制到另一个哈希中,它将更难以使用.最好返回哈希引用(return \%foo).
但是,这是最明确的方式.虽然经常使用qw给出硬编码密钥列表:
my ($two, $four) = @{ { returnit() } }{ qw/two four/ };
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
716 次 |
| 最近记录: |