使用 Perl 获取哈希数组的第一个值
Get the first value of an array of hash with Perl
我有一个执行 SQL 查询的子例程,returns 结果作为对哈希数组的引用。
my $value = query("SELECT value from table WHERE foo=bar LIMIT 1");
如何在不知道元素键的情况下从唯一的哈希中提取第一个值?
如果你知道密钥,那就是
query("...")->[0]{$key}
但你不知道钥匙,所以我们必须抓住它。问题是散列的元素没有排序。您可以获取 一个密钥,但没有 第一个密钥。但看起来你在散列中只有一个元素,所以下面的方法就可以了:
my ($val) = values(%{ query("...")->[0] });
-or-
my $val = ( values(%{ query("...")->[0] }) )[0];
-or-
my $val = ( %{ query("...")->[0] } )[1];
这都是治标不治本。您的问题源于您正在使用另一个愚蠢的 DBI-wrapper[1]。没有你的包装你可以简单地做
my ($val) = $dbh->selectrow_array("...");
- 为什么每个人都坚持编写使访问数据库更加困难的包装器?如果你想更早地进行数据库访问,不要创建一个只执行 SQL 语句的接口——DBI 已经做得很好——创建一个执行特定任务的接口(例如
get_x_for_y($dbh, $y)
)。
我有一个执行 SQL 查询的子例程,returns 结果作为对哈希数组的引用。
my $value = query("SELECT value from table WHERE foo=bar LIMIT 1");
如何在不知道元素键的情况下从唯一的哈希中提取第一个值?
如果你知道密钥,那就是
query("...")->[0]{$key}
但你不知道钥匙,所以我们必须抓住它。问题是散列的元素没有排序。您可以获取 一个密钥,但没有 第一个密钥。但看起来你在散列中只有一个元素,所以下面的方法就可以了:
my ($val) = values(%{ query("...")->[0] });
-or-
my $val = ( values(%{ query("...")->[0] }) )[0];
-or-
my $val = ( %{ query("...")->[0] } )[1];
这都是治标不治本。您的问题源于您正在使用另一个愚蠢的 DBI-wrapper[1]。没有你的包装你可以简单地做
my ($val) = $dbh->selectrow_array("...");
- 为什么每个人都坚持编写使访问数据库更加困难的包装器?如果你想更早地进行数据库访问,不要创建一个只执行 SQL 语句的接口——DBI 已经做得很好——创建一个执行特定任务的接口(例如
get_x_for_y($dbh, $y)
)。