Moduł Acme::Palindrome
Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowaObsługa modułu Acme::Palindrome
O czym to jest
Moduł ten służy do odwracania kodu źródłowego programu. Można w ten sposób zagmatwać wygląd prostego programu (o dużym projekcie nie wspominając;) i uczynić go bardzo nieczytelnym.
Opis działania
Przykład działania
use Acme::Palindrome;
print "Linia nr 1\n";
print "Linia nr 2\n";
Pierwsze uruchomienie takiego programu spowoduje odwrócenie kodu źródłowego. Program należy teraz czytać od końca, od prawej do lewej. Kod powyższego programu będzie wyglądał tak:
use Acme::Palindrome;
;"n\2 rn ainiL" tnirp
;"n\1 rn ainiL" tnirp
Powyższy kod będzie działał tak samo jak przed odwróceniem.
Możliwe błędy
Moduł Acme::Palindrome 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
Program z modułem Acme::Palindrome zaczyna działanie od otworzenia samego siebie i zapisania całej swojej zawartości do tablicy. Następuje sprawdzenie, czy program został już swoim palindromem, czy nie. Ta wydawałoby się trudna do sprawdzenia rzecz została rozwiązana w bardzo prostu sposób. Mianowicie, moduł zazwiera zmienną $TIE = " \t"x8;. Program, który został już pomyślnie odwrócony posiada linię (następna po use Acme::Palindrome;) zawierającą 8 spacji i 8 tabulacji.
Jeżeli jest to pierwsze uruchomienie programu funkcja is_forward to wykryje i spowoduje rozpoczęcie odwracania. Porgram zostanie otwarty do zapisu. W pierwszej lini zapisane zostanie use Acme::Palindrome;, w drugiej zawartość zmiennej $TIE, a dalej korzystając z funkcji palindrome odwracany jest cały program. Funkacja ta korzysta z zapisanego wcześniej kodu programu odczytuje pojedyńcze linie, zaczynając od ostatniej. Tak wczytana linia zamieniana jest na swoje lustrzane odbicie za pomocą wbudowanej perlowej funkcji reverse.
Jeśli program z Acme::Palindrome był juz uruchomiony i zawiera magiczną linijkę z $TIE funkcja is_backward zwraca prawde co powoduje uruchomienie procedury odwrotnej niż w przypadku odwracania programu. Korzystając z polecenia eval oraz wspomnianej wcześniej funkcji palindrome wykonywany jest nasz perlowy kod.
Dlaczego to nie działa !?! - czyli możliwe sytuacje błędne
Jeżeli otwarcie kodu źródłowego jest niemożliwe, program kończy działanie niepowodzeniem wypisyjąc komunikat: Can't reverse 'nazwa_naszego_wypasionego_programu'. Również brak praw zapisu do pliku z programem powoduje zaakończenie działania i wypisuje komunikat: Cannot reverse 'nazwa_naszego_wypasionego_programu'.
Dodatkowe informacje
Dokumentacja CPAN:
http://search.cpan.org/~cwest/Acme-Palindrome-0.1/lib/Acme/Palindrome.pm
Kontakt i informacje o autorze opracowania
Autor: Z. L.
Email: zbyszek84@gmail.com