В моем Perl-скрипте я использовал условие if ($a == undef)
, я думал, что это то же самое, что и if (not defined $a)
, где $a
— это строка, прочитанная из CSV-файла. Однако я заметил, что некоторые строковые значения ("", " ", "0", "-0", "+0", "@", "a"
и многие другие пробелы и специальные символы) определены, но также и undef
. Если undef
предназначен только для числовых значений, он должен передавать "0"
, "+0"
и "-0"
. Кто-нибудь может объяснить? Теперь я понимаю, что не должен использовать if ($a == undef)
вместо if (not defined $a)
.
Мой тестовый код:
@a_array = ("-1", "-0", "0", "+0", "1", "", " ", "@", "a", "\$", "-");
undef $a;
test_a();
foreach $a (@a_array) {
$len_a = length($a);
test_a();
}
sub test_a {
if (defined $a) { print "a = $a is defined; "} else {print "a = $a not defined; "};
if ($a == undef) { print "a = $a (== undef); "} else {print "a = $a (!= undef); "};
if (length($a) > 0){ print "length of a is $len_a > 0 \n"} else {print "length of a is $len_a !> 0 \n"};
}
use strict; use warnings;
. Не используйте в качестве примера $a, рассмотрите$x
и$y
. - person Grinnz   schedule 07.02.2020test_a
sub должен принимать$a
в качестве аргумента (просто назван лучше). - person zdim   schedule 07.02.2020