我对 Perl 很陌生,我对它的变量作用域的工作原理感到困惑。 我正在尝试根据 MySQL 查询的结果创建一个哈希数组。
以下代码按预期工作,无需使用严格
my %hash = ();
while (my %hash = %{$qhand->fetchrow_hashref()} ) {
push(@results, {%hash});
}
但是当启用严格时,会产生以下错误:
无法在 [文件名] 第 XX 行(while 语句的行)使用未定义的值作为 HASH 引用。
有人可以告诉我我做错了什么以及我所炫耀的严格的相应规则是什么吗?
最佳答案
您违反了 strict 的 refs
部分。当您尝试使用非引用值作为引用时,Perl 想要创建一个“符号引用”,这通常不是您想要的,尽管它默默地继续程序(可能不是“工作”,而只是继续)。通过启用限制,您可以捕获这些情况。
在您的示例和乔纳森的回答中,看起来您正在做很多杂技来撤消哈希引用,只是为了使它们再次成为哈希引用。您是否有理由不将其保留为哈希引用?
while( my $href = $qhand->fetchrow_hashref ) {
push @results, $href;
}
而且,如果您只想获取所有结果作为哈希引用,可以使用 DBI 方法,这样您就可以跳过 while
循环:
my $results_array_ref = $qhand->fetchall_arrayref( {} );
关于perl - Perl 变量作用域在严格模式下的 while 循环中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3884076/