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,否则返回默认值