Mga pangunahing kaalaman sa Perl - mga string, numero, array, hash. Ang pinakamahalagang web site na may impormasyon tungkol sa perl. Binary na imbakan ng data

Perl FAQ para sa Mga Nagsisimula

Mga madalas itanong na nakolekta sa kumperensya RU.CGI.PERL.CHAINIK Ano ang CGI? Ito karaniwang interface mga gateway na nagkokonekta sa isang program na tumatakbo sa ilalim ng kontrol ng isang web server at isang kliyente sa anyo ng isang HTTP browser. Sa madaling salita, ito ay isang tool na nagbibigay-daan sa iyo upang bumuo ng mga HTML na dokumento sa mabilisang, depende sa mga kondisyon at kagustuhan ng programmer. Tulad ng anumang tool ng client-server, ang isang CGI program ay binubuo ng dalawang bahagi - isa na tumatakbo sa client, sa isang browser environment, at isa na tumatakbo sa server, sa isang web server environment. Ang bahagi ng kliyente ay nakasulat sa HTML (maaaring sa paggamit ng iba't ibang mga karagdagang tool na nagpapalawak ng mga kakayahan nito), bahagi ng server maaaring isulat sa anumang programming language na may kakayahang lumikha ng mga executable program sa platform kung saan naka-install ang web server. Gagamitin namin ang Perl para sa mga layuning ito dahil ito ay maginhawa para sa pagproseso ng mga string ng teksto - at HTML na dokumento ay text lang. kunin lang ito sa ftp://cdl.bmstu.ru/soft/cgi. I-install ito, gayunpaman, hindi sa direktoryo na iminumungkahi nito para sa pag-install, ngunit sa c:\apache . Ang web server ay maaaring gumana kahit na ito ay naka-install sa root bilang default, gayunpaman, kapag i-configure ito magkakaroon ng ilang mga pagkakaiba sa opsyon na iminungkahi dito - kung gusto mong maiwasan ang mga hindi gustong komplikasyon, baguhin ang default na landas. Ilunsad ang web server (isang walang laman na itim na window ang lilitaw sa screen - ito ay isang normal na resulta ng isang matagumpay na paglulunsad; huwag pilitin na isara ang window na ito - ang web server ay lumikha ng isang espesyal na icon para matapos mo). I-access ito mula sa isang browser sa pamamagitan ng URL http://localhost at tiyaking matagumpay na nailunsad ang demo web page, na matatagpuan sa direktoryo ng htdocs. Kung nabigong magsimula ang web server, basahin ang mensahe ng error na ipinapakita nito. Kadalasan, hindi makapagsimula ang web server dahil hindi tinukoy ang pangalan. Buksan ang pangunahing file ng pagsasaayos ng web server (httpd.conf) para sa pag-edit at alisin ang komento mula sa inilipat na Pangalan ng Server, na nagtatalaga sa server ng anumang pangalan - halimbawa localhost. Ngayon, makatuwiran na subukang patakbuhin ang iyong unang CGI program. Matapos matukoy ang landas patungo sa interpreter, kailangan mong magtakda ng http header ng server na nagsasaad ng uri ng data na ipapadala: Pakitandaan na ang field ng http header ay nagtatapos sa isang double line feed. Ang mga header mismo, kung marami sa kanila, ay pinaghihiwalay sa isa't isa ng isang feed ng linya. Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento: ";
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento: ";
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento: print"
VLINK=\"#551A8B\">\n"; Pakitandaan na kapag ginamit sa loob ng isang print command, dapat na i-cross out ang mga double quote - kung hindi, kukunin ng interpreter ang mga quote bilang dulo ng command, at kung ano ang susunod sa kanila bilang isang unterminated line, at tutugon nang may runtime error.
Ngayon ay kailangan mong magsulat ng isang linya ng output at isara ang html na dokumento.
i-print ang "Hello"; i-print ang "";
Kaya ang aming buong unang programa ay magiging ganito:
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento: ";
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento: ";
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento: #!perl
i-print ang "Content-type: text/html\n\n";
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento:

";
\n"; i-print ang "Hello"; Suriin kung gumagana ito nang tama sa pamamagitan ng pagpapatakbo ng programa nang lokal. Upang gawin ito, i-dial command line kailangan mong patakbuhin ang programa bilang isang client-server application. Upang gawin ito, kailangan mong bigyan ang mga karapatan sa pagpapatupad ng programa (para sa mga operating system kung saan ito ay may kaugnayan), at ilagay ito sa isang direktoryo kung saan kinikilala ng web server ang mga programa bilang mga CGI application. Bilang default, ito ang direktoryo ng cgi-bin, kung saan dapat ilagay ang aming programa. Upang patakbuhin ang programa, kailangan mong i-type ang URL nito sa window ng lokasyon: http://localhost/cgi-bin/filename Paano maglipat ng data sa pagitan ng kliyente at server? Tiningnan na namin kung paano maglipat ng data mula sa server patungo sa kliyente. Ang susunod na hakbang ay ang paglipat ng data mula sa kliyente patungo sa server at lumikha ng isang kliyente na isinasaalang-alang ang impormasyong inilipat sa server. Mayroong ilang mga PARAAN kung saan maaari kang maglipat ng impormasyon sa server; Ang pinakakaraniwan ay ang GET method, na nagpapasa ng data sa URL, at ang POST method, na nagpapasa ng data sa katawan ng kahilingan. Ang kawalan ng una ay ang limitadong halaga ng ipinadalang impormasyon (hanggang sa 127 bytes), ang kawalan ng pangalawa ay ang kahirapan sa pagbuo ng isang kahilingan. Sa katunayan, upang makabuo ng kahilingan gamit ang GET method, sapat na ang pagsulat ng tandang pananong pagkatapos ng URL ng tawag at ilista ang mga pares ng “name=value” sa pamamagitan ng ampersand: http://localhost/cgi-bin/test2. cgi?v1=vasya&v2 =petya at iba pa. Ngayon ay kailangan mong makuha ang data na ito sa server, kung saan kailangan mo lamang makuha ang mga nilalaman variable ng kapaligiran Ngayon, kung tinawagan mo ang script gamit ang URL sa itaas, hahanapin ng module ang stream variable na "v1" sa natanggap na data, at kapag nahanap na ito, itatalaga nito ang halaga nito sa scalar $v1, na ngayon ay magiging katumbas ng “vasya”. Upang kumpirmahin ang kawastuhan ng aming mga konstruksyon, magpatakbo tayo ng program na naglalarawan sa paglilipat ng data na ito: i-print ang "";
gumamit ng CGI qw(param);
$v1=param("v1");
$v2=param("v2");
Kaya ang aming buong unang programa ay magiging ganito:
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento: ";
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento: ";
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento: ";
i-print ang "Hello, $v1 , $v2 !!!";
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento:

";

Ang pamamaraan ng POST ay nagpapadala ng data sa katawan ng kahilingan, at dapat itong matanggap sa pamamagitan ng input stream ng programa (hayaan kong ipaalala sa iyo na kapag ang programa ay inilunsad ng web server, ito ay ipinadala sa HTTP protocol). Ginagamit ang mga form upang magpadala ng data gamit ang paraang ito sa HTML. Halimbawa, sa pamamagitan ng pagsasagawa ng form sa ibaba sa kliyente, makakakuha tayo ng eksaktong parehong resulta tulad ng sa nakaraang halimbawa: <HTML>

http://localhost/cgi-bin/test3.cgi>






Ang CGI module na nagpoproseso ng data ng input ay gumagana nang eksakto kapag gumagamit ng GET na paraan at kapag gumagamit ng POST na paraan. Mga madalas itanong (dalawang bahagi) Ang ilang materyal ay ginagamit mula sa "Perl FAQ na ginawa ni SLY Golovanov, 2:5020/794.13" Saan ako makakakuha ng dokumentasyon ng Perl?<имя_модуля>Una, kapag na-install ang Perl, idinaragdag nito ang perldoc command sa iyong system. Patakbuhin ito gamit ang perldoc switch (ie perldoc perldoc) at sasabihin nito sa iyo kung paano ito gamitin. Para sa mga module gawin ang perldoc<имя_функции>Pangalawa, mayroong ilang mga libro sa Perl sa Russian: http://doc.marsu.ru/lang/perl/lama/ftp://mshp.minsk.by/pub/incoming/lama.rar ftp: //ftp. kursknet.ru/pub/books/lama_perl.zip ftp://molly.wbt.ru/incoming/lama.rar http://simplex.ru/news/ At sa Ingles: http://solaris inorg.chem. msu.ru/cs-books/perl/perlbookshelf.zip http://lpcs.math.msu.ru/CD_Bookshelf/Perl_content.tar.bz2 ftp://twilight.telco.md/pub/books/ perlbookshelf.zip http ://meltingpot.fortunecity.com/nj/80/cookbook.rar http://www.effectiveperl.com http://www.perlreference.com http://perlfect.com/articles/ http: //www. perlmonth.com/ http://www.stonehenge.com/merlyn/WebTechniques/ http://www.stonehenge.com/merlyn/UnixReview/ http://www.stonehenge.com/merlyn/LinuxMag/ http:// www.plover.com/~mjd/perl/#tpj http://home.od.ua/watman/perl/ http://spider.softclub.net/books/web/ http://athena .vvsu.ru :85/docs/unix/ http://athena.vvsu.ru:85/docs/tcpip/ http://athena.vvsu.ru:85/docs/www/ %%%%%%% %%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%% % At dito maaari kang makakuha ng mga handa na script para sa iba't ibang layunin: www.script.ru www.codemanual.com %%%%%%%% %%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%% Ano ang gagawin kung ang iyong script ay patuloy na gumagawa ng exit code number 500 (panloob error sa server)? 1. Subukang patakbuhin ang programa nang lokal sa pamamagitan ng pag-type sa command line: perl filename (kung saan ang filename ay alam mo kung ano). Mangyaring tandaan na kung nagtatrabaho ka sa isang Unix system, kung saan bilang karagdagan sa ikalimang perlas na iyong na-install, malamang na mayroon ding built-in na pang-apat, at ito ay hindi isang katotohanan na ito ay matatagpuan sa ibang pagkakataon sa mga landas, ito ay makatuwiran. mag-type
Tiyaking naroroon ang naturang linya sa iyong programa bago mag-output ng anumang character sa HTTP stream. Sa madaling salita, ang print command na ito ay dapat na isagawa bago ang anumang iba pang print command. 3. Kung hindi ito magdulot ng mga resulta, suriin kung tama ang Perl na iyong tinatawagan. Sa maraming UNIX system, ang ikaapat na Perl ay matatagpuan sa landas:/usr/local/perl at ang panglima sa daan:/usr/local/bin/perl Kung sakali, tiyaking naka-install ang ikalimang Perl sa system. 4. Kung hindi ito makakatulong, subukang tandaan kung ang file na kasama ng iyong script sa pag-edit ay naproseso sa mga text editor mula sa Windows. Siyempre, ito ay may kaugnayan lamang kung pinapatakbo mo ang script sa isang Unix system. Ang katotohanan ay ang Windows at Unix ay may magkakaibang mga character na nagtatapos sa linya. Anumang built in Windows editor gumagana sa mga dulo ng karaniwang linya ng Windows, ngunit hindi maipatupad ng Unix ang ganoong file. Upang labanan ang epektong ito, inirerekumenda na lumikha at mag-edit ng mga file lamang sa mga Unix system, o lumikha at mag-edit ng mga ito sa Windows lamang gamit ang built-in na editor ng FAR manager, na nagpapahintulot sa iyo na piliin ang uri ng file na gagawin. sa pamamagitan ng pagpindot sa shift-F2. Bilang default, ginagamit ng editor na ito ang mga line ending na nasa file na (iyon ay, ang isang file na ginawa sa UNIX ay maaaring i-save "as is" nang hindi iniisip ang uri nito).
Kung ang iyong script ay nagawa na sa
Windows standard )
{
, at gusto mong patakbuhin ito sa Unix, gamitin, halimbawa, ang program na ito:
$v1 = "\x0d";
}
buksan ang A, "f1";
habang ($line=
$line =~ s/$v1//g;
$itog .= $line;
Ang program na ito ay bubukas para sa pagbabasa ng isang file na pinangalanang f1, na matatagpuan sa site ng paglulunsad, binabasa mula doon ang lahat ng mga linya sa turn, na pinapalitan ang pagtatapos ng bawat isa sa kanila. Pagkatapos magbasa, binubuksan ng programa ang parehong file bilang isang bago para sa pagsusulat at isinusulat ang resulta dito. 5. Bilang huling pagkakataon, suriin kung ang script ay may mga karapatan na basahin at isagawa sa bahagi ng user kung saan tumatakbo ang web server. Hindi, kailangan mo pa ring suriin ito.
Kung hindi ito makakatulong sa iyo, sumulat sa kumperensya. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%% %%%%%%%%%%% Paano tingnan ang lahat ng mga variable ng environment ng web server na kasalukuyang aktibo? para sa (mga key %ENV) ( i-print ang "$_ = $(ENV($_))\n") %%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Ano ang cookies at para saan ang mga ito?
Ang mga susi ay isang paraan upang magbukas ng file sa disk ng kliyente. Dahil ang naturang file ay isang potensyal na virus, ang pamamaraang ito ay dapat na maayos na protektado sa antas ng browser. Maaaring mai-install ang susi para sa tagal ng tumatakbong browser o para sa isang tiyak na panahon. Para sa unang uri ng mga susi, hindi mo kailangang tukuyin ang oras kung kailan matatanggal ang susi, para sa pangalawang uri, kailangan mong tukuyin ang oras na ito, at sa isang format na naa-access sa browser. Kung hindi maitakda ng browser ang mga petsa sa kalendaryo nito kung kailan dapat tanggalin ang susi, buburahin nito ito sa unang pagkakataong isara mo ang programa. Upang i-automate ang proseso ng pag-compile ng petsa, ginagamit ang isang pamamaraan na nagtatakda ng petsa nang mas maaga ng isang buwan mula sa kasalukuyang sandali:
sub get_cookie_date(
my(@day, @mon, $i, $count, $sec,$min,$hours,$mday,$mon,$year, $wday, $yday,
$isdst, $result);
($seg,$min,$oras,$mday,$mon,$taon, $wday, $yday, $isdst)=gmtime(oras+2592000);
@day=("Linggo", "Lunes", "Martes", "Miyerkules", "Huwebes", "Biyernes",
"Sabado");
@mon=("Ene", "Peb", "Mar", "Abr", "Mayo", "Hun", "Hul", "Ago", "Sep", "Okt",
"Nob", "Disyembre");< 10){$year = "0$year";}
}
kung($taon >= 100)(
$taon = $taon - 100;
kung ($ taon
}
$result=$day[$wday].", ".$mday."-".$mon[$mon].."-".$year." ".$oras.":".$min.":".$sec." GMT";
ibalik ang $resulta; Huwag kalimutang ilagay sa ilang scalar ang landas sa iyong programa mula sa ugat ng kaukulang lugar ng server. Hindi na kailangang tukuyin ang pangalan ng programa; ipapadala ito nang hiwalay. Halimbawa:
$path = "/cgi-bin";
Ngayon ay maaari mong palaging i-install ang susi sa pamamagitan ng pagsasagawa ng sumusunod na piraso ng code sa iyong programa:

Upang mabasa ang susi, ang isang espesyal na pamamaraan ay ibinigay din: sub get_cookie(
my (%cook, @temp, $i, $count, $key, $value);
(@temp)=split(/;/, $ENV("HTTP_COOKIE"));
$count=@temp;
para sa ($i=0; $i<$count; $i++){
$temp[$i]=~s/ //;
($key, $value)=split(/=/, $temp[$i]);
$cook($key)=$value;
}
ibalik ang %cook;
}
Pagkatapos nito, maaari mong makuha ang pangunahing halaga, halimbawa, tulad nito: if ($ENV(HTTP_COOKIE))($cookies=1; %cookies=get_cookie();)
iba pa ($cookies=0;)
kung ($cookies==1)
{
$login=$cookies("login");
$pass=$cookies("password");
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%% %%%%%%%%%%% Paano kumopya ng file mula sa network?
Ang pinakamadaling paraan ay ang pag-install ng libwww module sa iyong system, na nagbibigay-daan sa iyong gawin ito. Narito ang isang halimbawa ng paggamit nito:
#!/usr/local/bin/perl
gumamit ng LWP::UserAgent;
gumamit ng CGI qw(header);
aking $URL = "http://www.rbc.ru/kpc/topnews/news_inc.html";
my $res = LWP::UserAgent->new->request(new HTTP::Request GET => $URL);
binmode(STDOUT);
i-print ang $res->nilalaman; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%% %%%%%%%%%%% Paano kumopya ng file sa server?
gumamit ng CGI qw(param);
Upang gawin ito, kailangan mong gamitin ang Multipart encoding ng paraan ng post na ito ay nagpapahintulot sa iyo na maglipat ng kahit na mga binary file sa server, at ang kanilang laki ay hindi limitado. Sa kasamaang palad, hindi lahat ng browser ay sumusuporta sa encoding na ito. Ang Netscape ay mayroon nito mula noong bersyon 2, MSIE mula noong bersyon 3.02. Narito ang isang halimbawa ng paggamit ng paraang ito:
#!/usr/local/bin/perl

$mode=param("mode");
$file=param("file");
# direktoryo kung saan nakasulat ang natanggap na file.
{
Kaya ang aming buong unang programa ay magiging ganito:
$fup = "/huge/httpd/htdocs/ufo/up";
kung ($mode eq "upload")
@name= split(/\\/, $file);
@name= reverse(@name);
($file1) = @pangalan;
$file_new="$fup/"."$file1";
buksan ang A, "+>$file_new";
binmode A;
{
binmode $file;
}
buksan ang A, "f1";
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento: ";
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento: ";
habang ($bytesread = read($file, $buf, 1024))
";
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento:

";
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento: ";
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento: ";
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento: ";
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento:
";
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento:
";
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento:

";
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento:";
}
print A $buf;
{
Kaya ang aming buong unang programa ay magiging ganito:
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento: ";
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento: ";
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento:

print "Ang file ay matagumpay na nailipat sa server.
elsif ($mode eq "")

Babala. Ang file transfer program ay hindi gumagana mula sa browser -
Mayroon kaming mga bersyon ng Internet Explorer sa ibaba 3.2"; print "
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento:
action=\"/cgi-bin/upload.cgi\" enctype=\"multipart/form-data\"
";
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento: ";
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento:
";
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento:
";
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento:
";
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento:
";
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento:

";
Ang ikatlong linya ng aming programa ay maglalaman ng mga kinakailangang kagamitan para sa paglikha ng mga HTML na dokumento:";
}
name=\"upload\">"; Mag-upload ng file:
Mga madalas itanong (tatlong bahagi) Paano magpadala ng liham (sa isang UNIX system).
Upang gumana sa mail sa mga sistema ng UNIX, tradisyonal na ginagamit ang programang Sendmail. Maaari mo itong ma-access nang direkta, o maaari mong gamitin ang mail command. Sa anumang kaso, kailangan mo munang ihanda ang mga address sa pamamagitan ng pagpapalit ng "@" na simbolo sa mga ito ng "\@" - kung hindi, ang programa ay hindi maaaring isagawa.
kung saan ang $mails ay isang address o isang serye ng mga address na pinaghihiwalay ng mga puwang. Tradisyonal na ipinapadala ang mga liham sa koi-8 encoding, kung saan dapat isalin ang aming teksto. Magagawa ito sa pamamagitan ng pagsulat ng katawan ng mensahe, halimbawa, sa scalar $as4 at pagkatapos ay gawin ang sumusunod na operasyon sa mga ito (upang i-convert mula sa 1251 encoding sa koi-8 encoding):
$as4 =~
tr/ABVGDEZHZIYKLMNOPRTUFHTSCHSHSSHHYYYYYAabvgdezhzijklmnoprstufhtsshshshjyeyeyoyey/bvchzdetsy

klmnoprtufhzhigyuyeyashshaasBVCHZDETSYKLMNOPRTUFHZHIGYUYEYASCHASi?/;
Buksan ang MAILL, "|mail -s \"Subject\" $mails";
# Ang $mails scalar ay naglilista ng lahat ng mga address na pinaghihiwalay ng mga puwang
i-print ang MAILL "$as4"; # ito ang katawan ng liham isara ang MAILL; Gamit ang Sendmail program maaari kang magpadala ng sulat gaya ng sumusunod:
bukas (MAIL, "|/usr/lib/sendmail -f $from_addr $mails");
print MAIL "Subject: subject_text\n";
print MAIL "content-type: text/html; charset=koi8-r\n\n";<$to_addr>print MAIL "Para kay: $user
\n"; # Aling address ang sasagutin.
i-print ang MAIL "$as4";

isara ang MAIL; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%% %%%%%%%%%%% Paano kumopya ng file sa server?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%% %%%%%%%%%%% Paano magbasa ng tinanggap na liham?
Ang pinakamadaling paraan ay ang paggamit ng mail library.
gumamit ng Mail::POP3Client;<= $pop->$pop = bagong Mail::POP3Client("login", "password", "mail.server.ru");
para sa ($i = 1; $i
Bilangin; $i++) (
$bbb = $pop->Katawan($i);
$aaa = $pop->Head($i);
foreach ($pop->Head($i)) (/^(Mula|Subject): / at i-print ang $_, "\n";)
# $pop->Delete($i); #ganito ang pagtanggal nila ng nabasang sulat
}
i-print ang "$aaa\n";
i-print ang "$bbb\n";%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%% %%%%%%%%%% LWP FAQ ni Paul Kulchenko ( [email protected]

), na-update noong 04/03/2000 Ito ay isang paglalarawan ng isang LWP module (minsan tinatawag na LibWWW) na naglalaman ng maraming kapaki-pakinabang na function. ================================================================== === =================== 1.1. Paano makakuha ng text file (http, ftp)? 1.2. Paano makakuha ng jpeg/gif/bmp file at ibalik ito? 1.3. Paano ma-access ang file na protektado ng password? 1.4. Paano mag-set up ng REFERER at iba pang mga parameter ng header ng HTTP? 1.5. Paano makakuha ng tinukoy na bahagi ng file (unang MAXSIZE bytes)? 1.6. Paano kumuha at mag-set up ng cookies? 1.7. Paano tukuyin ang mga proxy server? 1.8. Paano suriin para sa pag-redirect? 1.9. Paano lumikha ng mga parameter para sa pamamaraan ng POST? ================================================================== === =================== 1.1. Paano makakuha ng text file (http, ftp)? Paano makatanggap ng file sa pamamagitan ng http o ftp gumamit ng LWP::UserAgent;";
aking $URL = "http://www.rbc.ru/kpc/topnews/news_inc.html";
Aking $URL = "
================================================================== === =================== 1.2. Paano makakuha ng jpeg/gif/bmp file at ibalik ito? Paano kumuha ng larawan. [email protected]
gumamit ng CGI qw(header -no_debug);
$URL="
http://a100.g.akamaitech.net/7/100/70/0001/www.fool.com/art/new/butts/go99 .
gif";
my $res = LWP::UserAgent->new->request(new HTTP::Request GET => $URL);
binmode(STDOUT);
print $res->is_success ? (header("larawan/gif"), $res->content)
: (header("text/html"), $res->status_line);
================================================================== === =================== 1.3. Paano ma-access ang file na protektado ng password? Paano magpasok ng password. MAGSIMULA(
packageRequestAgent;
#!/usr/local/bin/perl
@ISA = qw(LWP::UserAgent);

Sub new ( LWP::UserAgent::new(@_); )
sub get_basic_credentials ( ibalik ang "user", "password")
}
gumamit ng CGI qw(header -no_debug);

Aking $res = RequestAgent->new->request(new HTTP::Request GET => $URL);
print header, $res->is_success ? $res->content: $res->status_line;
================================================================== === =================== 1.4. Paano mag-set up ng REFERER at iba pang mga parameter ng header ng HTTP? Paano magtakda ng mga variable ng environment ng session. #!/usr/local/bin/perl
gumamit ng HTTP::Mga Header;
gumamit ng CGI qw(header -no_debug);

), na-update noong 04/03/2000 Ito ay isang paglalarawan ng isang LWP module (minsan tinatawag na LibWWW) na naglalaman ng maraming kapaki-pakinabang na function. ================================================================== === =================== 1.1. Paano makakuha ng text file (http, ftp)? 1.2. Paano makakuha ng jpeg/gif/bmp file at ibalik ito? 1.3. Paano ma-access ang file na protektado ng password? 1.4. Paano mag-set up ng REFERER at iba pang mga parameter ng header ng HTTP? 1.5. Paano makakuha ng tinukoy na bahagi ng file (unang MAXSIZE bytes)? 1.6. Paano kumuha at mag-set up ng cookies? 1.7. Paano tukuyin ang mga proxy server? 1.8. Paano suriin para sa pag-redirect? 1.9. Paano lumikha ng mga parameter para sa pamamaraan ng POST? ================================================================== === =================== 1.1. Paano makakuha ng text file (http, ftp)? Paano makatanggap ng file sa pamamagitan ng http o ftp http://localhost/cgi-bin/hello.cgi ";
my $res = LWP::UserAgent->new->request(
bagong HTTP::Request(
GET => $URL,
bagong HTTP::Headers referer => "
http://www.yahoo.com "),
);
print header, $res->is_success ? $res->content: $res->status_line;
================================================================== === =================== 1.5. Paano makakuha ng tinukoy na bahagi ng file (unang MAXSIZE bytes)? Paano makakuha ng bahagi ng isang file. #!/usr/local/bin/perl
gumamit ng CGI qw(header -no_debug);

), na-update noong 04/03/2000 Ito ay isang paglalarawan ng isang LWP module (minsan tinatawag na LibWWW) na naglalaman ng maraming kapaki-pakinabang na function. ================================================================== === =================== 1.1. Paano makakuha ng text file (http, ftp)? 1.2. Paano makakuha ng jpeg/gif/bmp file at ibalik ito? 1.3. Paano ma-access ang file na protektado ng password? 1.4. Paano mag-set up ng REFERER at iba pang mga parameter ng header ng HTTP? 1.5. Paano makakuha ng tinukoy na bahagi ng file (unang MAXSIZE bytes)? 1.6. Paano kumuha at mag-set up ng cookies? 1.7. Paano tukuyin ang mga proxy server? 1.8. Paano suriin para sa pag-redirect? 1.9. Paano lumikha ng mga parameter para sa pamamaraan ng POST? ================================================================== === =================== 1.1. Paano makakuha ng text file (http, ftp)? Paano makatanggap ng file sa pamamagitan ng http o ftp http://www.yahoo.com/ ";
ang aking $MAXSIZE = 1024;

Print header;
my $res = LWP::UserAgent->new->request(
bagong HTTP::Request(GET => $URL), \&callback, $MAXSIZE);

Sub callback ( my($data, $response, $protocol) = @_; print $data; die )
================================================================== === =================== 1.6. Paano kumuha at mag-set up ng cookies? Paano i-install at basahin ang susi. #!/usr/local/bin/perl
gumamit ng CGI qw(header -no_debug);
gumamit ng HTTP::Cookies;

Aking $URL = "http://mail.yahoo.com/";

Aking $ua = bagong LWP::UserAgent;
my $res = $ua->request(new HTTP::Request GET => $URL);
my $cookie_jar = bagong HTTP::Cookies;
$cookie_jar->extract_cookies($res);

Print header;
kung ($res->is_success) (
my $req = bagong HTTP::Request GET => $URL;
$cookie_jar->add_cookie_header($req);
$res = $ua->request($req);
print $res->is_success ? $res->as_string: $res->status_line;
) iba (
i-print ang $res->status_line;
}
================================================================== === =================== 1.7. Paano tukuyin ang mga proxy server? Paano magtrabaho sa pamamagitan ng isang proxy. #!/usr/local/bin/perl
gumamit ng CGI qw(header -no_debug);

), na-update noong 04/03/2000 Ito ay isang paglalarawan ng isang LWP module (minsan tinatawag na LibWWW) na naglalaman ng maraming kapaki-pakinabang na function. ================================================================== === =================== 1.1. Paano makakuha ng text file (http, ftp)? 1.2. Paano makakuha ng jpeg/gif/bmp file at ibalik ito? 1.3. Paano ma-access ang file na protektado ng password? 1.4. Paano mag-set up ng REFERER at iba pang mga parameter ng header ng HTTP? 1.5. Paano makakuha ng tinukoy na bahagi ng file (unang MAXSIZE bytes)? 1.6. Paano kumuha at mag-set up ng cookies? 1.7. Paano tukuyin ang mga proxy server? 1.8. Paano suriin para sa pag-redirect? 1.9. Paano lumikha ng mga parameter para sa pamamaraan ng POST? ================================================================== === =================== 1.1. Paano makakuha ng text file (http, ftp)? Paano makatanggap ng file sa pamamagitan ng http o ftp http://www.yahoo.com/ ";
my $ua = bagong LWP::UserAgent;

$ua->proxy(["http", "ftp"], " http://proxy.sn.no:8001/ ");
$ua->proxy("gopher", "
http://proxy.sn.no:8001/ ");

My $res = $ua->request(new HTTP::Request GET => $URL);
print header, $res->is_success ? $res->content: $res->status_line;
================================================================== === =================== 1.8. Paano suriin para sa pag-redirect? Paano gumawa ng pag-redirect #!/usr/local/bin/perl
gumamit ng CGI qw(header -no_debug);

), na-update noong 04/03/2000 Ito ay isang paglalarawan ng isang LWP module (minsan tinatawag na LibWWW) na naglalaman ng maraming kapaki-pakinabang na function. ================================================================== === =================== 1.1. Paano makakuha ng text file (http, ftp)? 1.2. Paano makakuha ng jpeg/gif/bmp file at ibalik ito? 1.3. Paano ma-access ang file na protektado ng password? 1.4. Paano mag-set up ng REFERER at iba pang mga parameter ng header ng HTTP? 1.5. Paano makakuha ng tinukoy na bahagi ng file (unang MAXSIZE bytes)? 1.6. Paano kumuha at mag-set up ng cookies? 1.7. Paano tukuyin ang mga proxy server? 1.8. Paano suriin para sa pag-redirect? 1.9. Paano lumikha ng mga parameter para sa pamamaraan ng POST? ================================================================== === =================== 1.1. Paano makakuha ng text file (http, ftp)? Paano makatanggap ng file sa pamamagitan ng http o ftp http://www.yahoo.com/ ";
aking $URL = "http://www.rbc.ru/kpc/topnews/news_inc.html";

Print header;
i-print ang $res->request->url kung $res->previous->is_redirect;
================================================================== === =================== 1.9. Paano lumikha ng mga parameter para sa pamamaraan ng POST? Paano magpadala ng kahilingan gamit ang POST method nang hindi gumagamit ng form. gumamit ng URI::URL;
gumamit ng HTTP::Request;
#!/usr/local/bin/perl
gumamit ng CGI qw(header -no_debug);

), na-update noong 04/03/2000 Ito ay isang paglalarawan ng isang LWP module (minsan tinatawag na LibWWW) na naglalaman ng maraming kapaki-pakinabang na function. ================================================================== === =================== 1.1. Paano makakuha ng text file (http, ftp)? 1.2. Paano makakuha ng jpeg/gif/bmp file at ibalik ito? 1.3. Paano ma-access ang file na protektado ng password? 1.4. Paano mag-set up ng REFERER at iba pang mga parameter ng header ng HTTP? 1.5. Paano makakuha ng tinukoy na bahagi ng file (unang MAXSIZE bytes)? 1.6. Paano kumuha at mag-set up ng cookies? 1.7. Paano tukuyin ang mga proxy server? 1.8. Paano suriin para sa pag-redirect? 1.9. Paano lumikha ng mga parameter para sa pamamaraan ng POST? ================================================================== === =================== 1.1. Paano makakuha ng text file (http, ftp)? Paano makatanggap ng file sa pamamagitan ng http o ftp http://yahoo.com/?login=mylogin&password=mypassword ";
my $uri = bagong URI $URL;
my $method = "POST";

Aking $request;
kung (uc($paraan) eq "POST") (
aking $query = $uri->query;
(aking $url = $uri->as_string) =~ s/\?$query$//;
$request = bagong HTTP::Request ($paraan, $url);
$request->header("Content-Type" => "application/x-www-form-urlencoded");
$request->content($query);
) iba (
$request = bagong HTTP::Request ($paraan, $uri->as_string);
};

# magdagdag ng Host field kung kinakailangan sa HTTP/1.1
$request->header(Host => $uri->host_port) kung $uri->scheme ay "file";

Aking $res = LWP::UserAgent->new->request($request);

Print header, $res->is_success ? $res->content: $res->status_line;
====================================================================



Nagkataon na may kilala akong hindi bababa sa dalawang tao na gustong matuto ng Perl. Nagpasya akong isulat ang post na ito lalo na para sa kanila.

  • Bahagi 1: Mga Uri ng Variable (Binabasa mo ang bahaging ito)

Dito makikita mo ang mga halimbawa ng mga simpleng programa mula sa seryeng "mga numero ng pag-print mula 1 hanggang 5" at iba pa. Noon pa man ay gusto kong matuto mula sa mga halimbawa - mas kawili-wili at mas mabilis ito kaysa sa mga libro o seminar. Maaari mo ring tingnan ang mga post sa blog na ito - malamang na makakakita ka ng higit pang mga halimbawa doon.

Ipinapalagay ko na sa paaralan/instituto ay nag-aral ka ng Pascal/Delphi, C o hindi bababa sa Basic, at hindi na kailangang ipaliwanag kung ano ang isang function at mga loop. Kung hindi ito ang kaso, okay lang, para lang malaman mo, kailangan mong gumastos dagdag na oras para sa pagbabasa ng Wikipedia. Kung hindi mo alam kung paano magpatakbo ng isang bash script, o bakit sa unang linya ng script dapat kang magsulat ng isang bagay tulad ng #!/bin/sh, kailangan mong mag-googling upang malaman.

Lalo na sa mga interesado sa mga tanong na "totoo bang napakakomplikado ng Perl", "anong mga libro sa Perl ang mairerekomenda mo" at kahit na "uh... nakasulat pa rin ba ito?", nagsulat ako ng isang Mini- FAQ sa Perl , na mababasa mo sa HabraHabr. At para sa mga taong hindi nagpalakas ng maraming titik Dito ay magbibigay ako ng maikling buod nito:

  • Perl - modernong wika programming kung saan sila nagsusulat at magpapatuloy sa pagsusulat sa napakahabang panahon.
  • Ang Perl, tulad ng iba pang programming language, ay may mga pakinabang, disadvantages at application nito. Umiiral malaki talaga klase ng mga problema na nilulutas ni Perl gamit ang 5+.
  • Ang Perl syntax ay hindi mas kumplikado kaysa sa C++ o Java syntax. Maaari mong i-verify ito sa pamamagitan ng pagbabasa ng post na ito hanggang sa dulo.
  • Mayroong mahusay, ngunit murang mga tutorial sa Perl. Madali mo ring mahahanap ang isang komunidad ng mga Perl programmer online na nagsasalita ng iyong sariling wika.
  • Perl ay mahusay na gumagana sa ilalim ng pareho mga operating system Pamilya ng UNIX, at sa ilalim ng Evil Windows.

Dagdag: Inirerekomenda ko rin na basahin mo ang mga artikulong Perl vs Python vs Ruby vs PHP at Priest of Programming. Ang una ay nagsasalita tungkol sa pagganap ng iba't ibang mga wika ng script, ang pangalawa ay nagsasalita tungkol sa pagkakaiba sa pagitan ng PHP at iba pang mga wika. Para sa mga tagahanga ng Python, ipinapayo ko sa iyo na basahin ang artikulong pagsubok sa pagganap ng script ng Python. Umaasa ako na ang mga materyal na ito ay makakatulong sa iyo na mahanap ang sagot sa tanong na "ano ang mabuti tungkol sa Perl."

Kamusta %username%!

Kaya, isulat na natin ang ating unang Perl script!

#!/usr/bin/perl

$pangalan = shift() ;
print("Hello, $name! \n") ;

Patakbuhin natin ang script:

$ chmod u+x 1 .pl
$ ./ 1 .pl afiskon
Hello afiskon!

Ang lahat ay napaka-simple dito:

  • Ang mga pangalan ng scalar variable (iyon ay, hindi array o hash, kung ano ang mga ito - tingnan sa ibaba) ay nagsisimula sa isang dollar sign.
  • Ibinabalik ng shift function ang susunod na argumento ng script. Sa madaling salita, ang unang tawag sa shift() ay nagbabalik ng unang argumento, ang pangalawang tawag ay nagbabalik ng pangalawang argumento, at iba pa.
  • Ang print() function ay nagpi-print ng string na ipinasa bilang argumento.
  • Maaari mong palitan ang mga halaga ng mga variable sa linya (tingnan ang linya 4). Para sa higit pang impormasyon tungkol sa mga string, tingnan sa ibaba.

Kung hindi pa masyadong malinaw, okay lang. Marahil ang isang maliit na teorya ay magdadala ng kaunti pang kalinawan.

Mga uri ng variable

Mayroong tatlong pangunahing uri ng mga variable sa Perl: mga scalar(mga numero at string), mga array- katulad ng mga ginamit sa Pascal o C (kung minsan ang mga array ay tinatawag ding mga vector), at mga hash (nag-uugnay na mga array).

Mga scaler nagamit na natin sa nakaraang halimbawa. Narito ang ilan pang halimbawa ng pagtukoy ng mga scalar.

#!/usr/bin/perl

$a = 123 ;
$b = - 7.496 ;
$c = 0xABC; # ay katumbas ng 2748, oo, ito ay isang komento :)
$d = ($a + $b ) / $c ;
$d *= $a ; # katulad ng $d = $d * $a;

$str1 = "hello" ;
$str2 = "$str1, mundo" ; # $str2 ay naglalaman ng "hello, world"
$str3 = $a . " \n". $str2 ;
$str4 = "$str1" ; # $str4 ay naglalaman ng "$str1", hindi "hello"

Dito nagtakda kami ng positibo at negatibo, integer at fractional na mga numero, nagtakda ng numero sa hexadecimal encoding, magdagdag, mag-multiply at hatiin - lahat tulad ng sa C o Java. Bilang karagdagan sa mga operasyon sa itaas, sinusuportahan din ng Perl ang pagpapatakbo ng exponentiation:

$a = 2 ** 8 ;

Sa mga string, ang lahat ay halos pareho sa ilang PHP. Ang tuldok ay nangangahulugang ang operasyon ng pagsasama-sama (iyon ay, "pagdikit" ng mga string nang magkasama); bagong linya(\n), tabs (\t), quotes (\"), ang backslash mismo (\\), ang dollar sign na walang anumang variable substitution (\$) at marami pang iba. Kung ang string ay nasa single quotes, ang mga simbolo sa loob nito ay binibigyang kahulugan na "as is", nang walang variable na pagpapalit, atbp.

Tulad ng PHP, binibigyang-kahulugan ni Perl ang mga scalar bilang mga numero o string depende sa operasyon. Ito ay simple:

$int1 = "11" + 22 ;
# ^ ang string na "11" ay na-convert sa isang numero,
# pagkatapos na maisagawa ang pagdaragdag, resulta: 33.
$str1 = "11" .
22;
# ^ ang numero 22 ay na-convert sa isang string,

# pagkatapos kung saan isagawa ang concatenation, ang resulta ay "1122".

Ang mga patakaran para sa pag-convert mula sa isang string patungo sa isang numero at vice versa ay pareho sa PHP:
$str1 = 0 .
"abc" ;
# ^ ang resulta ay "abc", ang numerong zero ay na-convert sa walang laman na string
$int1 = "aaa" + 1 ;
# ^ resulta ay 1, walang mga numero sa string na "aaa"

$int2 = "12aaa" + 1 ; # ^ resulta ay 13, tanging ang mga unang digit ng string ang isinasaalang-alang By the way, para sa announcement

mahabang linya
Mayroong mga espesyal na operator - q at qq:
# katulad ng mga single quotes
} ;
$text = q (
Mayroon ka bang $15?
# katulad ng double quotes
$mensahe = qq (
} ;

Hello, $username! kamusta ka na?

#!/usr/bin/perl

Nagtatrabaho sa Arrays
nangyayari ang mga sumusunod: $scalar = "bebebebe" ;
($a, $b) = (1, 2);
# katulad ng $a = 1; $b = 2; \n";
@arr = ("aaa" , 123 , $scalar , $a + $b );
i-print ang $arr [ 1 ] . " \n";

itulak @arr , $a ; print pop (@arr) . " Dito kami lumikha ng array @arr na binubuo ng 4 na elemento (linya 5). Pagkatapos ay inilabas namin ang pangalawang elemento (linya 6). Ang pagnunumero ng mga elemento ay nagsisimula sa zero, kaya ang index 1 ay ginagamit upang ipakita ang pangalawang elemento Pagkatapos ay inilalagay namin ang halaga ng variable na $a sa dulo ng array (.

push function

, linya 7), at agad na i-extract at ipakita ito (function pop, linya 8). Pakitandaan na ang mga pangalan ng array ay nagsisimula sa "aso" at hindi dolyar (hindi mahirap tandaan - ang mga katumbas na simbolo ay katulad ng mga unang titik ng mga pangalan ng uri ng Ingles: $ - scalar, @ - array). Kapag ina-access ang pangalawang elemento ng array (linya 6), ginamit ang dollar sign dahil isang scalar ang array element. Sa una ito ay nagdudulot ng maraming pagkalito, ngunit sa pangkalahatan ang lahat ay lohikal. at itulak nang walang panaklong. Sa Perl, kapag tumatawag sa isang function, saanman hindi ito nagiging sanhi ng kalabuan, ang mga panaklong ay maaaring tanggalin.

Upang magdeklara ng isang array na ang mga elemento ay mga string na walang mga puwang, mayroong isang espesyal na operator - qw:

@arr = qw/aaa bbb ccc/ ;
# katulad ng ("aaa", "bbb", "ccc"), mas maikli lang

Hashes ay katulad ng mga array, ngunit ang mga elemento sa hash ay hindi nakaayos. Sa kasong ito, maaaring gamitin ang mga string bilang isang susi kung saan naa-access ang isang elemento.

#!/usr/bin/perl

%hash = ( # kapag nagdedeklara ng mga hash at arrays magagawa mo
"x" => 12 , # gumamit ng mga line break
y => 53 , # kung walang mga espesyal na character sa susi, hindi kailangan ng mga panipi
"z" => - 10.5 , # maaari kang mag-iwan ng kuwit sa dulo
) ;

$hash("x")++; Ang # x coordinate ay 13 na ngayon
$hash ( y ) --; Ang # y coordinate ay 52 na ngayon

# display coordinates
print "x = $hash(x), y = $hash(y), z = $hash(z)\n ";

Ang mga pangalan ng hash ay nagsisimula sa isang porsyento na tanda at ginagamit upang sumangguni sa isang elemento. braces(hindi parisukat, tulad ng kaso sa mga arrays). Kung ang pangalan ng susi ay kilala nang maaga, maaari mong tukuyin ito nang walang mga panipi (linya 10).

Sa pamamagitan ng paraan, ang mga variable na $test, @test at %test ay ganap na independiyenteng mga variable ng iba't ibang uri.

Sa puntong ito gusto kong puntahan mga kondisyong pahayag at para sa / habang ang mga loop, ngunit napagtanto ko na mayroon nang masyadong maraming teksto para sa isang post. Samantala, maraming katanungan ang nananatili sa likod ng mga eksena:

  • Mga pahayag na may kondisyon;
  • Para sa at habang mga loop;
  • Pahayag ng mga pag-andar;
  • Paggawa gamit ang mga stream at file;
  • Mahigpit na syntax;
  • Paggamit ng mga nakahandang module at mga klase.

Isusulat ko ang tungkol dito sa isa sa mga sumusunod na post. Nais kong makatanggap ng hindi bababa sa ilang mga komento sa post na ito - kawili-wili/hindi kawili-wili, naiintindihan/hindi maintindihan, at iba pa. Sa pamamagitan ng paraan, kung mayroon kang mga tanong na may kaugnayan sa Perl (hindi kinakailangang nauugnay sa post na ito), huwag mag-atubiling tanungin sila sa mga komento!

Umaasa ako na ang seryeng ito ng mga post tungkol sa programming sa Perl ay makakatulong sa iyo na isulat ang iyong mga unang simpleng script. Sa paglipas ng panahon, magiging mas kumplikado ang mga script, gagamit sila ng mga bagong teknolohiya (OOP, mga regular na expression) at pagkaraan ng ilang sandali ay makikita mong sapat na ang iyong nalalaman tungkol sa Perl upang ibahagi ang iyong karanasan sa iba.

Ang artikulong ito ay isinulat para sa mga taong, dahil sa force majeure mapilit na naramdaman ang pagnanais na pag-aralan si Pearl. Para sa akin, ang pangyayaring ito ay ang aking computer ay naging isang WEB server, at ako, nang naaayon, ay naging isang WEB master. Nakaugalian na ang matuto sa mga pagkakamali at karanasan ng ibang tao, kaya't ibinibigay ko sa inyo ang aking karanasan sa pag-aaral ng Pearl.

Kailangang ipaliwanag kaagad kung para kanino isinulat ang lahat ng ito. Kung tumatakbo ang iyong server sa isang platform ng UNIX, dapat ako ang nagbabasa ng iyong artikulo. Mayroon akong Windows NT workstation 4.0 (RUS) plus Service Pack 3 na naka-install Nang dumating ang oras na gumawa ng isang WEB server mula sa aking computer, nagmadali ako sa built-in na WEB host Services, ngunit mabilis na napagtanto na hindi ko ito gusto. (bakit?). At pagkatapos ay pinayuhan ng isang mabait na tao na i-install ang Xitami WEB Server mula sa iMatix Corporation (), na nakatayo pa rin hanggang ngayon.

Tulad ng para sa Pearl mismo, ito ay medyo mas kumplikado. Pagkatapos ng paghalungkat sa iba't ibang server ng Perl (www.perl.org, www.perl.com), nalaman ko na napakaraming bersyon ng Perl kaya medyo mahirap pumili ng partikular na bagay. Kasabay nito, walang mga naiintindihan na rekomendasyon sa pagpili ng isang bersyon o iba pa kahit saan. Sinubukan ko ang halos lahat ng mga bersyon para sa Windows, pinili ko ang Active Perl().

Para sa isang taong pinalayaw ng lahat ng uri ng Windows at Delphi, ang pagsusulat ng mga programa sa Perl ay medyo hindi pangkaraniwan, kaya lubos kong inirerekumenda ang pag-install kaagad ng Perl Builder. Makukuha mo ito sa www.solutionsoft.com. Mayroong tatlumpung araw na bersyon ng Demo doon.

Well, sa tingin ko oras na para diretso sa punto. Sa pangkalahatan, ang isang Pearl script, tulad ng anumang iba pang programa, ay gumagana tulad nito:

  1. tumatanggap ng data
  2. nagpoproseso ng data
  3. nagbibigay ng mga resulta

Maaari kang maglipat ng data sa script gamit ang dalawang pamamaraan - GET at POST. Ang pagkakaiba sa pagitan ng mga ito ay kapag gumagamit ng GET, ang data ay patuloy na nakabitin sa address bar ng browser, halimbawa:

http://treagraf.tasur.edu.ru/cgi-bin/price.pl?Category=POWER&Description=varta

Sa kasong ito, kinukuha ng script ng B_price.pl ang data sa QUERY-STRING na environment variable.

$data=$ENV("QUERY_STRING");

Kapag ginagamit ang pamamaraan POST data ipinadala sa karaniwang input iskrip. Ang haba ng data block ay kinukuha sa CONTENT_LENGTH variable:

Basahin(STDIN,$data,$ENV("CONTENT_LENGTH"));

Ngayon ang data na ito ay kailangang isalin sa isang natutunaw na anyo, dahil ito ay naka-encode.

Ang karaniwang convention ay palitan ang mga puwang ng mga plus sign at pagkatapos ay i-encode ang natitirang mga invalid na character gamit ang mga ASCII code sa hexadecimal, na pinangungunahan ng isang (%) sign. Halimbawa:

Http://treagraf.tasur.edu.ru/cgi-bin/B_price.pl\ ?Category=%C2%E8%E4%E5%EE&Description=%E0%E1%E2%E3

Ibig sabihin:

Http://treagraf.tasur.edu.ru/cgi-bin/B_price.pl?\ Category=Video&Description=abvg

Mas mainam na i-decode ang string ng query sa unang pagkakataon. Sa tanong na "paano?" Mayroong maraming mga sagot na walang kahulugan upang muling isulat. Hayaan akong magbigay sa iyo ng isang maikling halimbawa:

Palitan ng mga puwang ang mga (+) sign

$query = ~ s/\+/ /g;

Pagkatapos ay pinapalitan namin ang lahat ng kumbinasyon ng (%) sign, na sinusundan ng hexadecimal digit, na may katumbas ASCII character

$query =~ s/%((2))/pack("C", hex($1))/hal;

Ginagamit ko ang inaalok ng Perl Builder:

#! E:\perl5\bin\perl # tawagan ang data retrieval routine $Category = $field("Category"); # kumuha ng data mula sa field ng Kategorya $Description = $field("Description"); # kumuha ng data mula sa field ng Paglalarawan $Page = $field("Page"); # kumuha ng data mula sa field ng Page

Sa dulo ng script naglalagay kami ng subroutine para sa "transparent" na pagbabasa ng data.

Sub GetFormInput ( (*fval) = @_ if @_ ; local ($buf); if ($ENV("REQUEST_METHOD") eq "POST") ( read(STDIN,$buf,$ENV("CONTENT_LENGTH")) ; ) else ($buf=$ENV("QUERY_STRING"); ) if ($buf eq "") (return 0;) else (@fval=split(/&/,$buf); foreach $i (0 . . $#fval)( ($pangalan,$val)=hati (/=/,$fval[$i],2); $val=~tr/+/ /; $val=~ s/%(.. )/pack("c",hex($1))/ge; $name=~tr/+/ /; $name=~ s/%(..)/pack("c",hex($1))/ ge; if (!defined($field($name))) ($field($name)=$val; ) else ($field($name) .= ",$val"; #if you want multi-selects to goto into an array change to: #$field($name) .= "\0$val" ) ) return 1;

Ang ikalawang yugto ng script - pagpoproseso ng data - ay ganap na nasa iyong paghuhusga. Suriin ang natanggap na data para sa katumpakan, isulat ito sa isang file, gawin ang anumang gusto mo.

Panghuli, kailangan mong magbigay ng ilang mga resulta sa browser ng kliyente upang maipakita ng browser ang mga ito nang tama. Iyon ay, kailangan mong ipakita ang mga resulta sa HTML. Ginagawa ito nang simple: (maaari ding gawin sa iba't ibang paraan)

I-print ang "Content-type: text/html", "/n/n"; #kinakailangan na line print "

Sa field ng Kategorya na iyong inilagay: ", $Category, "

Nalalapat lahat ito sa mga script na tumatanggap ng data mula sa isang form sa isang HTML page. Sa kasong ito, ang pahina na may form ay hiwalay, ang script ay hiwalay. Maaari mong gawin itong mas maganda at mas maginhawa: pagsamahin ang pahina at ang script sa isang solong kabuuan. Upang gawin ito, ang script ay isinulat ayon sa sumusunod na pamamaraan:

  1. Noong unang inilunsad, gumuhit ang script HTML na pahina na may form at link sa ACTION tag sa sarili nito. Ang unang pagtakbo ay tinutukoy ng kawalan ng data ng pag-input.
  2. Kung mayroong input data, pagkatapos ay tinatanggap namin ito, pinoproseso ito at gumawa ng mga resulta.

#! E:\perl5\bin\perl if (($ENV("QUERY_STRING") eq "") o ($ENV(CONTENT_LENGTH)=0)) ( # bumuo ng page na may form ) iba pa (# tumanggap ng data, proseso at ilabas ang resulta)

Guestbook

Ang pangkalahatang algorithm para sa guest book ay ang mga sumusunod:

1. Kung ang isang bisita ay gustong gumawa ng isang entry sa libro, pagkatapos
1.1 Pagkuha ng data
1.2 Isulat ang mga ito sa isang file o database
1.3 Nagpasalamat kami sa HTML at nagmumungkahi na basahin ang iba pang mga entry
2. Kung gustong basahin ng bisita ang mga entry sa libro, kung gayon
2.1 Pagbabasa ng mga tala mula sa isang file o mula sa isang database
2.2 Ipinakita namin ang mga ito nang maganda sa HTML

Para sa kadalian ng pang-unawa, na-format ko ang mga puntos 1 at 2 na may magkahiwalay na mga script add_guestbook.pl at read_guestbook.pl, ayon sa pagkakabanggit. Ang mga mensahe ng guestbook ay naka-store sa text file linya sa linya, i.e. para sa bawat talaan ay may linya. Ginagawa ito upang gawing mas madaling basahin ang file na ito. Halimbawa ng isang entry:

Sat Dec 5 13:31:20 1998&Natasha&student&Good&Good for a start. Nais kong magtagumpay ka sa larangang ito, Alexander!&no@yet&194.226.60.34

Narito ang isang paglalarawan ng mga field sa guestbook na pinag-uusapan.

  • Pangalan - unang pangalan, apelyido, patronymic, palayaw - sa pagpapasya ng bisita
  • Trabaho - propesyon, trabaho
  • RadioButton - tatlong mga pindutan: Nagustuhan ko ito (Mabuti), hindi ko nagustuhan (Masama), wala akong pakialam (Iba)
  • Text - text box ng mga komento at tala
  • Email - return address

Pinapayagan ka ng Perl na magsulat makapangyarihang mga programa sa simula pa lang, baguhang programmer ka man o eksperto. Nag-aalok ang Perl ng mga karaniwang tool sa programming—mga operator ng paghahambing, mga quantifier ng pagtutugma ng pattern, mga function ng listahan—at may mga shortcut para sa pagpasok ng mga hanay ng character. Nag-aalok din ang Perl ng mga pagsubok sa file upang mabilis mong mahanap ang gusto mo.

Ang Pinaka-Kapaki-pakinabang na Mga Pagsusuri sa File sa Perl

Ang pagprograma gamit ang Perl ay medyo simple, na ginagawa sa mga titik na iyong ginagamit upang suriin ang mga file. Halimbawa, r sinusuri kung kaya ng file r ead, a T naghahanap ng file t ext. Narito ang pinaka kapaki-pakinabang na mga pagsubok mga file sa Perl:

Mga espesyal na karakter sa Perl

Tulad ng anumang programming language, ginagamit ni Perl mga espesyal na koponan Para sa mga espesyal na karakter, gaya ng mga reverse o vertical na tab. Kaya, kung kailangan mong mag-program ng isang tawag o beep o pagbabalik ng karwahe lamang, suriin ang sumusunod na talahanayan para sa karakter na gagawa nito:

Perl True-False Comparison Operators

Kapag nag-program ka sa Perl o anumang iba pang wika, gumagamit ka ng mga operator ng paghahambing sa lahat ng oras. Ang sumusunod na talahanayan ay nagpapakita ng mga karaniwang paghahambing para sa Perl sa parehong mathematical at string form:

push (@r, @s)

splice(@r, $#r + 1, 0, @s)

Kahit anong numero

Magtugma ng 1 o higit pang beses

*

Magtugma ng 0 o higit pang beses >?

Gayunpaman, ang pinakamalawak na ginagamit na wika ng scripting ay Perl.

Ang kabanatang ito ay tungkol sa wikang Perl at mga gamit nito. Kapag natuto ka nang magprogram gamit ang Perl, magagamit mo ito upang magsulat ng mga script na lumulutas ng iba't ibang problema sa Internet at Web programming.

Ang partikular na diin ay ilalagay sa mga tampok na iyon na ginagamit kapag nagsusulat ng mga script ng CGI. Kung hindi ka pa nakapagprogram sa Perl dati, gamitin ang kabanatang ito bilang panimulang punto upang matutunan ito.

Ang mga konseptong ipakikilala sa iyo sa kabanatang ito ay magtuturo sa iyo kung paano magsulat ng mga propesyonal na script ng Perl.

Sinasaklaw ng kabanata hindi lamang ang mga pangunahing kaalaman ng Perl programming, kundi pati na rin ang ilang iba pang aspeto. Sa oras na matapos mong basahin ang kabanatang ito, mauunawaan mo na ang mga sumusunod na pangunahing konsepto: Ang Perl ay isang binibigyang kahulugan na programming language na partikular na naka-target sa pagpoproseso ng teksto.

Ang mga programmer ay madalas na tumatawag sa mga programa sa isang wika Mga script ng Perl. Gamit ang Perl, ang mga programmer ay gumagawa ng mga CGI form.

Sinusuportahan ng P erl ang mga operasyon na may mga file at database. Ginagawa nitong angkop para sa pag-iimbak at pagkuha ng impormasyon ayon sa mga pangangailangan ng mga gumagamit ng Web.

Ang P erl ay may kasamang debug program na magagamit mo upang subukan ang iyong Perl code

Sa seksyong ito:

8 PERL programming language
Ipakikilala sa iyo ng artikulong ito ang kurso sa wikang Perl, magbibigay ng isang paghahambing na paglalarawan ng Perl at C/C++, at sasabihin sa iyo ang tungkol sa kayamanan ng Perl.

8 Gamit ang PERL
Mga prinsipyo ng paggamit ng Perl, o kung ano ang maaaring gawin gamit ang Perl.

8 Panimula sa PERL
Mga pangunahing konsepto ng wikang Perl, unang halimbawa.

8 Pag-install ng PERL
Isang magaan na pahiwatig sa kung paano i-install ang Perl.

8 Gamit ang PERL Debugger
Mga pangunahing prinsipyo ng pagtatrabaho sa Perl debugger; mga utos ng debugger; mga halimbawa ng paggamit.

8 Mga Uri ng Data sa PERL
Ang kabanata ay nakatuon sa mga uri ng data at ang paglipat mula sa isang uri patungo sa isa pa

8 Mga variable
Sinusuportahan ng Perl ang tatlong uri ng mga variable: scalars, arrays, at associative arrays. Iyan ang pinag-uusapan natin. ;-)

8 Mga pahayag ng PERL
Pangkalahatang-ideya ng mga pangunahing operator ng Perl.

8 Mga konstruksyon ng wikang PERL
Paglalarawan ng mga feature ng Perl syntax. Mga pangunahing operator.

8 Mga subroutine
Syntax at semantics ng mga gawain sa Perl.

8 Pagproseso ng String
Paglalarawan ng mga function para sa pagproseso ng mga variable ng string.

8 Pagproseso ng Listahan
Maraming mga function na nagpapalawak ng hanay ng mga posibilidad para sa pagtatrabaho sa mga listahan.

8 Hello, $username!
Naglalaman ang Perl ng ilang built-in na function na makakatulong sa iyong magtrabaho sa mga elemento ng array.

8 CGI script gamit ang PERL
Sa kabanatang ito, matututunan mong gamitin ang Perl para gumawa ng mga CGI script.