Что делает эта строка perl из «обесцвеченного» файла?

У меня есть некоторые файлы perl, которые были «обесцвечены» (не знаю, было ли это из ACME :: Bleach , или что-то подобное). Не очень хорошо владея perl, я хотел бы понять, что делает однострочный файл, который запускает файл, для декодирования следующих пробелов:

$_=<<'';y;\r\n;;d;$_=pack'b*',$_;$_=eval;$@&&die$@;$_

Остальная часть файла - это символы пробелов, и файл сам по себе исполняется ( он находится в каталоге / bin).

[Решение], спасибо @JB.

Часть pack кажется наиболее сложной, и мне потребовалось время, чтобы заметить, что происходит. Pack берет младший бит только из каждых 8 символов и распаковывает его как двоичный символ с прямым порядком байтов. Таким образом, табуляция становится нулем, а пробел - единицей.

    '\t\t   \t  ' => '#'
in binary:
    00001001 00001001 00100000 00100000 00100000 00001001 00100000 0100000
every LSB:
    1 1 0 0 0 1 0 0
convert from from big-endian format:
    0b00100011 == 35 == ord('#')
7
задан JimB 26 September 2011 в 17:26
поделиться