使用Perl获取哈希数组的第一个值

now*_*wox 0 arrays perl hash

我有一个执行SQL查询的子例程,并返回结果作为哈希数组的引用.

my $value = query("SELECT value from table WHERE foo=bar LIMIT 1");
Run Code Online (Sandbox Code Playgroud)

如何从唯一的哈希中提取第一个值,而不必知道元素的键?

ike*_*ami 6

如果你知道钥匙,那就是

query("...")->[0]{$key}
Run Code Online (Sandbox Code Playgroud)

但你不知道关键,所以我们必须抓住它.问题是哈希的元素没有排序.你可以拿一把钥匙,但没有第一把钥匙.但看起来你在哈希中只有一个元素,所以下面的方法就是这样:

my ($val) = values(%{ query("...")->[0] });
  -or-
my $val = ( values(%{ query("...")->[0] }) )[0];
  -or-
my $val = ( %{ query("...")->[0] } )[1];
Run Code Online (Sandbox Code Playgroud)

这只是解决症状.你的问题源于你正在使用另一个愚蠢的DBI包装器[1].没有你的包装,你可以做到

my ($val) = $dbh->selectrow_array("...");
Run Code Online (Sandbox Code Playgroud)
  1. 为什么每个人都坚持编写使得访问数据库变得更难的包装器?如果你想提前进行数据库访问,不要创建一个简单执行SQL语句的接口--DBI已经做得很好 - 创建一个执行特定任务的接口(例如get_x_for_y($dbh, $y)).