我有使用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