значение undef и его печать

Я впервые использую Perl.

В потоках Perl возвращаемое значение подпрограммы threads->exit() равно значению undef, если контекст является скалярным.

#!/usr/bin/perl
use threads;

$t=threads->create({"context"=>"scalar"},
                    sub { threads->exit();});
$re = $t->join();
print "##################\n";
print "$re\n\n";
print "##################\n";
print (undef) . "TES\n";
print "##################\n"

Результат:

##################


##################
##################

Почему в print "$re\n\n"; печать выполняется, а в print (undef) . "TES\n"; нет? Хотя $re это undef.

и я сделал тест, чтобы убедиться, что $re не определено или нет.

#!/usr/bin/perl
use threads;

$t=threads->create({"context"=>"scalar"},
                    sub { threads->exit();});
$re = $t->join();
print "##################\n";
print "$re\n\n" if ! defined $re;
print "##################\n";
print (undef) . "TES\n";
print "##################\n"

и у меня выходит тот же выход.


person Mahmoud Emam    schedule 02.10.2013    source источник


Ответы (1)


print (undef) . "TES\n";

такой же, как

(print (undef)) . "TES\n";

поэтому вы объединяете результат print со строкой.

То, что вы хотите, это

print ((undef) . "TES\n"); # or print undef() . "TES\n";
person mpapec    schedule 02.10.2013
comment
или просто print undef . "TES\n"; :) - person friedo; 02.10.2013
comment
@фридо Warning: Use of "undef" without parentheses is ambiguous.. - person mpapec; 02.10.2013
comment
@mpapec, который отключается с помощью undef() - person ikegami; 02.10.2013
comment
@friedo, print undef() . "TES\n"; избежал бы предупреждения. - person ikegami; 02.10.2013
comment
@ikegami кажется, что в обоих примерах используются круглые скобки - person mpapec; 02.10.2013
comment
@mpapec, что это значит? Мой комментарий был ответом на ваш комментарий к Фридо. - person ikegami; 02.10.2013