fetchrow_hashref是否会将返回值存入可直接访问的默认变量?
问题解答
Perl DBI 中的fetchrow_hashref方法不会自动将返回值存入默认变量$_。只有Perl内置的部分语法结构(比如while (<STDIN>)、默认的map/grep遍历等)才会默认操作$_,第三方模块的方法普遍没有做这类隐式赋值的设计。
你遇到$_未定义的原因就是while ($sth->fetchrow_hashref())仅会判断方法返回值的真假,不会把返回值自动赋值给$_。
修复方案
你可以选择两种写法修正:
- 显式给
$_赋值,保留你的单行写法:
$test->{ $_->{N} } = 1 while $_ = $sth->fetchrow_hashref();
- 更推荐的可读性更好的写法,单独声明行变量:
while (my $row = $sth->fetchrow_hashref()) { $test->{ $row->{N} } = 1; }
内容的提问来源于stack exchange,提问作者Milton Earnest Zilmer
相关产品推荐
相关产品推荐

