Programiranje u Perl-u

Sadrzaj:

  1. Osnove
  2. Unix ili Linux
  3. Windows
  4. CGI pomocu Perl-a
  5. Linkovi

Osnove

Perl je mjesavina Shell-scripta i C++ pa se programeri koji su programirali u ovim jezicima lako snalaza i sa Perl-om. Perl je script jezik sto znaci da napisan program ne mora biti kompiliran da bi se mogao voziti.
Programi u Perl-u su zato uvijek "laki" jer sadrze samo tekst. Perl je pogodan za kontrolu i obradu tekstualnih fajlova pa je stoga veoma cesto koristen za CGI scriptove na Internetu. Losa strana Perl je zato sto je to script - dakle uvijek nesto sporiji od kompiliranih programa (C++,Java, Ada, Pascal itd).

top

Unix ili Linux

U Unix-u je potrebno staviti prava na fil koji sadrzi program. To se radi sa komandom chmod. Na primjer:

chmod 0755 ime_fajla.pl

tako da fajl ime_fajla.pl dobije xwrx-rx-r

Fajl mora imati path za perl na samom pocetku fajla

#!/usr/bin/perl

Ako neznate gdje vam se nalazi evaluator za Perl mozete to vidjeti sa komandom

which perl

Da bi vozili program dovoljno je da napisete ime fila u X-term-u

top

Windows

U Windows-u je potrebno asocirati .pl filove sa perl evaluatorom. To jest treba te prvo naci na Internetu Perl za Windows (besplatno) i istalirati perl na vasem sistamu. Onda u Exploeru pritisnite View - Folder Options - File Types. To pogledajte dali su filovi sa ekstenzijom .pl asocirani sa nekim programom. Ako nije onda stisnite New Type i asocirajte fajlove sa ekstenzijom .pl i .cgi sa Perl-om.
Nije tako strasno ako vam ovo ne ide od ruke jer najjednostavnije je voziti Perl programe u DOS-u. Da bi to radili dobro je da dopunite vas autoexec.bat fajl sa path-om za Perl. Na primjer:

PATH=%PATH%;C:/ime_perl_kataloga/

Da bi vozili Perl program dovoljno je da kliknete na vas .pl fajl (ako je asociran) ili da u DOS-u napisete

perl ime_programa.pl

top

CGI pomocu Perl-a

Problem danasnjeg HTML-a je sto je statican. Da bi udahnuli malo zivota u vasu Internet-stranicu morate koristiti dinamicki HTML, JavaScript ili CGI.
CGI je program koji se vozi na web-serveru i koji tom prilikom generise HTML-kod. Da bi server znao da to sto program ispisuje na Standard Output je HTML mora se prvo ispisati

Content-type: text/html

sto se u Perl-u radi pomocu sljedeceg reda koda

print "Content-type: text\/html\n\n";

Sve sto program ispise nakon ovoga na Standard Output tumaci se kao HTML. Ispis na Standard Output u perlu je obicno pomocu komande print

top


Primjer 1:

Evo jednog minimalnog CGI programa u Perl-u

#!/usr/bin/perl
print "Content-type: text\/html\n\n";
print "<HTML><HEAD>\n";
print "<TITLE>Test<\/TITLE>\n";
print "<BODY>\n";
print "<H1>Moj prvi CGI program<\/H1>\n";
print "<\/BODY>\n<\/HTML>\n";

 

koji kad se aktivira generise sljedeci HTML-kod

<HTML><HEAD>
<TITLE>Test</TITLE>
<BODY>
<H1>Moj prvi CGI program</H1>
</BODY>
</HTML>

 

To jest

Moj prvi CGI program

 

Ako pisemo odjednom vecu kolicinu teksta onda mozemo koristiti jednu olaksicu u Perl-u. Naime ovaj program u primjeru 1 se jos moze napisati na sljedeci nacin (rezultat je naravno identican)

#!/usr/bin/perl
print "Content-type: text\/html\n\n";

print << "_GRANICNIK_";

<HTML><HEAD>
<TITLE>Test</TITLE>
<BODY>
<H1>Moj prvi CGI program</H1>
</BODY>
</HTML>

_GRANICNIK_

top


Primjer 2

Sad nesto komplikovanije. Cesto je pozeljno registrirati vrijeme nekog dogadjaja. Ovaj primjer pokazuje kako se vrijeme citata sa servera. (komentari pocinju sa #)

#!/usr/bin/perl
##############################################################
# Uzimamo informacije od sistema
($sec, $min, $hour, $mday, $mon, $year, $wday, $ydat,$isdst) = gmtime();
# Pravimo listu sa imenima dana i mjeseci
@dan =("Nedjelja", "Ponedjeljak", "Utorak", "Srijeda", "Cetvrtak", "Petak", "Subota");
@mjesec =("Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec");
# Posto je nase lokalno vrijeme (Svedska,Geteborg)
# pomjereno +2 sata moramo kontrolisati sate i dane
if ($hour == 22){ 
               $hour= 0 ; 
               ++$wday;
} elsif ($hour == 23){ 
               $hour= 1 ; 
               ++$wday;
} else { 
               $hour+= 2 ;
} 

# Pravimo varijablu koja ce nositi datum.
# Mozemo je koristiti kasnije programu

$datum = "$hour:$min $dan[$wday] - $mday-$mjesec[$mon]-19$year ";
#########################################################

print "Content-type: text\/html\n\n";

print << "_VRIJEME_";

<HTML><HEAD>
<TITLE>Test za vrijeme</TITLE>
<BODY>
<H1>Vrijeme</H1>
<hr>
Sada je :
$datum
<hr>
</BODY>
</HTML>

_VRIJEME_

kad se ovaj program vozi dovije se sljedeci ispis. Na primjer:

Vrijeme


Sada je : 13:12 Ponedjeljak - 22-Mar-1999


 

top


Primjer 3

Citanje i pisanje fajlova je ono sto je po mom misljenju najvaznija mogucnost CGI-a. Evo jednog primjera u kome citamo informaciju iz jednog fajla i stvaramo novi fajl.

Ako imamo neki fajl pod imenom poslovice.txt sa sljedecim sadrzajem

0

Ko pjeva, sam u nju upada

1

Ko drugom jamu kopa, zlo ne misli

2

Pozajmljuj pare od pesimista,

3

oni ionako ne ocekuju da ce ih ikad dobit nazad

Brojevi od 0-3 su brojevi redova u fajlu poslovice.txt

#!/usr/bin/perl

# Otvaramo fajl
poslovice.txt za citanje
open (FILE,"poslovice.txt") || die "Neuspjelo citanje : $!\n";

# Uzimamo redove iz fajla u jedan array
# gdje se do nekog reda moze doci pomocu
# $LINES[broj_reda]
# (npr: $LINES[0] ima vrednost "Ko pjeva, sam u nju upada"
)
@LINES=<FILE>;

# Zatvaramo fajl
close(FILE);

# Nekad zelimo znati koliko neki fajl ima redova
# to dobijemo pomocu sljedeceg reda

$SIZE=@LINES;

# Otvori ili stvori fajl danasnja_poslovica.html
# za pisanje
open (NOVI_FAJL,">danasnja_poslovica.html") || die "$!\n";

# Ispisi to sto hoces
print NOVI_FAJL <<"_HEAD_";
<HTML>
<HEAD>
</HEAD>
<BODY>

Danasnja poslovica glasi: <HR>

$LINES[2] <BR>
$LINES[3]

</BODY>
</HTML>
_HEAD_

# Zavrsi sa pisanjem (zatvori fajl)
close (NOVI_FAJL);

Kad se ovaj program vozi stvara se fajl pod imenom danasnja_poslovica.txt sa sljedecim sadrzajem

<HTML><HEAD>
</HEAD>
<BODY>

Danasnja poslovica glasi: <HR>

Pozajmljuj pare od pesimista, <BR>
oni ionako ne ocekuju da ce ih ikad dobit nazad

</BODY>
</HTML>

 

Danasnja poslovica glasi:


Pozajmljuj pare od pesimista,
oni ionako ne ocekuju da ce ih ikad dobit nazad

top


Primjer 4

Sigurno ste se vec masu puta upisivali u guestbook, glasali ili ispunjavali neki drugi obrazac na web-u. Da bi ta informacija zapamtila, upisala u neki fil ili na neki drugi nacin obradila mora se koristiti CGI. Ovo je malo komplikovaniji dio progamiranja u Perl-u ali ja cu pokusati da to pojednostavim.

U ovom primjeru cemo napraviti jedan veoma jednostavan CGI script koji se moze koristiti za guestbook. Guestbook ima obicno dvije stranice u jednoj se upisuje poruka u drugoj se pamti sta su raniji posjetioci upisali.

Stranica koja sadrzi obrazac za upis moze (u pojednostavljenoj verziji) izgledati ovako

<html>
<head></head>
<body>

<form method="post" action="cgi-bin/guestbook.cgi" name="">

Ime <input type="text" name="ime"><br>

Poruka <textarea name="text_poruke"><br>

<input type="submit" name="upis" value="Posalji">
<input type="reset" name="submit2" value="Izbrisi">
</form>

</body>
</html>

 

Ime

Poruka

 



 

Sadrzaj guestbook.cgi

#!/usr/bin/perl
##########################################################
# Ovaj dio programa desifruje hexadecimalni kod
# i razdvaja imena formi od njihovih vrjednosti
# Ovaj dio mozete koristiti uvijek bez promjene u svim
# CGI scriptima koji rade sa obrascima
##########################################################

# Uzmi upis
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

# Raspari ime-vrjednost parove
@pairs = split(/&/, $buffer);

 foreach $pair (@pairs) {
      ($name, $value) = split(/=/, $pair); 
      # Un-Webify plus signs and %-encoding 
      $value =~ tr/+/ /; 
      $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; 
$value =~ s/<!--(.|\n)*-->//g;
if ($allow_html != 1) { $value =~ s/<([^>]|\n)*>//g; } $FORM{$name} = $value; }
##########################################################
$guestbookpath
= "/user/dtek/d96mitha/.public_html/guestbook.html";

# Citamo sadzaj guestbook.html fajla
open (FILE,"$guestbookpath") || die "Can't Open $guestbookpath: $!\n"; @LINES=<FILE>; close(FILE); $SIZE=@LINES; # Otvori fajl za pisanje open (GUEST,">$guestbookpath") || die "Can't Open $guestbookpath: $!\n"; print "Content-type: text\/html\n\n"; for ($i=0;$i<=$SIZE;$i++) { $_=$LINES[$i]; # Da bi znali gdje u fajlu da upisemo poruku stavicemo
# jedan komentar npr: <!--pocetak--> i kad dodjemo do njega
# upisacemo poruku na tom mjestu. Ostatak fajla cemo samo
# kopirati
if (/<!--pocetak-->/) {
print GUEST <<"_PORUKA_"; <!--pocetak-->
# $FORM{'ime'} ce biti zamijenjeno sa textom
# koji ste upisali u obrascu Ime

$FORM{'ime'} <br>
# $FORM{'text_poruke'} ce biti zamijenjeno sa textom
# koji ste upisali u obrascu Poruka

$FORM{'text_poruke'} <hr>
_PORUKA_

# Ako zelite da to sto ste upisali odmah vidite na ekran
print "$FORM{'ime'} <br>";
print "$FORM{'text_poruke'} <hr>";
} else {
print GUEST $_;
print $_;
}
} close (GUEST);

File guestbook.html bi mogao izgledati ovako

<html>
<head></head>
<body>

<h1>Moja knjiga gostiju</h1>

<!--pocetak-->

Hacko <br>
test poruka broj 2 <hr>

Mithat <br>
test poruka broj 1 <hr>

</body>
</html>

 

Moja knjiga gostiju

Hacko
test poruka broj 2


Mithat
test poruka broj 1


top


 

Linkovi

Perl Home Page

Perl Download Home Page

Introduction to Perl

Introduction to Perl & CGI

Perl Reference: courses