Programiranje u Perl-u
Sadrzaj:
- Osnove
- Unix ili Linux
- Windows
- CGI pomocu Perl-a
- 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
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>
|
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
Copyright 1999 Hacko
Park
|