【问题标题】:How can I print a literal 'null' for undefined values in Perl?如何在 Perl 中为未定义的值打印文字“null”?
【发布时间】:2009-02-23 04:35:26
【问题描述】:

我正在运行一个查询“描述表”,它为“默认”列返回“空”值。但是,当我尝试将值从数据库打印到 HTML 表时,它不会打印“null”。它总是空白。

这就是我从数据库中存储数据的方式:

@nulls = ();

while (($null) = $sth1->fetchrow_array)
    {
    push (@nulls, $null);
    }

当我打印数组@nulls 的内容时,它从不打印'null' 的字面值。它始终是空白的。有没有办法克服这个问题?

【问题讨论】:

    标签: perl null undef


    【解决方案1】:

    正如 Chris J 所说,空值作为未定义值返回。

    如果您启用了警告,当您打印这些值时,您会收到“未定义的打印值”警告。使用strictwarnings 附注可以节省大量调试时间。 diagnostics pragma 为标准警告和致命错误添加了额外的解释性文本。

    捕获和替换来自数据库的 NULL 值非常容易:

    use strict;
    use warnings;
    
    my @nulls = ();
    while ((my $null) = $sth1->fetchrow_array)
        {
                # before perl 5.10: use the ternary operator.
                push @nulls, defined $null ? $null : 'NULL';
    
                # perl 5.10 adds the defined-or operator: //
                push @nulls, $null // 'NULL';
        }
    

    或者您可以按照上面显示的相同方式构建您的@nulls 数组,然后在显示时更改空值。

    my @pre_5_10  = map { defined $_ ? $_ : 'NULL' } @nulls;
    my @perl_5_10 = map { $_ // 'NULL' } @nulls;
    

    【讨论】:

      【解决方案2】:

      http://metacpan.org/pod/DBI 开始,它将返回 null 值作为 'undef'。

      【讨论】:

        【解决方案3】:

        我不使用 Perl,但在我使用过的所有其他语言中,您必须测试 null 的值。如果为 null,则打印出字符串字面量“null”。

        【讨论】:

        • 也不是 Perl 人,但在我使用的语言中,数据库中的“null”与语言中的“null”不同。因此,应注意测试数据库“null”值而不是语言“null”值。
        • DBI 确实在数据库空值和 Perl 的 undef 值之间进行一致的映射。
        【解决方案4】:

        您没有说明您使用的是什么数据库,但如果您不介意非便携式解决方案(例如在 Oracle 中),则可以在 SQL 级别进行:

        select NVL(some_column, 'NULL')
        from some_table
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-02-07
          • 1970-01-01
          • 1970-01-01
          • 2022-06-27
          • 1970-01-01
          • 1970-01-01
          • 2022-11-12
          • 2011-03-13
          相关资源
          最近更新 更多