P E R L

Practical Extraction and Report Language

 

 

Inštalácia a spustenie PERL CGI Príklady Linky

 

Príklady

 

Príklad 1 Príklad 2 Príklad 3 Príklad 4 Príklad 5 Príklad 6

 

 

Príklad 1 (Perl - čítanie zo súboru)

Program, ktorý otvorí súbor "subor.txt", v cykle prechádza riadky a vypisuje ich aj s ich poradovým číslom.

 

#!/usr/local/bin/perl

$file = 'subor.txt';        # meno suboru je ulozene do premennej
open(INFO, $file);          # otvorenie suboru
$cislo = 0;                 # inicializacia pocitadla riadkov
while ($riadok = <INFO>) {  # citanie riadkov suboru
  ++$cislo;                 # zvysenie pocitadla o 1
  print "$cislo $riadok";   # vypis riadku s cislom
}
close(INFO);                # zavrie subor

 

 

Príklad 2 (Perl - čítanie súboru, funkcia split)

Program, ktorý zo vstupného súboru "vstup.txt" načíta informácie o zbierke hudobných CD a vypíše ich na obrazovku.

Každému riadku súboru zodpovedá jedno CD.

Štruktúra riadku je takáto:

	Názov albumu!Meno interpreta!cena

Program má riadok rozdeliť na 3 časti (rozdeľovníkom je výkričník) a výstup na obrazovku má mať tvar:

	Album=Názov albumu   Artist=Meno interpreta   Price=cena
 

Vstupný súbor "vstup.txt":

 

Shrek!
The Best Of!Donell Jones!450.50
All That You Can't Leave Behind!U2!600.00
Ladies & Gentlemen!George Michael!520.50

 

 

#!/usr/local/bin/perl

open(FILE, "<vstup.txt");                                     # otvori vstupny subor
@lines = <FILE>;                                              # vsetky riadky suboru vlozi do pola, 
                                                                pricom kazdy riadok je jeden prvok pola
close(FILE);                                                  # zavrie subor

foreach (@lines) {                                            # prechadza riadky
  chop;                                                       # odstrani znak konca riadku
  ($album, $artist, $price) = (split(/!/));                   # rozdeli retazec (riadok) na 
                                                                3 casti pomocou fcie SPLIT, 
                                                                kde deliacim znakom je "!"
  
  $album  = "" if !defined($album);                           # ak nie je v subore dana
  $artist = "" if !defined($artist);                          # informacia, do premennych
  $price  = "" if !defined($price);                           # sa priradia prazdne stringy

  print("Album=$album   Artist=$artist   Price=$price\n");    # vypise hodnoty premennych
}

 

 

Príklad 3 (Perl - súbor, formát výpisu na obrazovku)

Program používa pri výpise na obrazovku definované formáty. Je definovaný formát pre hlavičku stránky (názvy stĺpcov Album, Artist, Price) a formát riadkov s informáciami o CD-čkách. 

 

#!/usr/local/bin/perl
################# definicia formatu hlavicky strany #####################
format STDOUT_TOP =
  Album                            Artist                        Price
  -------------------------------  ----------------------------  --------
.

################# definicia formatu samotnych dat o CD-ckach ##################
format =
  Album=@<<<<<<<<<<<<<<<<<<<<<<<<  Artist=@<<<<<<<<<<<<<<<<<<<<  Price=@##.##Sk
  $album, $artist, $price
.


open(FILE, "<vstup.txt");                                     
@lines = <FILE>;                                              
close(FILE);                                                  

foreach (@lines) {                                            
  chop;                                                       
  ($album, $artist, $price) = (split(/!/));                   
  
  $album  = "" if !defined($album);                           
  $artist = "" if !defined($artist);                          
  $price  = 0  if !defined($price);                           

  write();             # vypise hodnoty premennych, podla definovaneho formatu
}

 

 

Príklad 4 (Perl - zápis zo vstupného do výstupného súboru podľa formátov)

Program robí to isté, čo program 3, len výstup zapisuje do výstupného súboru "vystup.txt". 

 

#!/usr/local/bin/perl

format CD_REPORT_TOP =
  Album                            Artist                        Price
  -------------------------------  ----------------------------  --------
. 


format CD_REPORT =
  @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  @<<<<<<<<<<<<<<<<<<<<<<<<<<<  @##.##Sk
  $album, $artist, $price
.

open(FILE, "<vstup.txt");                                     
@lines = <FILE>;                                              
close(FILE);                                                  

open(CD_REPORT, ">vystup.txt");      # otvori vystupny subor na ulozenie 
                                       vstupu vo formate CD_REPORT

foreach (@lines) {                                            
  chop;                                                       
  ($album, $artist, $price) = (split(/!/));                   
  
  $album  = "" if !defined($album);                           
  $artist = "" if !defined($artist);                          
  $price  = 0  if !defined($price);                           

  write(CD_REPORT_TOP,CD_REPORT);    # vypise hodnoty premennych, podla definovanych formatov
}
close(CD_REPORT);                    # zatvori vystupny subor                  

 

 

Príklad 5 (CGI - metóda GET)

Na spúšťanie CGI scriptov musíme mať nainštalovaný Apache. Ak ho ešte nemáte, stiahnite si ho odtiaľ: 

http://s.ics.upjs.sk/~gotthardova/perl/download/apache.rar

 

Užívateľ vyplní polia v HTML formulári.

Stlačením tlačidla typu SUBMIT sa zavolá metóda GET, ktorá CGI scriptu "p5.pl", pošle údaje z vyplnených polí.

CGI script musí byť uložený v adresári Apache/cgi-bin.

V CGI scripte procedúra ReadParse číta dáta poslané metódou GET, vytvorí HTML stránku s výpisom týchto údajov.

ReadParse je procedúra knižnice cgi-lib.pl. Tú treba uložiť do adresára Perl/lib.

 

HTML stránka:

 

<HTML>
  <BODY>
    <Strong>Pošlite svoje údaje</Strong><br>
    <FORM ACTION="http://localhost/cgi-bin/p5.pl" METHOD="GET">
      <PRE>
        Meno:           <INPUT TYPE="text" NAME="meno"><br>
        Priezvisko:     <INPUT TYPE="text" NAME="priezvisko"><br>
        Vyber si farbu: <SELECT NAME=farba>
                          <OPTION>červená
                          <OPTION>zelená
                          <OPTION>modrá
                          <OPTION>biela
                          <OPTION>žltá
                        </SELECT>
      </PRE><hr>
      <INPUT TYPE="submit" VALUE="Poslať">
    </FORM>
  </BODY>
</HTML>

 

CGI script "p5.pl":

 

#!/usr/local/bin/perl# minimal.cgi

require "cgi-lib.pl";  # vyzaduje sa kniznica

&ReadParse(*input);    # nacita hodnoty vsetkych premennych zadanych vo formulari

print "Content-Type: text/html\n\n";
print "<HTML>\n";
print "<BODY>\n";
print "<Strong>Poslal(a) si tieto informácie:</Strong>\n";
print "<hr>\n";

print "Voláš sa <Strong>".$input{'meno'}." ".$input{'priezvisko'}.
      "</Strong> a tvoja obľúbená farba je <Strong>".$input{'farba'}."</Strong>.\n";

print "</BODY>\n";
print "</HTML>\n";

 

 

Príklad 6 (CGI - metóda POST)

CGI script overuje, či číslo, zadané užívateľom do editovacieho okna, je členom Fibonacciho postupnosti.

Takisto sa požívajú procedúry knižnice cgi-lib.pl, a to na načítanie vstupu (ReadParse), tlačenie úvodných znakov HTML (HtmlTop) a iné(PrintHeader, HtmlBot).

HTML formulár používa na odosielanie údajov metódu POST.

Script zistí, či číslo zadané na vstupe je Fibonacciho číslo a výpisom je kladná, resp. záporná odpoveď.

Takisto musí byť aj tento súbor v adresári Apache/cgi-bin.

 

CGI script:

Script spustíme v prehliadači na adrese http://localhost/cgi-bin/p6.pl

 

#!/usr/local/bin/perl

require "cgi-lib.pl";

&ReadParse(*input);
print &PrintHeader;
print &HtmlTop("Overenie, či zadané číslo je číslom Fibonacciho postupnosti");

print <<KoniecFormularu;

<FORM ACTION="$ENV{'REQUEST_URI'}" METHOD="POST">
  Napíš číslo:
  <INPUT TYPE="text" SIZE=10 MAxLENGTH=6 NAME="cislo" VALUE="$input{'cislo'}">
  <INPUT TYPE="submit" NAME="button" VALUE="Vyskúšaj">
</FORM>

KoniecFormularu

$cislo=$input{'cislo'};

if ($cislo > 0 && $cislo < 1000000){
  print "<hr>\n";
  $a=1;
  $b=2;
  while ($b < $cislo){
    $c=$b;
    $b+=$a;
    $a=$c;
  }

  if ($b == $cislo || $cislo == 1){
    print "Číslo <strong>$cislo je</strong> číslom Fibonacciho postupnosti.";
  }
  else{ 
    print "Číslo <strong>$cislo nie je</strong> číslom Fibonacciho postupnosti."; 
  }
}

print &HtmlBot;

 

Tento script sa dá rozdeliť na 2 časti, a to na "vstupnú" stránku s HTML formulárom "p6b.htm", ktorá prostredníctvom metódy POST posiela údaje CGI scriptu "p6b.pl", ktorý zistí, či číslo je členom Fibonacciho postupnosti a výsledok zobrazí v HTML formáte. Súbor "p6b.pl" treba opäť uložiť do adresára Apache/cgi-bin.