Perl тіліне кіріспе

Perl – программалаушы Лари Уоллом (Larry Wall) құрған, көлемді мәтіндер мен файлдарды өңдеуге арналған, интерпретацияланатын тіл болып табылады. Practical Extraction and Report Language (мәліметтерді практикалық ашу және басылымдарды құру) деп талданады. Perl тілінің көмегімен бір немесе бірнеше файлдарды ашу, ақпараттарды өңдеу, нәтижелерін жазу әрекеттерін орындауға болады.

Perl енгізілген мәліметтерді өңдеу әрекетін жүзеге асыру мүмкіндігін береді. Егер пайдаланушы ақпаратты Perl-дің тіркеу формасына енгізсе оны бірнеше тәсілдермен өңдеуге болады:

· Оларды мәтіндік файлға қосу,

· Мәліметтер базасына енгізу,

· Электрондық хатқа енгізу,

· web-параққа қосу,

· жаңа web-парақ құру,

· браузер терезесінде бейнелеу.

Perl тілін іске қосу үшін келесі компоненттер қажет:

1. Мәтіндік файлға сақталған скрипт;

2. Perl интерпретатор. Кез келген Perl скрипт бірінші қатарында осы программаға жолды көрсетеді;

3. Осы скрипт іске қосылатын Web-парақ. Ол, егер скрипт кіріс ақпараттарды талап етпесе, форма немесе жай сілтеме болуы мүмкін;

4. Web-сервер. web-парақ пен скрипт арасындағы өзара байланыс сервер арқылы орындалады. Сондықтан скриптерді жазу және орындау үшін, web-сервермен қатынас құра алатындай болу керек.

Скриптті құру сатылары

Компьютерге қажетті программалық жабдықтарды орнатқан соң, Perl тілін іске қосу үшін келесі әрекеттерді орындау қажет:

1. Скриптті шақыруға арналған форманы құру.

2. Скриптінің өзін құру.

3. Скриптіні жөндеу. Қателерді тексеру.

4. Скриптіні серверге орналастырып, оны орындау құқығын тағайындау.

5. Скриптіні формамен байланыстыру. Мысалы:

<form method=post action="/cgi-bin/scriptname.pl">

6. Скриптінің формамен бірге дұрыс жұмыс істейтіндігіне көз жеткізу.

Perl скриптінің негізгі бөлімдері

Жалпы жағдайда кез келген Perl скрипт келесі төрт бөлімнен тұрады:

1. Баптау. Скриптінің алғашқы бөлімі интерпретаторды іске қосып, скрипт денесінде қолданылатын айнымалыларды орнатады. Интерпретаторды іске қосу үшін программаның сақталған орнын білу керек.

2. Кіріс мәліметтерді оқу. Бұл бөлім кіріс ақпараттарды формада өңдеу үшін оқып, сақтайды. Бұл бөлім барлық скрипттерде бірдей.

3. Кіріс мәліметтерді өңдеу. Бұл бөлім енгізілген мәліметтерді өңдейді. Ол шешілетін мәселеге қарай қарапайым (5 қатар шамасында) немесе өте күрделі (1000 қатардан артық болуы мүмкін.

4. Нәтижелерді шығару. Пайдаланушы әдетте өзінің әрекетіне қандайда бір жауап күтеді. Бұл бөлімді жүзеге асыру өте оңай орындалады.

Енді осы айтылған қадамдарды орындауға мысал келтірейік:

1-қадам. Форма құру

Пайдаланушының атын тіркеу мүмкіндігін беретін бір ғана өрістен тұратын қарапайым форма құрайық. Редакторда келесі мәтінді жазайық:

<html><head><title>Test Form</title></head><body><form method=post action"cgi-bin/testform.pl"><b>Атыңызды енгізіңіз: </b><input name="user_name" value="" size=20><input type="submit" value="Тіркеу"></form></body></html>

Файлды дискіге сақтаймыз.

5.1-сурет. Программа нәтижесі

2- қадам. Скрипт құру

Төменде келтірілген скрипт енгізілген мәліметтерді алып, оны файлға сақтап, файлға сілтемеден тұратын хабарламаны көрсетеді. Ол үшін редакторда программа мәтінін теріп, web-сервердің cgi-bin каталогына testform.pl файлына сақтау керек. Программаның бірінші қатарында интерпретатор-программаның сақталған орнын көрсететін жол тұрғанына көзімізіді жеткізуіміз қажет.

#!/usr/local/bin/perl # <-- Осыны тексеріңіз# Read and parse input from the web formread(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});@pairs = split(/&/, $buffer);foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/<!--(.|n)*-->//g; $input{$name} = $value;}# Save the user output in a file$targetfile = "/usr/local/www/htdocs/names.html"; # <-- Осыны тексеріңізopen (NAMEFILE, ">>$targetfile");print NAMEFILE "<h3>Имя: ",$input{'user_name'},"</h3>n";print NAMEFILE "<p><hr><p>n";close (NAMEFILE);# Send a message back to the userprint "Content-Type: text/htmlnn";print "<h3>Форманы толтырғаныңыз үшін рахмет</h3>nБасыңыз ";print '<a href="http://server-name/names.html">сюда</a>'; # <-- Осыны алмастырыңызprint ", Өзіңіздің енгізгеніңізді көру үшін.n";

3 -қадам. Скриптіні тестілеу

Скриптіні визуалды түрде қате жоқтығына тексеріп, алдын ала cgi-bin каталогына өтіп, командалық жолдан іске қосамыз. Ол келесі түрде орындалады:

./testform.pl/usr/local/bin/perl testform.plc:perlperl.exe testform.pl

Егер скрипте қате кездесетін болса, келесі түрдегі хабарламалар беріледі:

syntax error at testform.pl line 18, near "open"Execution of testform.pl aborted due to compilation errors.

Мұндай жағдайда көрсетілген қатардағы мәтінді тексеріп шығу қажет. Қателерді түзеткеннен кейін, оны сақтап, келесі түрдегі хабарлама шыққанға дейін тестілеу керек:

Content-Type: text/html<h3>Форманы толтырғаныңыз үшін рахмет!</h3>Өз енгізгеніңізді көру үшін, <a href="http://server-ame/names.html"> осы жерді </a>басыңыз

4 - қадам. Скриптіні формамен тестілеу.

Егер скрипт өздігінен жұмыс істейтін болса, оны форма арқылы тестілеуге болады:

1. Web-сервердің іске қосылғанына көз жеткізіңіз.

2. Өз браузеріңізді іске қосыңыз.

3. Сіздің форма сақталған URL адресті теріп жазыңыз (адрес қатары http:// түрінде басталуы керек (file:// емес)).

4. Формадағы өріске өз атыңызды теріп, «Тіркеу» батырмасын шертіңіз.

5. «Форманы толтырғаныңыз үшін рахмет!» түріндегі хабарлама берілуі тиіс.

Егер сервердің қатесі жөнінде хабарлама берілсе, онда скриптінің дұрыс орналасқандығын, form тәгіндегі action параметрінің мәнінің дұрыстығын тексеріңіз.

6. Дұрыс құрылған парақты көрсеңіз, сілтемеде тышқанды шертіңіз. Осы кезде скриптпен құрылған жаңа парақ ашылуы тиіс.

Енді өзіміз құрған скриптінің төрт қадамын жеке-жеке мұқият талдайық.

Скрипті параметрлерін тағайындау

Жоғарыда айтылғандай, скриптінің бірінші бөлімі бірнеше элементтерді қамтитын баптау бөлімінен тұрады. Бірінші қатар программа-интерпретаторға баратын жолды анықтайды:

#!/usr/local/bin/perl #UNIX үшін
немесе
Program FilesPerl5perl.exe # Win32 үшін

Сонымен бірге скриптінің басында осы скриптінің не үшін жазылғандығы жөнінде түсініктеме қосуға болады. Түсініктемені программаның кез келген жеріне # символынан бастап жазуға болады.

# Бұл түсініктеме

немесе

open (NAMEFILE, ">$testfile"); #Жазуға арналған файлды ашамыз.

Сонымен бірге скриптінің басында барлық тұрақтылар мен айнымалыларды анықтауға да болады (файлдардың орналасқан орнын өзгертуге ыңғайлы болу үшін,барлық жолдарды айнымалылар түрінде көрсеткен дұрыс әсіресе программа 50 қатардан артық болса). Мысалы:
$homepage = "http://server_name/home/index.html";

Perl тілінде барлық қарапайым айнымалылар$ символынан басталып жазылады. Айнымалылардың басқа көптеген түрлері, мысалы, массив т.с.с. бар. Программаның бірінші және түсініктемеден басқа қатарларының барлығы нүктелі үтірмен «;» аяқталуы тиіс.

Мәліметтерді формадан оқу

Пайдаланушы енгізген мәліметтерді Perl айнымалыларына «оқу» қажет. Пайдаланушы Submit батырмасын басқаннан кейін, браузер формадағы скрипттің аты мен формадан алған мәліметтерді серверге жөнелтеді. Мәліметтер скриптке стандартты кіріске беріледі.

Формада келесі өрістер бар деп есептейік:

5.2-кесте. Өріс сипаттамасы

Формадағы өріс аты Өріс тәгінде name="xxx" параметрімен анықталған атау Пайдаланушы мәліметтері
Аты: user_name Arman Murat
Мекеме: co_name Akbota
Телефон: Phone (3272) 55-45-35

Бұл кезде мәліметтер скриптке келесі форматта жіберіледі:
user_name= Arman +Murat&co_name= Akbota &phone=(3272)+55-45-35

Perl скрипт бұл қатарды бөліктер бойынша талдап, келешекте өңдеу мақсатында айнымалыларға сақтауы керек.

Бұл әрекетті жүзеге асыратын қатар жеткілікті түрде стандартты болып табылады:

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

Бұл қатар стандартты кірістен мәліметтерді оқып, оларды $buffer айнымалысына орналастырады. Қатардың ұзындығы скриптке CONTENT_LENGTH айнымалылар қоршауы арқылы беріледі.

Мәліметтер $buffer айнымалысына орналасқаннан кейін, оларды сәйкес мәндерімен жеке айнымалыларға бөлуге болады:

@pairs = split(/&/, $buffer);

Енді біз келесі жолдық айнымалыларынан тұратын @pairs массивін алдық:

[1] user_name= Arman +Murat
[2] co_name= Akbota

[3] phone= (3272) 55-45-35

Енді осы жолдарды параметр-мәндерге бөлу керек:

foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; # қосу таңбасын бос орынмен алмастырамыз $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/<!--(.|n)*-->//g; $input{$name} = $value;}

Осылайша айнымалылар массивін аламыз, олардың индексі форма өрісінің name параметрінің мәні, ал мәні сәйкес өріске енгізілген шама болады.

Мәліметтерді өңдеу

Келесі қадам мәліметтерді өңдеу. Қалай? Оның барлығы мәліметтерді қалай өңдеу керектігіне байланысты болады? Біздің мысалымызда алынған мәліметтер негізінде жаңа HTML құжат құрылады. Өрістің мазмұнының дұрыстығын тексеру әрекеті орындалмай отырғанына көңіл бөлейік. Нақты скриптерде бұл кейбір жағдайларда міндетті түрде қайсыбірінде қалауымыз бойынша орындалады.

Файлға жазу

Мәліметтермен орындалатын әрекеттердің бірі, оларды файлға жазу болып табылады. Perl тілінде файлдарды ашу және жабу үшін қолданылатын функциялар жиыны бар. Жаңа HTML құжатын құруға, мәліметтерді бұрын сақталған HTML құжатына қосуға немесе келешекте өңдеу мақсатында мәтіндік файлға сақтауға болады.

Файлды ашу функциясы келесі түрде жазылады:

open (HANDLE, "name"); # Файлды оқу үшін ашуopen (HANDLE, ">name"); # Файлды өзгерту үшін ашыopen (HANDLE,">>name");# Файлдың соңына қосу үшін ашу

HANDLE амалдарды орындау кезінде файл идентификаторы ретінде қолданылатын кез келген уақытша атау болып табылады. Файл ашылғаннан кейін, print функциясын қолдана отырып, жазуға болады:

print HANDLE "Бұл мәтін файлға дәл осы күйінде жазылады.n";

print HANDLE "Бұл кезде ",$variable," айнымалысы мәтінге ішіне орналасады.";print HANDLE " $variable айнымалысын мәтін ішіне осылай орналастыруға да болады.n";print HANDLE "Тырнақша және басқа да арнайы сиволдарды; "көрсету" қажет.n";

Файлмен жұмыс соңында оны міндетті түрде жабу керек:

close (HANDLE);

Осыдан кейін барлық мәліметтер дискке жазылады.

Файлға жазу алдында web-сервер-дің файл орналасқан директориямен қатынас құра алатындығына және осы файлға өзгеріс енгізу құқығы бар екендігіне көз жеткізу керек.

Close функциясы соңғы файлға жазу функциясына мүмкіндігінше жақынырақ жазылуы керек. Бұл web-сервер көп пайданушыларға арналған ортада орындалатындығымен және скрипті бірмезгілде бірнеше пайдаланушының қосу мүмкіндігі бар екендігімен түсіндіріледі. Файлды өзгерту үшін ашу кезінде файл блоктанады да, скриптің басқа даналары оны аша алмайды, ол сұраныстың орындалуының тежелуіне әкеледі.

Жаңа HTML парағын құру

Бұл мысалда бірқатар ақпаратты файлға жазуды көрсетейік. web-парақ құратын болғандықтан файл кәдімгі мәтінмен бірге HTML тәгтерінен де тұрады. n құрылған файлды келесі жолы ашқанда ыңғайлы болу үшін келесі қатарға көшуді қамтамасыз ету мақсатында қолданылады.

Формадан барлық кіріс мәліметтер $input{field_name} айнымалысында сақталған. Баспа кезінде мұндай айнымалылар тырнақшаға алынып, үтірмен бөлінуі керек.

# жазылатын файлдың орнын көрсететін айнымалыны анықтаймыз$newfile = "c:webserverhtdocsmynewpage.html";# USERINFO идентификаторын қолданып, файлды ашамызopen (USERINFO, ">$newfile");# Мазмұнын жазамызprint USERINFO "<html>n<head>n";print USERINFO "<title>Тіркеу жөнінде ақпарат</title>n</head>n";print USERINFO "n<body>n<h3>Тіркеу мәліметтері:</h3>";print USERINFO "<p><hr></p>n<p>n";print USERINFO "Аты: ", $input{'user_name'},"n<br>";print USERINFO "Мекеме: ", $input{'co_name'},"n<br>";print USERINFO "Телефон: ", $input{'phone'},"n</p>n<p><hr></p>n";print USERINFO "<!-- NEW INSERTS GO HERE -->nn</body>n</html>";# Файлды жабамызclose (USERINFO);

Файл соңына қосу

Бұрыннан сақталған файлдың соңына ақпарат қосу оңай орындалады. Мысалы, жаңа пайдаланушы жөніндегі мәліметті жоғарыда құрылған файлға қосу үшін келесі скрипт қолданылады:

# жазылатын файлдың орнын көрсететін айнымалыны анықтаймыз$targetfile = "c:webserverhtdocsmynewpage.html";# NEWINFO идентификаторын қолданып, файлды ашамызopen (NEWINFO, ">>$targetfile");# жаңа мәліметтерді файлға қосамыз:print NEWINFO "nn";print NEWINFO "Аты: ", $input{'user_name'},"n<br>";print NEWINFO "Мекеме: ", $input{'co_name'},"n<br>";print NEWINFO "Телефон: ", $input{'phone'},"n</p>n<p><hr></p>n";close (NEWINFO);

Файлдың ортасына мәлімет қосу

Жаңа мәліметтерді файлдың ортасына қосу анағұрлым күрделі болып саналады. Бірінші мысалда файлға біз келесі түрдегідей түсініктеме сызығын қосқанымызға назар аударыңыз:

<!-- NEW INSERTS GO HERE -->

Осы түсініктеме жаңа мәліметтерді қосатын орынды білдіретін болсын. Бұл мысалда уақытша файлды құруды қолданамыз.:

# жазылатын файлдың орнын көрсететін айнымалыны анықтаймыз$origfile = "/pathname/originalfile.htm";# уақытша файлдың орнын көрсететін айнымалыны анықтаймыз$newfile = "/pathname/newfile.htm";open(INFILE, "<$origfile");open(OUTFILE, ">$newfile");while ($line = <INFILE>) { printf OUTFILE $line; if ($line =~ /<!-- NEW INSERTS GO HERE -->/i) { # Жаңа мәліметтерді файлға қосамыз: print OUTFILE "nn"; print OUTFILE "Аты: ", $input{'user_name'},"n<br>"; print OUTFILE "Мекеме: ", $input{'co_name'},"n<br>"; print OUTFILE "Телефон: ", $input{'phone'},"n</p>n<p><hr></p>n"; }}# Файлдарды жабамызclose(INFILE);close(OUTFILE);# Бастапқы файлды өшіріп, жаңа файлды бастапқының атына ауыстырамызunlink($origfile);rename($newfile, $origfile);

Мәліметтерді e-mail арқылы жөнелту

Кейбір жағдайда формаға енгізілген мәліметтерді электрондық адрес бойынша жөнелту қажеттігі туындайды.

Ол үшін командалық қатар интерфейсі бар поштаны жөнелту программасы қажет болады. UNIX-те бұл sendmail немесе mail болады. Осы мысалда мәліметтер sendmail программасының көмегімен жіберіледі. Файлға жазудың орнына біз арнайы ашылған каналға (pipe) жазуды қолданамыз:

# e-mail адресі$sendto = "webmaster@akbota.kz";# каналды ашамызopen (MAIL, "| /usr/bin/sendmail $sendto")# Каналға арнайы форматпен жазамызprint MAIL "From: Web-серверn";print MAIL "To: $sendton";print MAIL "Subject: Жаңа мәліметтерді енгізу";print MAIL "Біреу форманы жаңа мәліметтер енгізу үшін қолданды ";print MAIL "Оның енгізген мәліметі:";print MAIL "Аты: ", $input{'user_name'},"n";print MAIL "Мекеме: ", $input{'co_name'},"n";print MAIL "Телефон: ", $input{'phone'},"n ";# каналды жаба отырып, хатты жіберемізclose (MAIL);

web-парақты құруды талдау

Perl скриптің соңғы маңызды бөлімі нәтижені қайтадан пайдаланушыға жіберу болып табылады. Бұл сол print арқылы, бірақ файл немесе канал идентификаторынсыз жүзеге асады. Стандартты шығуға жазылған барлық мәлімет браузер терезесіндегі ағымдағы құжатты қалыптастырады. Мысалы:

print "Content-Type: text/htmlnn";print "<html>n<head>n<title>Рахмет</title>n</head>";print "<body>n<h1>Форманы толтырғаныңызға рахмет</h1>";print "Біз сіздің атыңызды, жұмыс орныңызды және телефоныңызды алдық,";print " Олар төменде көрсетілген:<br>n";print "Аты: ", $input{'user_name'},"n<br>";print "Мекеме: ", $input{'co_name'},"n<br>";print "Телефон: ", $input{'phone'},"n</p>n<p><hr></p>n";print "</body>n</html>";

Бірінші қатарға назар аударайық. Бұл қатар қайтарылатын мәліметтердің типі жөніндегі ақпараттан тұрады. Қатарды екі рет аудару міндетті түрде болу керек. Бұл парақ Submit батырмасы басылғаннан кейін бірден пайдаланушыға қайтарылады.

Бақылау сұрақтары:

1. Perl тілін кім құрған? Ол қандай мағынаны білдіреді?

2. Perl тілі қандай мүмкіндіктер береді?

3. Perl тілін іске қосу үшін қандай компоненттер қажет?

4. Perl-дің тіркеу формасына енгізілген ақпаратты қандай тәсілдермен өңдеуге болады?

5. Perl тілін қалай іске қосуға болады?

6. Perl скрипт қандай бөлімдерден тұрады? Олардың әрқайсысына сипаттама беріңіз.

Тапсырмалар:

1. Жоғарыда келтірілген әрбір қадамды орындап, тексеріп шығыңыз.

2. Өзіңіз туралы мәліметтерді электрондық пошта арқылы серверге жөнелтіңіз.

3. Өзіңіз туралы мәліметтерді досыңыздың электрондық поштасына жөнелту программасын құрыңыз.

4. Өзіңіз туралы жазылған мәліметтер жазылған файлдың басына досыңыз туралы ақпараты қосуды ұйымдастырыңыз.

5. Файлдың соңына және ортасына досыңыз туралы мәліметтерді қосыңыз.

6. Соңғы толтырылған мәліметтерді серверге жөнелтіп, сервердің жауабын алуды ұйымдастырыңыз.



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: