有一个下一个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
请说,“* *”的角色是什么? (它也有效,如果* *改为&&。)
答案 0 :(得分:3)
每对的第一个*
是乘法;第二个是全局解除引用。所以没什么用的。
使用& &
,第一个是按位,第二个是子程序取消引用(和调用)。我不知道为什么使用规范的真值(由print返回)作为代码引用并调用它不会出错;我希望&{!0}
出现&{"1"}
与Undefined subroutine &main::1
相同的错误;相反,它似乎是一个无操作。