Mam niektóre pliki perla, które zostały "wybielone" (nie wiem, czy to z ACME :: Bleach, lub coś podobnego). Nie jest bardzo biegły w języku Perl, chciałbym zrozumieć, co one-liner, który uruchamia plik ma dekodować spacje, który następuje:Co robi ta linia perl z "wybielonego" pliku?
$_=<<'';y;\r\n;;d;$_=pack'b*',$_;$_=eval;[email protected]&&[email protected];$_
Reszta plik jest białe znaki, a plik jest plik wykonywalny (jest umieszczony w katalogu/bin).
[Rozwiązanie], dzięki @JB.
Część tego wydaje się najbardziej skomplikowana i zajęło mi trochę czasu, aby zauważyć, co się dzieje. Pack pobiera LSB tylko co 8 znaków i rozpakowuje je jako znak big-endian w binarnym. Tabulatory stają się więc '0, a spacje stają się' 1's.
'\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('#')
OK, myślę, że to funkcja 'packa' mnie potknęła. Czy możesz wyjaśnić, jak coś w rodzaju '\ t \ t \ t 'tłumaczy na'' # ''? – JimB
Niestety, wygląda na to, że surowe postacie mają jeszcze spasowane przestrzenie, które powinny być "tab tab sp w sp sp sp sp sp". – JimB
'tab' jest' chr (9) ', nieparzyste; 'sp' to' chr (32) ', nawet. Więc twój ciąg tłumaczy się na sekwencję bitów 1, 1, 0, 0, 0, 1, 0, 0, 0, która (najpierw LSB) to 0x23, kod ASCII dla '' # ''. (masz jeszcze trochę) –