我有使用DBI的fetchall_hashref()获取一些数据的脚本。我如何在Perl中习惯性地访问单个元素哈希的第一个元素?
通常它会返回一个哈希值裁判这样的:
{ 1 => { id => 1 } }
不过,我只是在哈希的第一个项目,这是一个特定列的最大值的值感兴趣。我知道Perl散列没有排序,但幸运的是,这个特定的查询总是返回1或0个记录(因为这是一个MAX()查询)。
但目前使用的代码实现了实在是太丑:
$results->{(keys %{$results})[0]}->{'id'};
有没有更优雅的方式来主动呢? (没有求助于CPAN模块)
澄清
我得到来自我们在家里使用数据访问层的哈希值。一切都通过fetchall_hashref()返回。我不会调用fetchall_hashref()本身,它只是如何在内部实现数据访问函数,所以我被告知。我是返回数据的消费者,它恰好是以散列形式出现的。我正在寻找一个更简洁的方法来访问单个返回值查询的结果
可以扩展到获得第二个第一个值:'(values%{(values%$ results)[0]})[0]' – fork0 2012-07-06 09:46:33
'(values%$ results)[0] - > { id};'是完美的。它清楚地表明你对整个'%$ results'没有兴趣,只有它的价值。无需尝试添加更多*值*。 – 2012-07-06 11:09:02
@ fork0你使用'values'来完成这个任务,并拿到了第二名:D,但是在可读性方面,这是第一名。 – gaussblurinc 2012-07-06 12:25:25