Moduł Acme::Palindrome

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

Obsł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

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