这段代码是如何工作的?
#!/usr/bin/perl
$i=4;$|=@f=map{("!"x$i++)."K$_^\x{0e}"}
"BQI!\\","BQI\\","BQI","BQ","B","";push
@f,reverse@f[1..5];@f=map{join"",undef,
map{chr(ord()-1)}split""}@f;{;$f=shift@
f;print$f;push@f,$f;select undef,undef,
undef,.25;redo;last;exit;print or die;}
最佳答案
让我们先把这个通过 perltidy
$i = 5;
$| = @f = map { ("!" x $i++) . "9$_*\x{0e}" } ">>>E!)", ">>>E)", ">>>E", ">>>", ">>", ">", "";
push @f, reverse @f[ 1..5 ];
@f = map {
join "",
map { chr(ord() - 1) }
split //
} @f;
{
$f = shift @f;
print $f;
push @f, $f;
select undef, undef, undef, .25;
redo;
last;
exit;
print or die;
}
第一行很明显。
第二行列出一个列表
">>>E!)", ">>>E)", ">>>E", ">>>", ">>", ">", ""
, 并将它们全部分隔为等长,并附加一个星号和一个“移出”(回车后的字符)。第三行将项目 5 到 1(按该顺序)附加到该列表中,因此它将是
">>>E!)", ">>>E)", ">>>E", ">>>", ">>", ">", "", ">", ">>", ">>>", ">>>E"
.map 将所有字符减一,从而创建像
8===D ()
这样的元素。 .第二个循环只是每 0.25 秒在循环中打印列表中的元素。回车使它们相互覆盖,从而看到动画。最后几行永远不会到达,因此是假的。
关于perl - 这个混淆的 Perl 代码是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2319770/