Как я могу напечатать литерал 'null' для неопределенных значений в Perl?

StackOverflow https://stackoverflow.com/questions/576536

  •  05-09-2019
  •  | 
  •  

Вопрос

Я запускаю запрос 'describe table', и он возвращает значение 'null' для столбца 'default'.Однако, когда я пытаюсь напечатать значение из базы данных в HTML-таблицу, оно не выводит 'null'.Он просто всегда пустой.

Вот как я сохраняю данные из базы данных:

@nulls = ();

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

Когда я печатаю содержимое массива @nulls он никогда не выводит буквальное значение 'null'.Он всегда пустой.Есть ли способ преодолеть эту проблему?

Это было полезно?

Решение

Как сказал Крис Джей, нулевые значения возвращаются как неопределенные значения.

Если бы у вас были включены предупреждения, вы бы получили предупреждение "неопределенное значение при печати" при печати значений.Используя strict и warnings pragmata может сэкономить много времени на отладке.В diagnostics pragma добавляет дополнительный пояснительный текст к стандартным предупреждениям и неустранимым ошибкам.

Довольно легко перехватить и заменить нулевые значения по мере их поступления из базы данных:

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 создайте массив так же, как вы показали выше, а затем измените значения null во время отображения.

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

Другие советы

От http://metacpan.org/pod/DBI , он вернет нулевые значения как 'undef'.

Я не использую Perl, но на любом другом языке, который я использовал, вы должны проверять значение на null.Если оно равно null, выведите строковый литерал "null".

Вы не говорите, какую базу данных вы используете, но вы можете сделать это на уровне SQL, если вы не возражаете против непереносимого решения, например, в Oracle:

select NVL(some_column, 'NULL')
from some_table
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top