Значение null в Perl

В некоторых языках программирования существует специальное значение null. Например, в JavaScript можно присвоить null переменной:

var a = null;

Так же null — это одно из возможных значений в JSON:

{
  "a": null
}

А еще NULL бывает значением в базе данных:

mysql> select null;
+------+
| NULL |
+------+
| NULL |
+------+
1 row in set (0.00 sec)

Null означает отсутствие значения.

В языке программирования Perl нет значения которое называется null. Можно написать код который пытается присвоить значение null переменной:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $a = null;

Но выполнение этого кода выдаст ошибку:

Bareword "null" not allowed while "strict subs" in use at script.pl line 6.
Execution of script.pl aborted due to compilation errors.

В языке программирования Perl используется специальное значение undef которое означает отсутствие значения. Это то же самое что и null, но только с другим названием.

Есть разница между тем как работает JavaScript и Perl. В JavaScript если определить переменную, но не присвоить ей значение, то ее значение будет undefined. А дальше ей уже можно присвоить null. Perl работает проще. В Perl нет разных значений undefined и null, в Perl есть только одно специальное значение undef.

null в JSON и Perl

При сериализации Perl структуры данных в JSON значения undef будут преобразованы в null значения в JSON. Вот пример кода:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use JSON::PP;

my $data = {
    a => undef,
};

print encode_json($data);

Этот код выведет на экран {"a":null}.

И наоборот, если разворачивать JSON в Perl структуру, то значения null будут заменены на undef:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use JSON::PP;
use Data::Dumper;

print Dumper decode_json('{"a":null}');

Программа выведет на экран:

$VAR1 = {
          'a' => undef
        };

Связанные темы

Другие статьи