【问题标题】: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。返回值是否在没有明确分配的情况下存储在可访问的地方?蒂姆,如果它存放在某个地方肯定会很方便!

【问题讨论】:

    标签: perl default dbi


    【解决方案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 对象中的某个位置。
    猜你喜欢
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 2020-12-03
    相关资源
    最近更新 更多