Moduł Acme::Bleach
Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowaO czym to jest
Moduł ten służy do utrzymania naprawde czystego kodu. Wystarczy na początku naszego programu napisać use Acme::Bleach i uruchomić, a nasz kod źródłowy stanie się niezrozumiały nawet dla największych perlowych wyadaczy;) Ten wybielacz nie zawiera chloru, więc jest całkowicie bezpieczny;) (no prawie, ale o tym za chwile).
Opis działania
use Acme::Bleach;
print "Hello world";
Pierwsze uruchomienie takiego programu spowoduje wyczyszczenie kodu ze zbędnych elementów:) Teraz nasz program będzie wyglądał tak:
use Acme::Bleach;
Oprócz widocznej pojedyńczej lini, program zawiera teraz ciąg spacji i tabulacji (patrz niżej). Powyższy kod będzie działał tak jak to zaplanowaliśmy.
Możliwe błędy
UWAGA: Używanie modułu Acme::Bleach może spowodować wyczyszczenie kodu źródłowego programu. Przed rozpoczęciem eksperymentów z tym modułem należy stworzyć kopie zapasową programu!
Moduł Acme::Bleach nie zadziała poprawnie, gdy nie będzie mógł modyfikować pliku źródłowego programu
Jak to działa
Jak to działa - czyli perlowa magia
Moduł Acme::Bleach zaczyna swoje działanie od otwarcia programu, w którym został użyty. W przypadku braku możliwości zapisu do pliku moduł ten może nas niemiło zaskoczyć i wyczyścić nasz mozolnie napisany kod!
Moduł zazwiera zmienną $tie = " \t"x8;. Program, który został już pomyślnie "wybielony" posiada linię (następna po use Acme::Bleach;) zawierającą 8 spacji i 8 tabulacji oraz pierwszy zakodowany znak.
Jeżeli jest to pierwsze uruchomienie programu funkcja dirty to wykryje i spowoduje rozpoczęcie "rozjaśniania" kodu. Zostanie uruchomiona funkcja whiten. Funkcja ta korzysta z perlowej funkcji unpack (przykład działania poniże) i z wyrażenia regularnego zamieniającego 0 na spacje, a 1 na znaki tabulacji.
$x = unpack "b*","A";
print "$x";
Zmieniony w ten sposób kod jest zapisywany i czeka na "rozjaśnienie" aż do następnego uruchomienia.
Ponowne uruchomienie programu powoduje iż funkcja dress rozpoznaje "wybielony" program. Moduł Acme::Bleach posaida funkcję brighten, która korzystając z wyrażenia regularnego zamieniającego spacje i tabulacje na 0 i 1. Następnie funkcja ta wykonuje polecenie pack (czyli odwrotność unpack). W ten sposób otrzymujemy zdekodowany kod programu. Kombinacja funkcji brighten oraz polecenia eval powoduje wykonanie naszego programu.
Dlaczego to nie działa !?! - czyli możliwe sytuacje błędne
Jeżeli otwarcie lub zapis kodu źródłowego jest niemożliwe, program kończy
działanie niepowodzeniem wypisyjąc komunikat:
Cannot bleach 'nazwa_naszego_wypasionego_programu'.
Dodatkowe informacje
Zobacz również:
Inne ciekawe moduły do gmatwania kodu programu
Dokumentacja CPAN:
- WWW: Acme::Bleach
Kontakt i informacje o autorze opracowania
Autor: Z. L.
Email: zbyszek84@gmail.com