如何从Perl中的数组中获取哈希值?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

我想在perl中编写一个小的“DBQuery”函数,所以我可以使用一行发送一个SQL语句并接收一个哈希数组,即一个记录集。但是,我遇到了Perl语法的问题(可能还有一些奇怪的指针/引用问题),这阻止了我从数据库中获取哈希的信息。下面的示例代码演示了该问题。

我可以使用以下语法从数组中的哈希中获取数据“Jim”:

print $records[$index]{'firstName'}

返回“吉姆”

但是如果我首先将数组中的哈希记录复制到它自己的哈希变量中,那么奇怪的是我无法再访问该哈希中的数据:


    %row = $records[$index];
    $row{'firstName'};

返回“”(空白)

以下是显示问题的完整示例代码。任何帮助表示赞赏:


my @records = (
   {'id' => 1, 'firstName' => 'Jim'},
   {'id' => 2, 'firstName' => 'Joe'}
);
my @records2 = ();

$numberOfRecords = scalar(@records);
print "number of records: " . $numberOfRecords . "\n";
for(my $index=0; $index < $numberOfRecords; $index++) {

   #works
   print 'you can print the records like this: ' . $records[$index]{'firstName'} . "\n";

   #does NOT work
   %row = $records[$index];
   print 'but not like this: ' . $row{'firstName'} . "\n";

} 
提问于
用户回答回答于

你在数组中实际拥有的是hashref,而不是hash。如果你不理解这个概念,它可能值得阅读perlref文档。

获取你需要做的哈希

my %hash = %{@records[$index]};

例如。

my @records = (
     {'id' => 1, 'firstName' => 'Jim'}, 
     {'id' => 2, 'firstName' => 'Joe'}
  );

  my %hash = %{$records[1]};

  print $hash{id}."\n";

虽然。我不确定你为什么要这样做,除非它用于学术目的。否则,我建议在DBI模块中使用fetchall_hashref / fetchall_arrayref,或者使用Class :: DBI之类的东西。

用户回答回答于

哈希数组实际上不包含哈希值,而是包含对哈希值的引用。这一行:

%row = $records[$index];

使用一个条目分配%行。关键是标量

   {'id' => 1, 'firstName' => 'Jim'},

这是对哈希的引用,而值为空。

你真正想做的是:

$row = $records[$index];
$row->{'firstName'};

要不然:

$row = %{$records[$index];}
$row{'firstName'};

扫码关注云+社区

领取腾讯云代金券