当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何从Perl中的数组中获取哈希值?》经验,为你挑选了2个好方法。

我想在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";

} 

Commodore Ja.. 23

嵌套数据结构包含哈希引用,而不是哈希.

# Will work (the -> dereferences the reference)
$row = $records[$index];
print "This will work: ", $row->{firstName}, "\n";

# This will also work, by promoting the hash reference into a hash
%row = %{ $records[$index] };
print "This will work: ", $row{firstName}, "\n";

如果你曾经有过深入的Perl数据结构,你可以通过使用Data :: Dumper将其打印成人类可读(和Per​​l-parsable)形式来获益.



1> Commodore Ja..:

嵌套数据结构包含哈希引用,而不是哈希.

# Will work (the -> dereferences the reference)
$row = $records[$index];
print "This will work: ", $row->{firstName}, "\n";

# This will also work, by promoting the hash reference into a hash
%row = %{ $records[$index] };
print "This will work: ", $row{firstName}, "\n";

如果你曾经有过深入的Perl数据结构,你可以通过使用Data :: Dumper将其打印成人类可读(和Per​​l-parsable)形式来获益.



2> Nathan Fellm..:

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

%row = $records[$index];

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

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

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

你真正想做的是:

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

要不然:

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

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有