В чем разница между BAREWORD и * BAREWORD в Perl? - PullRequest
7 голосов
/ 20 сентября 2011
my $childpid = open3(HIS_IN, HIS_OUT, HIS_ERR, $cmd, @args);

my $childpid = open3(*HIS_IN, *HIS_OUT, *HIS_ERR, $cmd, @args);

Кажется, что и то и другое работает для моего приложения.

В чем разница между BAREWORD и *BAREWORD в Perl?

1 Ответ

8 голосов
/ 20 сентября 2011

Значение голого слова варьируется. В большинстве случаев голое слово - это вызов функции.

sub foo { say "Hello"; }
foo;

Иногда это строковый литерал.

$x{foo}    # $x{"foo"}

В других обстоятельствах он производит тип-глоб.

print STDOUT "foo";   # print { *STDOUT } "foo";

В этом случае

open3(HIS_IN, HIS_OUT, HIS_ERR, ...)

эквивалентно

open3("HIS_IN", "HIS_OUT", "HIS_ERR", ...)

но open3 использует эту строку в качестве имени глобуса в пакете вызывающей стороны, поэтому приведенное выше функционально эквивалентно

open3(*HIS_IN, *IS_OUT, *HIS_ERR, ...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...