我想在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将其打印成人类可读(和Perl-parsable)形式来获益.
嵌套数据结构包含哈希引用,而不是哈希.
# 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将其打印成人类可读(和Perl-parsable)形式来获益.
哈希数组实际上不包含哈希值,而是包含对哈希值的引用.这一行:
%row = $records[$index];
使用一个条目分配%行.关键是标量:
{'id' => 1, 'firstName' => 'Jim'},
这是对哈希的引用,而值为空.
你真正想做的是:
$row = $records[$index]; $row->{'firstName'};
要不然:
$row = %{$records[$index];} $row{'firstName'};