Какова роль "* *" в этом Perl-скрипте? - PullRequest
0 голосов
/ 26 апреля 2018

есть следующий perl-скрипт:

echo 'eval{print "Just ";} * * {print "Another ";} * * {print "Perl ";} * * {print "Hacker\n";}' | perl

и более вариантов:

echo '@${print "Just ";} * * {print "Another ";} * * {print "Perl ";} * * {print "Hacker\n";}' | perl

echo '$${print "Just ";} * * {print "Another ";} * * {print "Perl ";} * * {print "Hacker\n";}' | perl

echo 'do{print "Just ";} * * {print "Another ";} * * {print "Perl ";} * * {print "Hacker\n";}' | perl

echo '$#{print "Just ";} * * {print "Another ";} * * {print "Perl ";} * * {print "Hacker\n";}' | perl

Скажите, пожалуйста, какова роль "* *"? (Это также работает, если * * изменить на & &.)

1 Ответ

0 голосов
/ 26 апреля 2018

Первая * каждой пары является умножением; вторая - глобальное разыменование. Так что ничего особенного.

С & & первое - побитовое, а второе - разыменование подпрограммы (и вызов). Я не знаю, почему использование канонического значения true (возвращаемого print) в качестве кода ref и вызов его не является ошибкой; Я ожидал бы &{!0} с ошибкой, как &{"1"} делает с Undefined subroutine &main::1; вместо этого, кажется, нет.

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