Erinevus lehekülje "Perl" redaktsioonide vahel

Allikas: Kuutõrvaja
(HTTP)
15. rida: 15. rida:
 
Perli skript esineb tekstifaili kujul, selline skript kirjutab välja arvud ühest kolmeni
 
Perli skript esineb tekstifaili kujul, selline skript kirjutab välja arvud ühest kolmeni
  
for ($i = 1; $i < 4; $i++) {
+
for (1..3) {
  print "$i\n";
+
  print "$_\n";
}
+
}
  
 
kus
 
kus
  
* for-kordus väärtustab muutuja $i järjest suurenevalt väärtustega 1, 2, 3
+
* TODO
* print esitab väärtus ja reavahetuse märgi
 
* lause lõpetab semikoolon
 
  
 
Skripti käivitamiseks sobib öelda
 
Skripti käivitamiseks sobib öelda
122. rida: 120. rida:
 
===Kordused===
 
===Kordused===
  
TODO
+
====for kordus====
 +
 
 +
for ($i = 1; $i < 4; $i++) {
 +
  print "$i\n";
 +
}
 +
 
 +
kus
 +
 
 +
* for-kordus väärtustab muutuja $i järjest suurenevalt väärtustega 1, 2, 3
 +
* print esitab väärtus ja reavahetuse märgi
 +
* lause lõpetab semikoolon
 +
 
 +
====foreach kordus====
 +
 
 +
 
  
 
===Funktsioonid===
 
===Funktsioonid===

Redaktsioon: 27. mai 2010, kell 21:08

Sissejuhatus

TODO

Perli paigaldamine

Debian Lenny paketihaldus sisaldab Perl v. 5.10 tarkvara.

Programmeerimine Perlis

TODO

Perli skript

Perli skript esineb tekstifaili kujul, selline skript kirjutab välja arvud ühest kolmeni

for (1..3) {

 print "$_\n";

}

kus

  • TODO

Skripti käivitamiseks sobib öelda

$ perl skript.pl
1
2
3

Alternatiiviks on lisada faili algusse rida interpretaatori nimega

#!/usr/bin/perl

for ($i = 1; $i < 4; $i++) {
  print "$i\n";
}

ning muuta fail käivitatavaks

$ chmod 0755 skript.pl

ning käivitada

$ ./skript.pl

Lisaks töötavatele ridadele võib skriptis esineda kommentaare, kõike # märgist paremale jäävat käsitletakse kommentaarina.

Sõne-operatsioonid

Sõnedega (ingl. k. string) saab teha nt selliseid operatsioone

  • omistada muutujale ja esitada
$linn = "Tartu";
print $linn;
  • liita punkti abil
$linn = "Tartu";
print "Asukoht " . $linn;

Andmestruktuurid

Sõne

Sõne (ingl. k. string) on järgnevus tähti-numbreid-muid-sümboleid

'abcdefgh'

Arv

Arv (ingl. k. number) võib olla nt täisarv või ujukomaarv

15

Kuna Perl on nõrga tüübiskeemiga keel, siis saab nt liita arve ja sõnesid

print "mina tulen kell " . 10 . "\n";

Masiiv

Massiiv (ingl. k. array) ...

Sõnastik

Sõnastik (ingl. k. hash) ...

Failioperatsioonid

Failioperatsioonid tegelevad failist lugemise ja faili kirjutamisega.

Kirjutamine

Faili kirjutamist kirjeldab nt selline programmilõik

 #!/usr/bin/perl
 open (fh, ">>/tmp/pf.log");
 print fh "Tere, see tekst\n";
 close fh;

Tingimused

Perlis saab kasutada selliseid tingimusi

  • if-elsif-else tingimus
$x = 1;

if ($x < 0) {
  print "Alla nulli\n"; }
elsif ($x == 0) {
  print "Null\n"; }
elsif ($x == 1) {
  print "Yks\n"; }
else {
  print "Suurem yhest\n"; }

Kordused

for kordus

for ($i = 1; $i < 4; $i++) {
  print "$i\n";
}

kus

  • for-kordus väärtustab muutuja $i järjest suurenevalt väärtustega 1, 2, 3
  • print esitab väärtus ja reavahetuse märgi
  • lause lõpetab semikoolon

foreach kordus

Funktsioonid

TODO

HTTP

TODO

Perli CGI skript

Lisaks peab CGI skript rahuldama järgmisi tingimusi: skript peab asuma kataloogistruktuuri html all skript peab kuuluma sellele kasutajale, kelle veebikohale vastavas kataloogistruktuuris ta asub skriptile ei tohi viidata absoluutse (/ee/edu/zoo/www/html/skript.cgi) teega skript peab olema kirjutatav vaid kasutajale endale skriptile peab olema antud käivitamisõigus, näiteks käsuga 'chmod 755 skript.cgi'

Skripti esimesel real tuleb näidata Perli interpretaatori asukoht (/usr/bin/perl). Esimese asjana peab skript väljundisse kirjutama HTTP päise. Kui määratletakse Content-type, näiteks 'text/html', peab sellele järgnema kaks reavahetust.

Näiteks selline Perlis kirjutatud CGI skript trükib brauseris ekraanile 'Tere rahvas!'

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<HTML><BODY>";
print "Tere rahvas!";
print "</BODY></HTML>";

Näite vaatamiseks järgige viidet perl.cgi

Kui te kasutate CGI skripte veebivormidega tegelemisel, siis on tõenäoliselt neid tarvis töödelda. Selleks soovitame meie serveris, va erilisel vajadusel kasutada Perli CGI.pm moodulit. Näiteks töötleme CGI.pm mooduli vahenditega järgmist vormi

<HTML>
<BODY>
<FORM ACTION="plkontroll.cgi" METHOD="POST">
nimi: <INPUT TYPE="text" NAME="nimi" >
linn: <INPUT TYPE="text" NAME="linn" >
koht: <INPUT TYPE="text" NAME="koht" >
<input type="reset" value="Puhasta väljad"> <input type="submit" value="OK"> </FORM> </BODY> </HTML>

Vormis sisalduv ACTION="plkontroll.cgi" kutsub välja sellise CGI skripti plkontroll.cgi

#!/usr/bin/perl
use CGI;
$q = new CGI;
#
# tekitatakse HTTP päis,
# see on ekvivalentne käsuga
# print "Content-type: text/html\n\n";
#
print $q->header('text/html');
#
# tekitatakse HTML-dokumendi algus,
# see on ekvivalentne käsuga
# print "<HTML><HEAD><TITLE>Dokumendi tiitel</TITLE></HEAD><BODY>";
#
print $q->start_html('Dokumendi tiitel');
print "Vormilt saadi järgmised väärtused:
"; print "nimi:", $q->param('nimi'), "
"; print "linn:", $q->param('linn'), "
"; print "koht:", $q->param('koht'), "
"; # # väljastatakse HTML-dokumendi lõpp, # see on ekvivalentne käsuga # print "</BODY></HTML>"; # print $q->end_html;

PostgreSQL andmebaasi kasutamine

TODO

MySQL andmebaasi kasutamine

TODO

DNS

TODO

LDAP

TODO

Oracle andmebaasi kasutamine

Perlist Oracle andmebaasi kasutamise eelduseks on, et süsteemis saab kasutada Oracle Instant Client tarkvara

oracle-instantclient11.2-basic-11.2.0.1.0-1.x86_64.zip
oracle-instantclient11.2-sdk-11.2.0.1.0-1.x86_64.zip
oracle-instantclient11.2-sqlplus-11.2.0.1.0-1.x86_64.zip

Lisaks peab olema paigaldatud libdbi-perl pakett

# apt-get install libdbi-perl

ning tuleb kompileerida DBD-Oracle tarkvara aadressilt http://search.cpan.org/CPAN/authors/id/P/PY/PYTHIAN/DBD-Oracle-1.24a.tar.gz

# export LD_LIBRARY_PATH=/opt/instantclient
# export ORACLE_HOME=/opt/instantclient
# export TNS_ADMIN=/opt/instantclient
# tar zxf DBD-Oracle-1.24a.tar.gz
# cd DBD-Oracle-1.24
# perl Makefile.PL
Using DBI 1.605 (for perl 5.010000 on x86_64-linux-gnu-thread-multi) installed in /usr/lib/perl5/auto/DBI/

Configuring DBD::Oracle for perl 5.010000 on linux (x86_64-linux-gnu-thread-multi)

Remember to actually *READ* the README file! Especially if you have any problems.

Installing on a linux, Ver#2.6
Using Oracle in /opt/instantclient
DEFINE _SQLPLUS_RELEASE = "1102000100" (CHAR)
Oracle version 11.2.0.1 (11.2)
Looks like an Instant Client installation, okay
You don't have a libclntsh.so file, only /opt/instantclient/libclntsh.so.11.1
So I'm going to create a /opt/instantclient/libclntsh.so symlink to /opt/instantclient/libclntsh.so.11.1
Your LD_LIBRARY_PATH env var is set to '/opt/instantclient'
Oracle sysliblist: 
Found header files in /opt/instantclient/sdk/include.

Checking for functioning wait.ph

System: perl5.010000 linux brahms 2.6.30.5-dsa-amd64 #1 smp mon aug 17 02:18:43 cest 2009 x86_64 gnulinux 
Compiler:   cc -O2 -g -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include \
  -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
Linker:     /usr/bin/ld
Sysliblist: 
Linking with -lclntsh.

Checking if your kit is complete...
Looks good
LD_RUN_PATH=/opt/instantclient
Using DBD::Oracle 1.24.
Using DBD::Oracle 1.24.
Using DBI 1.605 (for perl 5.010000 on x86_64-linux-gnu-thread-multi) installed in /usr/lib/perl5/auto/DBI/
Writing Makefile for DBD::Oracle

***  If you have problems...
     read all the log printed above, and the README and README.help.txt files.
     (Of course, you have read README by now anyway, haven't you?)
# make
# make install

Tulemusena paigaldatakse failisüsteemi

/usr/local/lib/perl/5.10.0/auto/DBD/Oracle
/usr/local/lib/perl/5.10.0/DBD/Oracle*

Nt selline skript kasutab Oracle andmebaasi

use strict;
use DBI;

my $dbh = DBI->connect( 'dbi:Oracle:host=IP.AA.DRE.SS;sid=SID_VAARTUS', 'kasutajanimi', 'parool',
  {
    RaiseError => 1,
    AutoCommit => 0
  }   ) || die "Database connection not made: $DBI::errstr";

my $sql = qq{ SELECT nimi, vanus from klassifikaator };
my $sth = $dbh->prepare( $sql );
$sth->execute();

my ( $nimi, $vanus );
$sth->bind_columns( undef, \$nimi, \$vanus );

while( $sth->fetch() ) {
  print "$nimi, $vanus\n";
}

$sth->finish();
$dbh->disconnect();

Korrektsem oleks kasutada /opt/instantclient/tnsnames.ora sisuga

dbloom =
 (DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = db.loom)(PORT = 1521))
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = db.loom)
   )
 )

ja skriptis rida

my $dbh = DBI->connect( 'dbi:Oracle:SID_VAARTUS', 'kasutajanimi', 'parool',

Käsurea argumentide kasutamine skriptis

Argumentide programmi sees kasutamiseks sobib kasutada vaikimisi moodustatud massiivi ARGV, nt sellised

 #!/usr/bin/perl
 print "$ARGV[0]\n";
 print "$ARGV[1]\n";

ja käivitades

 $ perl argv.pl tere mart
 tere
 mart

Standard-sisendi kasutamine skriptis

Standardsisendi (ingl. k. standard input) kasutamist kirjeldab näiteks selline programmilõik

 #!/usr/bin/perl
 @read=<STDIN>;
 
 foreach $rida (@read) {
   print $rida;
 }

Kasulikud lisamaterjalid

TODO