这段代码是如何工作的?

#!/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/

10-16 05:20