我是Perl的新手,我对其变量范围的工作原理感到困惑.我正在尝试从MySQL查询的结果创建一个Hashes数组.
以下代码按预期工作,不使用严格
my %hash = ();
while (my %hash = %{$qhand->fetchrow_hashref()} ) {
push(@results, {%hash});
}
Run Code Online (Sandbox Code Playgroud)
但是当启用strict时会产生以下错误:
不能在[filename]第XX行(while语句的行)中使用未定义的值作为HASH引用.
有人能告诉我,我做错了什么,严格的相应规则是什么,我是炫耀吗?
你违反了严格的refs部分.当您尝试使用非引用值作为引用时,Perl想要创建一个"符号引用",这通常不是您想要的,尽管它默默地继续程序(可能不是"工作",而是继续).通过启用限制,您可以捕获这些情况.
在您的示例和Jonathan的回答中,看起来您正在做很多杂技来撤消哈希引用,只是为了再次使它们成为哈希引用.您是否有理由不将其作为哈希引用?
while( my $href = $qhand->fetchrow_hashref ) {
push @results, $href;
}
Run Code Online (Sandbox Code Playgroud)
并且,如果您只想将所有结果作为哈希引用,那么有一个DBI方法,因此您可以跳过while循环:
my $results_array_ref = $qhand->fetchall_arrayref( {} );
Run Code Online (Sandbox Code Playgroud)