fetchrow_hashref 是不是返回默认值?

Posted

技术标签:

【中文标题】fetchrow_hashref 是不是返回默认值?【英文标题】:Does fetchrow_hashref return into a default value?fetchrow_hashref 是否返回默认值? 【发布时间】:2021-11-16 00:17:20 【问题描述】:

我正在尝试这样写:

my $q='select name as N from names';
my $sth=$dbh->prepare( $q ) ;
$sth->execute;
$test-> $_->N  = 1 while $sth->fetchrow_hashref();

但是 $_ 是 undef。返回值是否在没有明确分配的情况下存储在可访问的地方?蒂姆,如果它存放在某个地方肯定会很方便!

【问题讨论】:

【参考方案1】:

while 循环并不总是隐式地为默认运算符 $_ 赋值。如perldoc perlsyn中所述:

如果一个while语句的条件表达式是基于任何一个 一组迭代表达式类型,然后它会得到一些神奇的处理。 受影响的迭代表达式类型是 readline、 输入运算符、readdir、glob、通配符运算符和 每个。如果条件表达式是这些表达式类型之一, 那么迭代运算符产生的值将是隐式的 分配给 $_。

(...否则不是,这里隐含)

要做你想做的,你需要做的

... while $_ = $sth->fetchrow_hashref();

或者更好的是,使用惯用语法:

while (my $row = $sth->fetchrow_hashref()) 
    $test-> $row->N  = 1;

【讨论】:

不——我并不是要暗示 whlle 加载了 $_。我的意思是 fetchrow_hashref() 的 RV 是否降落在某个地方?有了过多的 perlvar,我希望 Tim 把它偷偷溜到某个地方......所以我也许可以做 $test-> $TIMS_SCRATCHPAD->N = 1 @MiltonEarnestZilmer 否。如果要存储在任何地方,它将是$_while 循环没有特殊的默认变量,这很愚蠢。它只是检查函数调用的真实性并丢弃返回值。 而且,当您知道如何直接访问变量时,访问一些秘密的隐藏变量有什么意义?你的问题对我来说毫无意义。它可能存在于您创建的某个 DBI 对象中的某个位置。

以上是关于fetchrow_hashref 是不是返回默认值?的主要内容,如果未能解决你的问题,请参考以下文章

Presto 检查是不是为 NULL 并返回默认值(NVL 模拟)

猫鼬返回默认值而不是空值

检查表1中是不是存在记录的优化方法。如果没有则检查表2,否则返回默认值

为啥 main 的默认返回值为 0 而不是 EXIT_SUCCESS?

如何判断 Map 是不是有默认值?

在 JSON.Net 中处理不存在的 JSON 令牌如何返回默认值而不是抛出异常