You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Perl中使用grep通过哈希值匹配查找对应键名问题求助

问题原因

  • 你原先的代码直接遍历哈希的values,拿到的是数组引用,直接和$country_value做字符串匹配必然不成立
  • 标量上下文下grep返回的是匹配成功的次数,所以你才会得到输出0
  • 另外数值比较应该用==而不是字符串比较的eq,避免隐式转换带来的异常问题

修复后的代码

#!/usr/bin/perl -w
use strict;
use warnings;

my $country_value = 1;

my $country = {
    'IN' => [
              1,
              5
            ],
    'US' => [
              2,
              6
            ],
    'UK' => [
              3,
              7
            ]
};

# 遍历哈希的所有键,检查对应数组中是否包含目标值
my ($country_code) = grep {
    my $values = $country->{$_};
    grep { $_ == $country_value } @$values;
} keys %$country;

print $country_code // '未找到匹配的国家代码';
print "\n";

代码说明

  • 改为遍历哈希的键keys %$country,拿到每个国家代码后再取出对应的数组
  • 内层嵌套grep遍历该数组,判断是否存在和$country_value相等的元素
  • 用列表上下文接收grep的返回结果,拿到第一个匹配的键名
  • 用//做未匹配的兜底处理,避免未匹配时打印空值的问题

内容的提问来源于stack exchange,提问作者SaAsh Techs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:45:03