Jak zbudowany jest program w Perlu?

Program w Perlu składa się z kilku elementów. Poniżej przedstawiamy listę części typowych dla każdego programu w Perlu:

"Shebang"

Linia zwana "shebang" jest pierwszą linią każdego programu w Perlu. Informuje ona system operacyjny, pod jaką lokalizacją znaleźć można kompilator Perla, aby móc go uruchomić.

Przykład:

  #!/usr/bin/perl

Wymagane biblioteki

Nasz program może do uruchomienia wymagać specjalnych dodatkowych plików lub bibliotek perlowych, czy też modułów. Na początku programu definiujemy więc wszelkie zewnętrzne pliki i zmuszamy program, by je wywołał. Biblioteki i moduły to w praktyce to samo. Moduły mogą być bardzo użyteczne, eliminując konieczność pisania ponownie wielu linii kodu. Poniższe przykłady odwołują się często do cgi-lib.pl. Jest to popularny parser formularzy CGI, z którego korzysta wielu programistów. Eliminuje on konieczność samodzielnego tworzenia procesora formularzy w każdym skrypcie i bardzo upraszcza przetwarzanie formularzy. Istnieje wiele modułów obsługujących przeróżne funkcje. Są więc np. takie, które zwracają prawdziwe losowe liczby, czy też umożliwiają wysyłanie poczty elektronicznej zakodowanej w MIME.

Przykład:

  require "cgi-lib.pl";

Globalne deklaracje zmiennych

Każdy dobry, efektywny programista zawsze na początku programu deklaruje istotne zmienne, które są później wielokrotnie w programie wykorzystywane. Dzięki temu skrypt jest bardziej zrozumiały.

Serce programu

Główny kod programu to praktycznie jego najważniejsza część. Stąd wywoływane są podprogramy i tutaj podejmuje się decyzje, co konkretnego program ma robić. Tutaj także przetwarzamy wszelkie dane wejściowe i produkujemy wyjściowe.

Podprogramy

Podprogramy to narzędzie bardzo istotne dla każdego programisty. Najłatwiej zdefiniować je jako "programy w programach", czy też "mini-programy". Pozwalają one na tworzenie bardzo efektywnych skryptów, możemy im bowiem "zlecić" typowe, często wykonywane przez program działania unikając niepotrzebnych powtórzeń fragmentów kodu. Aby wykonać te działania wystarczy potem jedynie wywołać dany podprogram, zamiast kopiować i wklejać dany fragment logiki programu za każdym razem, kiedy chcemy wykonać dane zadanie. Redukuje to liczbę linii w skrypcie, a przede wszystkim ułatwia późniejsze zrozumienie i modyfikacje kodu.

Przykład:

  sub hello {
    print "Hello, Word....\n";
  }

Ten podprogram jest wywoływany z "serca" programu następującą komendą:

  &hello;

Jeśli więc podsumujemy omówione fragmenty kodu, przykładowy, bardzo prosty program w Perlu wyglądać będzie następująco:

  #!/usr/bin/perl
  print "Content-type: text/html\n\n";
  print "<html><head>\n";
  print "<title>Hello, world!</title></head>\n";
  print "<body bgcolor=\"#FFFFFF\" text=\"#000000\">\n";
  print "<h1>Hello, world!</h1>\n";
  print "</body></html>\n";

Jedyną funkcją powyższego programu jest wyświetlenie w przeglądarce tekstu "Hello World", który wyświetlony zostanie z pomocą czcionki zdefiniowanej jako nagłówek pierwszego poziomu (H1).

Druga linia programu, po linii "shebang", zawiera: print "Content-type: text/html\n\n";. Jest to bardzo ważny fragment kodu, który informuje przeglądarkę o fakcie, że wysyłany do niej kod to HTML. W przeciwnym wypadku przeglądarka zinterpretowałaby HTML jako normalny tekst i nie przetworzyła go w prawidłowy sposób, a jedynie wyświetliła komendy HTML.

Należy także zauważyć, że przed znakiem cudzysłowu w HTML-u umieszczono \. Jest to warunek konieczny do tego, by prawidłowo interpretować znaki specjalne. Komendy print zawierają tekst w cudzysłowach. Jeśli wstawilibyśmy znak cudzysłowu w kodzie HTML bez zastosowania znaku \, kompilator potraktowałby cudzysłów jako koniec tekstu będącego parametrem komendy print. To z kolei spowodowałoby wyświetlenie informacji o błędzie. Inne znaki specjalne, które muszą być poprzedzane znakiem \ to $, @ i \. Aby wykorzystać je w tekście, trzeba poprzedzić je \: \$, \@, \\. Należy o tym pamiętać, kiedy jako parametr podajemy adres e-mail. Ułatwi to znalezienie błędów w skrypcie.

Istnieje jednak inny, ciekawszy sposób na uniknięcie tego problemu (przynajmniej problemu cudzysłowów). Wymaga to wykorzystania pewnej ciekawej właściwości języka Perl, parametru qq. Poniżej prezentujemy przykład, jak parametr ten wykorzystać:

  print qq~
    <html><head>
    <title>Hello, world!</title></head>
    <body bgcolor="#FFFFFF" text="#000000">
    <h1>Hello, world!</h1>
    </body></html>
  ~;

Prawidłowa składnia wykorzystania qq to qq<znacznik>. <znacznik> to znak, który określa początek i koniec ciągu parametrów tekstowych. Zamiast korzystać z cudzysłowa jako znacznika odseparowującego parametr tekstowy w komendzie print tu korzystamy ze znaku tyldy (~). Metodę tę można stosować też przy definicji zmiennych. Zamiast:

  $variable = "<body bgcolor=\"#FFFFFF\" text=\"#000000\">";

stosujemy

  $variable = qq~<body bgcolor="#FFFFFF" text="#000000">~;

Metoda ta jest bardzo przydatna, gdy pracujemy na większych fragmentach kodu HTML.