hashmap - Perl 哈希不能按预期工作
问题描述
#!/usr/bin/perl
sub f { {
a => 1,
b => 2
} }
sub g { {
%{f()},
c => 3,
d => 4,
} }
use Data::Dumper;
print Dumper g();
上面的代码输出
$VAR1 = 'a';
$VAR2 = 1;
$VAR3 = 'b';
$VAR4 = 2;
$VAR5 = 'c';
$VAR6 = 3;
$VAR7 = 'd';
$VAR8 = 4;
尽管据我了解它应该输出
$VAR1 = {
'a' => 1,
'c' => 3,
'b' => 2,
'd' => 4
};
我的误解是什么?
解决方案
问题是 Perl 中的一对大括号是不明确的,可能是块或匿名哈希
由于您g
(请使用更好的名称)中的哈希内容,perl 假设您正在编写一个代码块,它只是一个标量值列表
像这样使它更明确,您的代码将按预期运行
use strict;
use warnings 'all';
sub foo {
{
a => 1,
b => 2,
}
}
sub bar {
my $href = {
%{ foo() },
c => 3,
d => 4,
}
}
use Data::Dump;
dd bar();
输出
{ a => 1, b => 2, c => 3, d => 4 }
推荐阅读
- sql - 在 SQL 更新命令中包含连接和计数?
- sql - MS Access SQL 查询中分组组的总和
- post - Microsoft Graph API Posts 在图资源管理器中工作 403 在邮递员中被禁止
- javascript - 更新电子和更改 nodeIntegration 为 true 后出错
- bash - 将for循环结果转换为bash中的数组
- spring-boot - 在 Spring Boot 中通过方法限制对端点的访问
- ruby-on-rails - 如何设置通配符子域以用作客户端 DNS 提供商中的 CNAME 值
- oracle - Oracle 12C中如何确认连接数?
- python - Selenium Python一次处理多个webdriver
- javascript - 使用特定对象动态插入字符串