我想在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";
}
发布于 2019-06-24 09:41:14
哈希数组实际上不包含哈希值,而是包含对哈希值的引用。这一行:
%row = $records[$index];
使用一个条目分配%行。关键是标量:
{'id' => 1, 'firstName' => 'Jim'},
这是对哈希的引用,而值为空。
你真正想做的是:
$row = $records[$index];
$row->{'firstName'};
要不然:
$row = %{$records[$index];}
$row{'firstName'};
https://stackoverflow.com/questions/-100001271
复制相似问题