Moduł Acme::Bleach

Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowa

O 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.

programPostać programu po pierwszym uruchomieniu z modułem Acme::Bleach. Podświetlone są spacje i tabulatory.

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:

Kontakt i informacje o autorze opracowania

Autor: Z. L.

Email: zbyszek84@gmail.com

Uniwersytet Gdański - Instytut Informatyki - Strona domowa - Perl - Wyklady
[c] Piotr Arłukowicz, materiały z tej strony udostępnione są na licencji GNU.