这段代码是如何工作的?
#!/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", ">>>", ">>", ">", ""
,并将它们全部等长地隔开,并附加一个星号和一个“Shift Out”(回车后的字符)。第三行将项目5到1(按此顺序)追加到该列表,因此它将是
">>>E!)", ">>>E)", ">>>E", ">>>", ">>", ">", "", ">", ">>", ">>>", ">>>E"
。该映射将所有字符减一,从而创建诸如
8===D ()
的元素。第二个循环仅每0.25秒循环打印列表中的元素。回车使它们彼此覆盖,从而可以看到动画。最后两行从未到达,因此是虚假的。
关于perl - 这种混淆的Perl代码如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2319770/