Inannt peaxrop B. Vc+auoe 3aneymmn peaxnne E. Cmpoeauoea Pyxononrent npoexra A. Hace:uur Hayunt peaxrop H. Auorau Hnreparypnt peaxrop C. Peeumeuro Xyoxnnx H. Bupraroe Koppexrop B. Hucmoea Bepcrxa H. Bicmpoe EEK32.973.2-018.1n22 YK 681.3.06(03) Xonsuep C. X71 Perl: cneuuanuuu cnpaeouuk CR: Rufep, 2001. 496 c.: un. SBN 5-8046-0198-9 Hopont cnpanounnx no xstxy Perl, coepxamn onncanne cnnraxcnca, ononnennoe ocnonntmn cneennxmn o ncnontsonannn xstxa (nneennem n npemer). Coepxnr cornn npnmepon n rorontx pemenn. Cnpanounax nn]opmannx or- nocnrcx ne rontxo x cnnraxcncy xstxa, no n x pemennm ncenosmoxntx saau, nosnnxammnx y nporpammncron na Perl, or camtx npocrtx o camtx cnoxntx.
O an1ope C1nnen Xonsnep nauan sannmartcx xstxom Perl saonro o roro, xax y nero noxnnnact mtcnt o nanncannn xnnr o nem. On onapyxnn, uro or nporpammnponannx na Perl moxno nonyunrt maccy yonontcrnnx. Crnn nporpammnponan Hnrepner-npnnoxennx axe pant- me, uem Cert crann nastnart Hnrepnerom, n on namen Perl neantnoe cpecrno nx CGI- npnnoxenn. On nncan xnnrn n crartn npo mnorne pasent nporpammnponannx (n na- croxmn momenr on paoraer na cnoe copox noctmo xnnro). On raxxe tn peaxro- pom xononxn xypnana PC Maga:ine. Crnn nonyunn oxropcxym crenent no ]nsnxe n Kopnenoncxom ynnnepcnrere (Cornell University), n xoropom on n reuenne ecxrn ner npoxonn craxnponxy n oyuenne. Kpome roro, on saxonunn Maccauycercxn rexnnuecxoro nncrnryr. B nacroxmee npemx Crnn n ero xena Hencn xnnyr nno n Ancrpncxnx Antnax, Tenrnye, nno n neontmom xnnonncnom ropoxe na noepexte Hono Anrnnn. Bnaropapuoc1u 3ra xnnra xnnxercx pesyntrarom rpya mnornx nme. t xoren ocoenno nonaroa- pnrt Cre]annm Vonn (Stephanie Wall), peaxropa no oropy pyxonnce, sa rpynym pao- ry; Tonn 3axxapnnn (Toni Zuccarini), peaxropa npoexra, xoropt na nporxxennn ncero npemenn ero ntnonnennx conepman rnranrcxym paory no oennennm noenno uacre npoexra n xonrponm na nx cosannem; Benn Hnrnn (Wendy Littley), xoopnnaropa nt- nycxa xnnr, xoropax orcnexnnana nect nponecc; Fonn Cmnr (Bonie Smith), peaxropa- xoppexropa, xoropax ycnemno oonena nect rexcr n npnnena ero no nnonne unraemt nn; 3npen Hnntcen (April Nielsen) n xon Vnnxnep (Jody Winkler) sa nsan xnnrn. Oco- te naroapnocrn enny Vnntxmcy (David Williams) sa rexnnuecxoe peaxrnponanne xnnrn. Cnacno ncem, +ro tna ornnunax paora! Bnepeuue Hent +ro xnnrn art nam nect marepnan, neoxonmt nx roro, urot crart npo- rpammncrom na xstxe Perl. H +ro ronopnr o mnorom. Perl +ro ne npocro otunt xstx nporpammnponannx. On nosyxaer npeannocrt, crpacrt, +xsantrnponannocrt, +xcnen- rpnunocrt (ne ronopx yxe o paspaxennn n paccrpocrne). Perl ontme, uem xstx, nx no+ron n ]anaron nporpammnponannx, on ncrounnx rnopuecxoro noxnonennx n cpecrno nx ero peannsannn. On moxer trt cnoxntm n saraountm, nnoxmnm n sanyxenne n Crp.15 npornnopeunntm. Ho nx ncrnnnoro paspaorunxa pyroro nyrn ner. Bt nomere, uro nmenno x nmem n nny, xora npourere +ry xnnry. Ha nenanart ro cnoero rocnocrna Hparmu:ecru Bsir o. Hse.e:euu mercmoe u Ieuepauu om:emoe (Practical Extraction and Reporting Language) raxxe nastnaemt nexoroptmn Hamo.oeu:ecru Jr.ermu:ui Bsir o. Pacne:amor Uenvxu (Pathologically Eclectic Rubbish Listing), cran nceomnm nmnmnem. Horpxcammee xonnuecrno nme nocnxrnno nneuarnxmmee xonnuecrno cnoonoro npemenn paore c nnm, ero conepmencr- nonannm n noncemecrnomy pacnpocrpanennm. C momenra nauana moe paort c Perl o noxnnennx nen cosannx xnnrn o nem npomnn mnorne rot. Bosmoxno, ynnen, xax pa- oraer Perl, nt raxxe cranere ero noxnonnnxom. -fo ecfu e sfo kuure 3ra xnnra ne rontxo oxcnxer cnnraxcnc xstxa Perl, ona raxxe aer peanncrnuecxoe npecrannenne o rom, uro ns cex npecrannxer Perl ceronx n xax on ncnontsyercx. Ha- npnmep, xora nt sarnxtnaere n mnp Hnrepnera, Perl yxnantno noncmy no+romy n xnnre yenxercx ocrarouno mnoro nnnmannx CGI-nporpammnponannm. Taxxe nonynxp- nt ceronx nonpoc o cnxsn mexy Perl n Tk, xoropt nosnonxer c nomomtm Perl ntno- nrt na +xpan oxna, xnonxn, menm n pyrne +nemenrt rpa]nuecxoro nnrep]eca, cran ononnnrentno remo anno xnnrn. 3arparnnamrcx raxxe n pyrne nnonne npaxrnue- cxne nonpoct rnna noxnmuennx Perl x asam anntx, cepnepam, paorammnm no rexno- nornn Windows OLE Automation, x npounm nponeccam n r. . Bce +ro nt naere n +ro xnnre. B nenom, ona nanncana rax, urot art nam nanonee nonnoe npecrannenne o rom, uro nponcxonr c xstxom Perl ceronx. Kpome nn]opmannn nenocpecrnenno o xstxe Perl nepcnn 5 n +ro xnnre nt raxxe nae- re mnoxecrno ononnnrentntx cneenn +ro n cosanne onee unraemoro Perl-xoa, n noxn BEGIN n END nx naxeron, conmecrnmocrt c onepannonntmn cncremamn xnacca POSIX, oexrno-opnenrnponannoe nporpammnponanne, nponsnontno nnoxennte crpyx- rypt anntx, nexcnuecxne onacrn nnnmocrn, pacmnpennte nosmoxnocrn no ncnontso- nannm moyne, a raxxe pyrne remt. Bepcnx 5 crana necrxme peannsanne nosmoxno- cre xstxa Perl, no+romy xnnra nanncana nmenno na ocnone +ro nepcnn. Knnra pasnra na orentnte, nerxo unraemte orptnxn (npnmepno 500 rem), xaxt ns xoroptx ornocnrcx x onpeenennomy paseny nporpammnponannx. Bor nexoropte ns nnx: Cnnraxcnc xstxa Perl nepcnn 5: xomant n onncannx. Hnrepaxrnnnt sanycx Perl-cnenapnen. Texcront nno n ntno. Cosanne cxanxpntx nepemenntx. Cxanxpnt xonrexcr n xonrexcr cnncxa. Cosanne maccnnon n x+me. Hnxnt n ycnonnte oneparopt. Tannnt cnmnonon n rnn anntx typeglob. Oneparopt xstxa Perl. Perynxpnte ntpaxennx n paora co crpoxamn. Cosanne nonporpamm. Hepemennte c nexcnuecxo onacrtm nnnmocrn. Bpemennte nepemennte. Vcrounnte (persistent), nnn crarnuecxne nepemennte. Crp.16 Pexypcnnnte nonporpammt. Anonnmnte maccnnt, x+mn n nonporpammt. Cctnxn n xstxe Perl. Cnmnonnuecxne cctnxn. Vcrounnte (persistent) orpannunrenn onacrn nnnmocrn. Banont ]ynxnn. Cnennantnte nepemennte Perl. Bcrpoennte ]ynxnnn Perl. uynxnnn POSIX. uopmart xstxa Perl. Bsanmoecrnne mexy nponeccamn. Texnonornn Win32 OLE Automation. Paora c ]anamn. uant as anntx DBM. Fnoxnponxa ]anon. Oneparopt Perl nx paort c ornannennxmn. Tecrt tcrpoecrnnx. Oneparopt, uyncrnnrentnte x noxantntm nacrpoxam. Fesonacnoe nsonnponanne xoa. Perl/Tk: ncnontsonanne nnnorexn Tk. Cnoxnte sanncn. Maccnnt maccnnon, x+mn x+me, maccnnt x+me n x+mn maccnnon. Cnxsannte cnncxn n xontnente y]ept. Haxert Perl. Koncrpyxropt n ecrpyxropt naxeron. Pasnnxa naxera na necxontxo ]anon. Moynn Perl. 3xcnopr cnmnonon ns moyne. Anrosarpysxa nonporpamm moyne. Knacct Perl. Koncrpyxropt xnaccon. Oexrt Perl. Merot xnaccon. Hepemennte +xsemnnxpa xnacca n nepemennte xnacca. Hacneonanne xnaccon. Mnoxecrnennoe nacneonanne. Cnxstnanne cxanxpon, maccnnon n x+me. Hepexnar omnox npemenn ntnonnennx. Ornaunx Perl. stx PerlScript. Hporpammnponanne Common Gatewav Interface (CGI-nporpammnponanne). Cosanne n ncnontsonanne ]opm HTML n CGI. 3amnra anntx nx CGI. Meuente annte n noccranonnenne anntx. Kax art nontmennt npnopnrer n npana CGI-cnenapnm. Cosanne cnoero Web-cuerunxa. Cosanne rocreno xnnrn. Kax nocnart nnctmo uepes CGI-cnenapn. Omenne n peantnom npemenn (cosanne uar-npnnoxenn). Bonpoct cexpernocrn nx mnoronontsonarentcxoro pexnma. Orpaxenne arax na cepnep. Ouncrxa ononnenntx +nemenron ynpannennx HTML. Crp.17 Cosanne renentx noctnox (cookies). 3annct anntx na Web-crpannny nepe ntsonom cnenapnx.
Hmemrcx ono nnn na cornamennx, xoropte x ncnontsym n +ro xnnre n o xoroptx nam nao snart. Kora mne nao yxasart na xonxpernym crpouxy xoa, x ntenxm ee cneym- mnm opasom: $fexf $fexf $fexf $fexf = = = = "he11o "he11o "he11o "he11o\ \\ \n" n" n" n" p1nf $fexf A urot orennrt pesyntrar paort cnenapnx or cocrnenno cnenapnx, x ntenxm ero rax: $fexf = "he11o\n" p1nf $fexf he11o -fo ee ear nofpeyefcn B +ro xnnre x ncnontsym nnrepnperarop xstxa Perl nepcnn 5.005. Perl xnnxercx cnoono pacnpocrpanxemtm nporpammntm npoyxrom. Bce, uro nam nao cenart, +ro sarpy- snrt ero ns Hnrepnera n ycranonnrt (cm. pasen Kax cxonnponart n ycranonnrt Perl n rnane 1). Ecnn nt paoraere n mnoronontsonarentcxo cncreme, n ne yxe moxer trt yc- ranonnen Perl. urot nponepnrt +ro, nonpoyre ntnonnnrt xomany pe1 -v xoropax ntneer nepcnm namero Perl-nnrepnperaropa. Hocuasua. Eue napa sa+e:auu nepeo me+, rar ei ua:ueme ca+ocmome.iuo paoomami c Perl. B coeemvm, :mo- oi ei ucno.isoea.u r.m: -w e ro+auouo cmpore npu sanvcre uumepnpemamopa. B omo+ c.v:ae e npoecce oopa- oomru ceuapu Perl npu ueooxoou+ocmu ovoem eieooumi npeovnperoamuue coooueuu (roeoa-uuovoi omo cma- uem noeeoeuue+ uumepnpemamopa no v+o.:auum). Bmopo coeem. saoaeame e ceuapuu npae+v use strict e omo+ c.v:ae Perl mpeovem, :mooi ece nepe+euuie oi.u onucaui e euo+ euoe. Bino.ueuue omux oevx npocmix coeemoe corouo+um ea+ voueume.iuo +uoeo epe+euu o. om.aoru. Bam raxxe norpeyercx nncrpymenr nx cosannx Perl-cnenapnen. Cnenapnn +ro npo- cro rexcronte ]ant, coepxamne xomant n onncannx xstxa Perl. urot cosart cne- napn nx Perl, nam nyxen rexcront peaxrop, xoropt coxpanxer peaxrnpyemte ]a- nt n ]opmare npocroro rexcra. (Ornocnrentno noponocre cm. pasen Kax nanncart cnenapn nx Perl n rnane 1.) Ormeuy, uro nam ue norpeyercx rnyoxoe snanne onepannonno cncremt Unix, nx xoro- po ncxono cosanancx xstx Perl. Xorx mnorne xnnrn no Perl cunramr xax annoe, uro nt xnnxerect nporpammncrom n cpee Unix, nx anno xnnrn +ro ne rax. Perl anexo ntmen sa pamxn Unix, n nacrano npemx, urot pyxonocrna no Perl npnsnann +ror ]axr 1 . pyrue pecypcu Cymecrnymr n pyrne pecypct, xoropte moryr nomout npn paore c Perl. K nn- repnperaropy npnnaraercx omnpnax n nonesnax oxymenrannx. B cncremax rnna Win- dows +ra oxymenrannx npeocrannxercx n nne cnxsanntx HTML-crpannn. nx mnoro-
1 B +rom ornomennn xnnra ycrapena npaxrnuecxn nce conpemennte pyxonocrna no Perl ne nonepramr comnennm cymecrnonanne nnar]opm, ornnuntx or Unix (npexe ncero, MS Windows). Hecomnenno, onaxo, uro npannntno Perl paoraer rontxo nx Unix-noontx onepannonntx cncrem. Hpu+e:. peo. Crp.18 nontsonarentcxnx cncrem nt, xax npannno, nonyuaere ocryn x +ro oxymenrannn c no- momtm cncremntx xoman (noono xomane man onepannonno cncremt Unix). nx nporpammncron na Perl nmeercx raxxe px renexon]epennn (rpynn nonocre USENET): comp.lang.perl.announce rpynna c nnsxnm noroxom coomenn. comp.lang.perl.misc rpynna c nnrencnnntm noroxom coomenn (cma, n uacrnocrn, pacctnaercx FAQ-]an no Perl). comp.lang.perl.modules nce, nmemmee ornomenne x cosannm moyne n mno- roxparno ncnontsyemoro xoa. comp.lang.perl.tk o cnxsxx Perl n oxonno-rpa]nuecxo nnnorexn Tk. Onn noepxnnamr ontmoe xonnuecrno nnsyantntx nnrep]ecntx +nemenron (xnonxn, menm n r. .). Bt moxere ncnontsonart nx n Perl, uro cranonnrcx onontno nonynxpntm. Ecnn nt nnrepecyerect CGI-nporpammnponannem, nsrnxnnre na rpynny nonocre: comp.infosvstems.www.authoring.cgi +ra rpynna ne coepxnr manona perl n cnoem nmenn, onaxo +ro xopomee mecro nx ocyxennx c pyrnmn paspaorunxamn ocoennocre CGI-nporpammnponannx na Perl. B Cern nmemrcx raxxe mnorouncnennte Web-crpannnt, nocnxmennte Perl (cnyuant noncx no Bcemnpno nayrnne nosnpamaer onee 1 527 903 crpannn, na xoroptx ynomnnaercx Perl): omamnxx crpannna Perl www.perl.com, sect nt cmoxere narn ncxont xo nnrepnperaropa Perl n roronte nporpammt no pasnnunte onepannonnte cncremt, oxymenrannm, moynn, coomennx o omnxax, a raxxe FAQ cnncox or- neron na uacro saanaemte nonpoct (on naxonrcx na www.perl.com/perl/Iaq). urot sarpysnrt cam Perl, ero moynn, pacmnpennx n ronnt pyrnx nmemmnx ornomenne x nemy neme, sarnxnnre n apxnn CPAN (Comprehensive Perl Archive Net- work) na www.cpan.org nnn www.perl.com/CPAN-local/CPEN.html. 3ro orpomnt, o- ennxmmn necxontxo ysnon ncrounnx nourn uro ncero, uro nmeer ornomenne x Perl. Ecnn nt nporynxerect no apxnny CPAN, ro rapanrnponanno naere ram nyxnt nam xo or pacmnpenn xstxa Perl o opaorxn nsopaxenn, or moyne nx paort n Hnrepnere o nnrep]econ x asam anntx. Hncrnryr Perl na www.perl.com +ro nexommepuecxax oprannsannx, ute nentm xnnxercx, no ee cocrnenntm cnonam, noepxxa Perl ocrynntm, pa- orocnocontm n ecnnarntm nx ncex. Hncrnryr, copan no cnonm xptnom nner copyxecrna nmnrene Perl, oecneunnaer ceptesnym noepxxy omena nn]opmann- e mexy nporpammncramn na Perl. Crpannna, nocnxmennax camomy xstxy Perl, naxonrcx na www.perl.com/perl/ (cma xe nac npnneer cctnxa language.perl.com). 3ect naxoxrcx osopt, nonocrn, cnncxn pecypcon, nporpammnoe oecneuenne. 3ect xe pacnonoxen xaranor cnncxon pacctnxn (mailing lists), nocnxmenntx Perl. Mnorne ysnt, cnennannsnpymmnecx na raxnx nonpocax, xax oecneuenne cexpernocrn, CGI-nporpammnponanne n r. ., coepxar pasent, ornocxmnecx x Perl, ecnn ne on- rect yronyrt n noroxe noono nn]opmannn, npocro nponenre Web-noncx. Taxxe uertpe pasa n ro nsaercx xypnan no xstxy Perl. Fontme ysnart o nem moxno, sa- Crp.19 rnxnyn na crpannuxy orwant.www.media.mit.edu/theperlournal/ 1 . Haxonen, mnoxecrno nerpnnnantntx pemenn nponem, penenron n coneron nt nae- re n xnnre T. Kpncrnancena n H. Topxnnrrona Perl: nnnorexa nporpammncra, ntny- menno nsarentcrnom Hnrep n 2000 r. (opnrnnantnoe nasnanne Perl Cookbook, ns- arentcrno OReilly, 199 r.) Hrax, ncx neoxonmax nnonax nn]opmannx nonyuena camoe npemx npncrynnrt x nsy- uennm Perl. Haunem, xax nonrcx, c rnant 1. Of uspafenucfea Bamn sameuannx, npenoxennx, nonpoct ornpannxre no apecy +nexrponno nourt comppiter-press.ru(nsarentcrno Hnrep, xomntmrepnax peaxnnx). Mt yem pat ysnart name mnenne! Hoponym nn]opmannm o namnx xnnrax nt naere na Web-care nsarentcrna http://www.piter-press.ru.
1 Hnn xe na www.tp.com. Hpu+e:. peo. Crp.20 Hac1u I Cuu1akcuc PerI
Fnana 1 Ocuonm PerI
Kopo1ko B +ro rnane paccxastnaercx o ocnone ocnon Perl cosannn n sanycxe cnenapnen Perl. Hantxn, nonyuennte n +ro rnane, oecneuar unrarenm, ne snaxomomy c Perl, ]ynamenr, xoropt norpeyercx nx nocnpnxrnx ocrantntx uacre xnnrn. Kpome cosannx n sanycxa cnenapnen mt paccmorpnm ntno rexcra na +xpan n nno rexcra c xnannarypt. Bosmoxno, unrarent yxe snaxom c ontme uacrtm marepnana +ro rnant, n +rom cnyuae ona moxer cnyxnrt osopno. Onaxo uacrt marepnana, no-nnnmomy, yer nono. Hanpnmep, ne- mnorne nmn nancxnxy cnocont nepeuncnnrt, uro nmenno enaer raroi ns xnmue, saanaemtx n xomanno crpoxe npn sanycxe nnrepnperaropa. stx Perl tn cosan n 19 roy xax nncrpymenr nx amnnncrpnponannx n xon]nrypn- ponannx cncremntx pecypcon n cern, cocroxme ns Unix-xomntmrepon. Hocrenenno Perl (utx apennarypa pacmn]pontnaercx xax Hparmu:ecru Bsir o. Hse.e:euu mercmoe u Ieuepauu om:emoe (Practical Extraction and Reporting Language) nnn xe nexno n nacxono xax Hamo.oeu:ecru Jr.ermu:ui Bsir o. Pacne:amor Uenvxu (Pathologi- cally Eclectic Rubbish Listing)) +nonmnnonnponan n mexnnar]opmennt xstx n oxasancx n nenrpe nnnmannx nponnerammero xnepnernuecxoro coomecrna. (Bt moxere cnpocnrt; nouemy Perl, a ne Pearl, ro ecrt xemuyxnna eno n rom, uro rpa]nuecxn xstx c nmenem Pearl x momenry cosannx Perl yxe cymecrnonan. Kpome roro, oparnre nnnmanne, uro rounax apennarypa cnon Practical Extraction and Reporting Lan- guage, npn nxnmuennn nepntx yxn ecex cnon, yer npecrannxrt coo nmenno Pearl.) Perl xnnxercx nnrepnpernpyemtm xstxom, npenasnauenntm nx cxannponannx rexcrontx ]anon, nsnneuennx ns nnx nn]opmannn n ntnoa, na ocnone nonyuenntx raxnm opasom anntx, rexcrontx orueron. To ecrt nporpamma perl (oparnre nnnmanne na orcyrcrnne sarnanno yxnt) ncnontsyercx nx ntnonnennx cnenapnen Perl. (Xorx xomnnnxropt Perl Crp.21 roxe cymecrnymr.) B +ro rnane mt naunem nsyuenne cnenapnen Perl. Hexoropte nmn ynnnxmrcx nonynxpnocrn Perl (xstxa, opnenrnponannoro rexcront nno n ntno n sanycxaemoro ns xomanno crpoxn) n mnpe rpa]nuecxnx nnrep]econ rnna Windows. Honynxpnocrt Perl npoonxaer pacrn no pxy npnunn. Mnorne onepannonnte cncremt ocramrcx rexcrono-opnenrnponanntmn. Perl xnnxercx mexnnar]opmenntm xstxom, maxcnmantno nenrnuno noepxnnaemtm n pasntx onepannonntx cncremax, n ornnuaercx rontxo n necxontxnx nensexntx e- ranxx (raxnx, xax uncno aron, ncnontsyemtx nx npecrannennx nnnnoro nenoro). Ha camom ene Perl oo.aoaem onpeenenntmn rpa]nuecxnmn nosmoxnocrxmn sa cuer nsanmoecrnnx c nonynxpntm moynem Tk.pm (mt paccmorpnm ero n rnane 13). an- nt moynt nosnonxer ncnontsonart cranaprnte rpa]nuecxne nnrep]ecnte +nemen- rt (widgets) c nomomtm ncnomorarentnoro cpecrna nnnorexn Tk xstxa Tcl. 3ro nosnonxer cosanart ns Perl oxna c xnonxamn, menm n pyrnmn oexramn. Onaxo c rouxn spennx xnnoro ontmnncrna nporpammncron rexymax nonynxpnocrt Perl nonnrtnaercx nporpammnponannem Common Gateway InterIace (CGI- nporpammnponann- em), npnmenxemoro nx onepann no nsanmoecrnnm xnnenr/cepnep n cpee Web. Kora peut ner o cosannn Web-crpannn, rexcronax opnenrnponannocrt xstxa nepecraer trt neocrarxom, rax xax onn raxxe xnnxmrcx uncro rexcrontmn oexramn. CGI- nporpammnponanne na Perl npecrannxer coo ouent momnt nncrpymenr, n, coornercr- nenno, +ro ona ns ocnonntx rem, xoropte mt yem paccmarpnnart. A renept nepeem x sanycxy necxontxnx cnenapnen.
Henocpepc1neuume pemeuun Kak ckonupoeafu u ycfauoeufu Perl Perl xnnxercx cnoontm nporpammntm npoyxrom. ocrarouno cxonnponart n ycranonnrt ero. Ecnn nt paoraere na xomntmrepe c necxontxnmn nontsonarenxmn nnn n mnoronontso- narentcxo cncreme, ro Perl, nosmoxno, yxe ycranonnen. Honpoyre ntart xomany xpe1 -v n xomanno crpoxe. Hocuasua. Ha npomreuuu omo ruueu suar npoeuma (") e ua:a.e cmporu osua:aem npue.aueuue ro- +auouo cmporu o. onepauouuo cucme+i Unix u eeooumi eeo ue uaoo. Ecnn Perl ycranonnen n naxonrcx n onom ns nyre noncxa, +ra xomana ntneer nomep nepcnn n nomep narua namero nnrepnperaropa (narun Perl ntnycxamrcx perynxpno nx ncnpannennx orentntx omnox). Oparnre nnnmanne, uro nx nexoroptx cncrem nnrepnperarop Perl, ncnontsyemt no ymonuannm, ornocnrcx x onee panne nepcnn nanpnmep, x nepcnn . urot ncnontso- nart Perl nepcnn 5, nam norpeyercx xomana rnna perl5 (nonpoyre ee, ecnn perl -v nt- aer nepcnm, ornnunym or 5): xpe15 -v Crp.22 Ecnn Perl ne ycranonnen, nt moxere narn ero na www.perl.com nnn www.cpan.org. (CPAN Comprehensive Perl Archive Network camt nonnt +nexrponnt apxnn ma- repnanon, nmemmnx ornomenne x xstxy Perl. Ho mepe urennx +ro xnnrn nt ysnaere o +rom pecypce ontme.) Ha +rnx ysnax nt moxere narn n sarpysnrt nce, uro nam nyxno. namepenno ne conpamct onnctnart nponecct nncrannxnnn, xoropte nyxno ntnon- nnrt nx pasntx onepannonntx cncrem, urot ycranonnrt Perl. Bo-nepntx, +rn nponey- pt rmarentno erannsnponant n onncant na yxasanntx ysnax (nanpnmep, pyxonocrno no nncrannxnnn Perl nx Unix naxonrcx na www.perl.com/CPAN- local/20doc/relinIo/INSTALLhtml). Bo-nroptx, onn nonepxent cnonranntm nsmenenn- xm, xoropte ne moryr trt orpaxent n xnnre. (Mnorne xnnrn ycrapenn sa cuer onncannx erantntx nncrpyxnn no nncrannxnnn nanpnmep, xnnrn no xstxy Java, nocxontxy +rn nncrpyxnnn nsmenxnnct, uyrt nn ne momenrantno c noxnnennem nono nepcnn.) Camax nocnenxx nepcnx Perl moxer trt nonyuena, ecnn ntpart cctnxy Get the latest ver- sion oI Perl na ysne www.perl.com. 3ra cctnxa npnneer nac x crpannuxe, na xoropo nepe- uncnent nepcnn Perl nx nanonee nonynxpntx onepannonntx cncrem (nanpnmep, ActiveState Perl nx Win32). Venrect, uro nt nonyunnn nepcnm 5.005 nnn onee nosnmm, nocxontxy npetymne nepcnn Perl nx Win32 ne nnonne conmecrnmt c Perl nx Unix n ero moynxmn. Kak uanucafu cueuapu pnn Perl Cnenapnn Perl npecrannxmr coo npocrte rexcronte ]ant, n xoroptx naxoxrcx onncannx n xomant. (Kax nt ynnnre nosnee, nce, uro nam nao cenart, +ro onncart ]opmart n nonporpammt.) urot cosart cnenapn Perl, nao nmert rexcront peaxrop nnn rexcront nponeccop, xoropt moxer coxpanxrt peaxrnpyemte ]ant n ]opmare npocroro rexcra. Coxpanenne ]ana n ]opmare npocroro rexcra +nemenrapnoe ecrnne, xoropoe moxer oxasartcx sa npeenamn nosmoxnocre xnrpoymnoro rexcronoro nponeccopa. Hanpnmep, nerxo cronxnyrtcx c rpynocrxmn npn paore c nporpammo MicrosoIt Word, xorx n ram moxno coxpannrt pesyntrar peaxrnponannx xax npocro rexcr, ecnn nt ncnontsyere ox- no nanora File[Save As. Omee npannno rnacnr: ecnn npn ntnoe ]ana na +xpan ns xo- manno crpoxn (nanpnmep, c nomomtm xomant type) ne noxnnxercx crpanntx neyx- nenntx cnmnonon, - +ro ]opmar npocroro rexcra. Hcrnnnax nponepxa, ecrecrnenno, yer n rom, cmoxer nn Perl npounrart n cxomnnnnponart nam cnenapn. B +ro xnnre nx cranaprntx cnenapnen Perl ncnontsyercx pacmnpenne .pl. Hanpnmep, cnenapn, xoropt yer npnneen uyrt nosxe, nonyunr nmx hello.pl. Cnenapnn Perl ne rpeymr raxoro pacmnpennx (nanpnmep, pyroe rnnnunoe pacmnpenne +ro .p) n, onee roro, noome moryr es nnx oxonrtcx. Tem ne menee, nx Perl-cnenapnen rpannnonno ncnontsymr pacmnpenne .pl. B uacrnocrn, nonynxpnt nnrepnperarop ActiveState Perl nx Win32 acconnnpyer pacmnpenne .pl c nnrepnperaropom Perl, rax uro nt moxere sa- nycxart cnenapnn anromarnuecxn, naxt menxnyn no nmenn ]ana. Ecrecrnenno, nnxro ne sacrannxer nx cnenapnen ncnontsonart pacmnpenne .pl, panno xax n noome npncoe- nnxrt pacmnpenne x nmenn ]ana. Yepufecu, fo cueuapu croef uafu Perl Kax nt ysnaere ns pasena Btnonnenne cnenapnen Perl, cymecrnymr na ocnonntx cno- coa sanycxa Perl-cnenapnen. Bo-nepntx, moxno sanycrnrt nnrepnperarop Perl n xnnom Crp.23 nne ns xomanno crpoxn: xpe1 he11o.p1 Moxno raxxe nacrponrt cncremy rax, urot cnenapn cam sanycrnn nnrepnperarop Perl. B +rom cnyuae cnenapn ntnonnxercx xomano rnna: xhe11o.p1 nnn n cnyuae, xora rexymn xaranor ne nxnmuaercx n nyrt noncxa no coopaxennxm esonacnocrn, xomano rnna 1 : x./he11o.p1 Cncrema nacrpoex n pasnnuntx onepannonntx cncremax ycrpoena no-pasnomy. UN Onepannonno cncreme Unix moxno oxcnnrt, uro nx sanycxa cnenapnx nao ntsnart nnrepnperarop Perl, ecnn n nepno crpoxe ]ana naxonrcx cneymmn rexcr (yurnre, uro raxo crpoxn ne rpeyercx, ecnn nt sanycxaere cnenapn na ntnonnenne otuntm cno- coom): #!/us/1oca1/b1n/pe1 # use pe1 Crpouxa c raxo cnenn]nuecxo cnnraxcnuecxo xoncrpyxnne, xax #!, oxsarentno onxna croxrt n ]ane nepno. 3ra crpoxa coepxnr cctnxy na xaranor, n xoropom na ontmnncrne xomntmrepon c onepannonno cncremo Unix pacnonaraercx nnrepnperarop Perl. Perl raxxe moxer pacnonarartcx n pyrom mecre - nanpnmep, /usr/bin/perl (oparnre nnnmanne, uro na mnornx mamnnax oa nyrn cctnamrcx na onn n ror xe ]an). urot ntxcnnrt, re naxonrcx Perl, ncnontsyre xomany which perl. urot yxasart, uro nam rpeyercx Perl 5, nx ontmnncrna cncrem moxno ncnontsonart crpoxy #!/us/1oca1/b1n/pe15 # use Pe1 5 Hpn sanycxe nnrepnperaropa, urot rapanrnponart ntno npeynpexammnx coomenn no mepe opaorxn nnrepnperaropom namero xoa, pexomenyercx ncnontsonart xnmu -w. (Ha camom ene nnrepnperarop Perl xomnnnnpyer xo nennxom npn ero sarpysxe. Ho+romy npeynpexammne coomennx noxnxrcx cpasy xe, ecnn rontxo nt ne sarpyxaere orxom- nnnnponannt xo nosxe. 3ro moxno cenart c nomomtm xomant Perl require, xoropax sarpyxaer xo no npemx ntnonnennx cnenapnx. Mt ynnnm, xax +ro enaercx, n rnane 15.) #!/us/1oca1/b1n/pe15 -W # use Pe1 5 W1fh Wan1ngs Hocxontxy no mnornx cncremax Unix crpoxa c manonom #! opesaercx nocne 32 snaxon, npn nontrxe nnecrn nx Perl nnnnt nyrt nt ncrpernrect c nponemo: #!/us/1oca1/b1n/uses/sfandad/bu11d36/pe15 B noontx cnyuaxx, a raxxe ecnn nama cncrema ne noepxnnaer cnnraxcnuecxne xon-
1 Hanpnmep, n Unix no yxasanntm coopaxennxm rexymn xaranor, xax npannno, ne nxnmuaercx n cnncox nyre noncxa. Ho+romy ecnn nt npocro nneere nmx cnenapnx n xomanno crpoxe n nne hello.pl, ro nam cnenapn moxer trt ntnonnen nnmt n rom cnyuae, ecnn on naxonrcx n xaranorax, xya otunomy nontsonarenm uro-nno sannctnart sa- npemeno (Unix nonpocry ne cmoxer narn xomany hello.pl, ecnn ona ne naxonrcx n cncremnom xaranore). B cnny +roro annt anropcxn npnmep tn namn cnerxa noxoppexrnponan. Hpu+e:. peo.
Crp.24 crpyxnnn nna !#, moxno ncnontsonart ntson xomannoro nnrepnperaropa sh c rem, uro- t sanycrnrt Perl otuntm nyrem: #!/b1n/sh eva1 /us/1oca1/b1n/pe15 -W5 $0 ${1+"$0"} 1f 0 3ect ncnontsyercx xomana eval xomannoro nnrepnperaropa c rem, urot ntnonnnrt sanycx Perl. Knmu -w oecneunnaer ntno npeynpexammnx coomenn. Hapamerp $0 onxen nxnmuart n cex nonnt nyrt, onaxo nnora +ror mexannsm ne paoraer. Ho+ro- my xnmu -S sacrannxer Perl npn neoxonmocrn camocroxrentno ncxart cnenapn. Crpan- nax xoncrpyxnnx $1+"$"] opaartnaer nmena c nnyrpennnmn npoenamn. Oparnre raxxe nnnmanne, uro nam npnmep sanycxaer nnrepnperarop Perl, no ne nosnpamaer snaue- nnx (xoa sanepmennx), rax xax oneparop if 0 nnxora ne xnnxercx ncrnnntm. Bt moxere ncnontsonart crpoxy rnna #!/us/1oca1/b1n/pe15 -W n nauane ncex cnenapnen. Onaxo samertre, uro nx xparxocrn (n noromy, uro ontmnncr- no onepannonntx cncrem raxym xoncrpyxnnm ne noepxnnamr) n cnenapnxx, xoropte mt yem paspaartnart n +ro xnnre, raxax crpoxa yer onycxartcx. Ecnn nx namnx cnenapnen ona rpeyercx, oantre ee camn. Hocuasua. Hepeo me+ rar sanvcrami ceuapu Perl noo Unix e ra:ecmee ro+auoi (mo ecmi, npocmo vra- siea eeo u+ e ro+auouo cmpore, uanpu+ep ./script.pl, a ue perl script.pl), ea+ uvruo npuceoumi e+v cmamvc ucno.ue+oeo qa.a. . omoeo npoc+ompume pasoe. Bino.ueuue ceuapuee Perl, romo- pi +oruo uamu e omo re e.aee ue+uoeo oa.ee. MS-DOS B onepannonno cncreme MS-DOS nt moxere rapanrnponart, uro cnenapn naer nn- repnperarop Perl, ecnn npeopasyere ero n .bat-]an c nomomtm yrnnnrt pl2bat.bat. (Ona nxonr n xomnnexr naxera ActiveState Perl.) Hanpnmep, ecnn y nac ecrt cnenapn hello.pl: p1nf "he11o!\n" p1nf "Pess <Lnfe> fo conf1nue..." <51DlN> ro c nomomtm xomant C:\>p12baf he11o.p1 nt npeopasyere ero n ]an hello.bat. Pesyntrnpymmn ]an yer ntrnxert cneym- mnm opasom: 0em = --"-Pe1-"-- 0echo off 1f "xO5x" == "W1ndoWsN1" gofo W1nN1 pe1 -x -5 "x0" x1 x2 x3 x4 x5 x6 x7 x x9 gofo endofpe1
:endofpe1 Windos 95/98 u Windos NT Haxer ActiveState Perl nx Windows 95/9 n Windows NT mon]nnnpyer peecrp Windows rax, uro ]ant c pacmnpennem .pl acconnnpymrcx c nnrepnperaropom Perl. nono men- uox mtmtm na ]ane cnenapnx sanycxaer ero na ntnonnenne. Onaxo xora +ro nponcxo- nr, orxptnaercx oxomxo MS-DOS, n nem sanycxaercx nnrepnperarop Perl, a sarem oxno MS-DOS nemenenno saxptnaercx (o roro, xax nam yaercx npounrart ntneennt rexcr). nx roro urot nsexart +roro +]]exra, nocmorpnre pasen Kax nsexart ne- menennoro saxptrnx oxna MS-DOS n Windows 95/9/NT, xoropt moxno narn n +ro xe rnane nemnoro nnxe. Macintosh Ha xomntmrepax Macintosh cnenapnn Perl ntnonnxmrcx anromarnuecxn - nx ntsona Perl naxt menxnnre na cnenapnn mtmtm. Kak uanucafu nporparry Perl: koraupu u onucauun Hporpamma na Perl cocronr ns xoman n onncann. Onncannx yxastnamr Perl, xax nt co- npaerect ncnontsonart onpeenennte nporpammnte xoncrpyxnnn o roro, xax +ro npo- nsoer na camom ene. Onn nyxnt rontxo nx ]opmaron n nonporpamm, xorx moxno raxxe onnctnart n pyrne +nemenrt rnna nepemenntx. Fonee nopono o onncannxx peut noer n +ro xnnre antme. Komant ncrpeuamrcx n nyx ]opmax: npocro n cocranno. Hpocma ro+auoa +ro ntpa- xenne, ntnonnxmmee nexoropoe xonxpernoe ecrnne. B nporpamme npocrte xomant sa- xanunnamrcx rouxo c sanxro (;), xax nponcxonr n cneymmem npnmepe, re ]ynxnnx print ncnontsyercx nx ntnoa na +xpan crpoxn Hello!, sanepmaemo cnmnonom nepenoa crpoxn \n (cm. pasen Ocnonnte xomant ]opmarnponannx anee n +ro rnane): p1nf "he11o!\n" Cocrannte xomant cocroxr ns ntpaxenn n noxon. Fnoxn n xstxe Perl orpannunnamrcx ]n- rypntmn cxoxamn () n (]) n moryr coepxart necxontxo npocrtx xoman. Onn raxxe nmemr cnon onacrn nnnmocrn (onacrt nnnmocrn +nemenron rnna nepemenntx +ro cermenr npo- rpammt, n xoropom moxno ncnontsonart nepemennym; onee nopono +ror nonpoc paccmar- pnnaercx anee). Hocne saxptnamme ]nrypno cxoxn ne nao crannrt rouxy c sanxro. anee cneyer npnmep noxa, c nomomtm xoroporo cosaercx cocranno oneparop nnxna for (+ro ]ynamenrantnt oneparop nnxna n Perl, mt yem nopono ero nccneonart n rnane 5): fo {$1oop1ndex = 1 $1oop1ndex <= 5 $1oop1ndex++} { p1nf "he11o!" p1nf "fhee!\n" } Crp.26 Bunonueuue cueuapuee Perl Hpenonoxnm, uro nmeercx ]an hello.pl co cneymmnm cnenapnem na Perl: #!/us/1oca1/b1n/pe15 -W # use Pe15 W1fh Wan1ngs p1nf "he11o\n" xax ero ntnonnnrt 3ro ocnonnax onepannx npn paore c Perl. Onaxo, nocxontxy nmeercx ne- cxontxo napnann na ocnonnym remy, mt cenaem xparxn osop nmemmnxcx nosmoxnocre. Kak eau cueuapu roef uafu Perl car Ecnn nam cnenapn moxer sanycrnrt nnrepnperarop Perl camocroxrentno (cm. pasen Venrect, uro cnenapn cmoxer narn Perl panee n +ro rnane), nam nerxo ero ntnon- nnrt. nx Unix +ro snaunr, uro nepnax crpoxa ]ana coepxnr rexcr rnna #!/usr/local/perl5 -w. Kpome roro, cnenapn nao cenart ncnonnxemtm ]anom. 3ro ocymecrnnxercx c nomomtm xomant chmod +x he11o.p1 Taxxe cneyer yenrtcx, uro cnenapn pacnonoxen n onom ns nyre noncxa. Hanpnmep, nx +roro cneyer nponepnrt nam ]an .login n nponecrn noncx xoman set path, ecnn n xauecrne xomanno oonouxn ncnontsyercx csh nnn ona ns ero nponsno- ntx. Ecnn xe nx +ro nenn ncnontsyercx sh nnn ananornunt nnrepnperarop, nponeptre xomany PATH. B cnyuae npnmenennx pyroro rnna oonouxn ncnontsyre ee cnennant- nte xomant (n xpanem cnyuae, cneptrect co cnpanounnxom). Hocne +roro sanycrnre cnenapn na ntnonnenne, nnex n xomanno crpoxe xomany rnna: xhe11o.p1 B onepannonntx cncremax Windows nnn Macintosh, urot sanycrnrt cnenapn, nyxno naxt menxnyrt na ero nmenn. Venrect, uro n cnyuae Windows ]an nmeer pacmnpe- nne .pl, nocxontxy naxer ActiveState Perl ncnontsyer nmenno +ro pacmnpenne nx acco- nnnponannx ]anon cxpnnron c nnrepnperaropom Perl. Ecnn nt paoraere n onepannonno cncreme MS-DOS, ro, npeopasonan c nomomtm yrnnnrt pl2bat.bat Perl-cnenapn x ]opme xomannoro ]ana (cm. pasen Venrect, uro cnenapn cmoxer narn Perl panee n +ro rnane), npocro sanycrnre +ror ]an ns xomanno crpoxn C:\>he11o.baf Kak ucnonusoeafu koraupuyk cfpoky urot sanycrnrt cnenapn na ntnonnenne c nomomtm ntsnannoro n xnnom nne nnrepnpe- raropa, yenrect, uro nporpamma c nmenem perl naxonrcx n onom ns nyre noncxa. 3arem nnenre n xomanno crpoxe xomany perl. Ona moxer nmert cneymmn cnnraxcnc: pe1 |-s1uu] |-hv] |-v|conf1gva]] |-cW] |-d|:debugge]] |-D|numbe/11sf]] |-pna] |-Ipaffen] |-1|ocfa1]] |-0|ocfa1]] |-ld1] |-m|-]modu1e] |-M|-]modu1e...] |-P] |-5] |-x|d1]] |-1|exfens1on]] |-e command] |--] |pogamf11e] |agumenfs] (Knmun n xnaparntx cxoxax xnnxmrcx neoxsarentntmn. O nx nasnauennn peut no- er anee n pasene Knmun xomanno crpoxn +ro rnant.) Hpn sanycxe nnrepnperaropa Perl cnenapn nmercx cneymmnm opasom: Crp.27 Ecnn saan xnmu -e, ro xomant nx Perl yxastnamrcx n xomanno crpoxe cneom sa +rnm xnmuom. Cnenapn epercx ns ]ana, xoropt cronr nepntm n cnncxe napamerpon xomanno crpoxn (n namem npnmepe +ro programfile]). Ecnn n xauecrne nmenn ]ana saan e]nc (-), ro cnenapn cunrtnaercx nocrpouno ns cranaprnoro noroxa nnoa. Paccmorpnm xaxt ns +rnx cnocoon. Hcnontsonanne xnmua -e nosnonxer saanart xomant Perl n sanycxart nnrepnperarop ns ono n ro xe xomanno crpoxn. (B nexoroptx cncremax nt moxere ncnontsonart ne- cxontxo xnmue -e, urot nepeart necxontxo noxon xoman.) Hanpnmep: xpe1 -e p1nf "he11o!\n he11o! Onaxo c xantuxamn nao trt ocropoxnee, rax xax n pasntx onepannonntx cncremax onn paoramr no-pasnomy. Bor, nanpnmep, xax ntrnxnr ra xe camax xomana n MS-DOS: C:\>pe1 -e "p1nf \" he11o!\n\"" (Oparnre nnnmanne na escape-nocneonarentnocrn \", samenxmmne nonte xantuxn n rene xomant Perl. Fonee nopono +rn xoncrpyxnnn paccmarpnnamrcx n pasene Ocno- nt ]opmarnponannx rexcra anee n +ro rnane.) Koneuno, moxno nomecrnrt cnenapn n rexcront ]an n nepeart nnrepnperaropy nmx ]ana. Hanpnmep, ecnn coepxnmtm ]ana hello.pl xnnxercx p1nf "he11o!\n" (marnuecxax crpouxa c manonom !# onymena, rax xax nnrepnperarop sanycxaercx n xnnom nne), ro +ror cnenapn sanycxaercx xax xpe1 he11o.p1 he11o! Moxno raxxe nnonrt xomant Perl nocrpouno c xnannarypt, ecnn nmecro nmenn ]ana yxasan e]nc: xpe1 - (3ect axe e]nc moxno onycrnrt, nocxontxy raxo mero npenonaraercx no ymonua- nnm.) Tora nnrepnperarop yer xart, noxa nt ne nneere cnenapn: xpe1 - p1nf "he11o!\n" Hnrepecnt nonpoc: a xax nnrepnperarop onpeennr, uro cnenapn nneen n nopa npn- crynnrt x ero ntnonnennm 3ro nponsoer, xora na +xpane noxnnrcx nncrpyxnnx __END__, osnauammax xonen rexcra: xpe1 - p1nf "he11o!\n" LND he11o! Taxo mero osnauaer ntnonnenne ncero cnenapnx nennxom. Hpn recrnponannn +]]exrnnnee nnonrt xomant no ouepen n ntnonnxrt nx n nnrepaxrnnnom pexnme. nx +roro neoxo- nmo cosart mnnn-nnrepnperarop Perl (na Perl J), uem mt n samemcx n cneymmem pasene. Crp.28 Hufepakfueuoe eunonueuue cueuapuee Perl Bo npemx recrnponannx moxer norpeonartcx nocneonarentno ntnonnxrt xomant Perl no mepe nx nnoa n nanmart na +xpane pesyntrar nx ecrnnx. nx +roro neoxonmo nanncart Perl-oonouxy. Bor neontmo paorammn npnmep: #!/us/1oca1/b1n/pe15 -W # use Pe1 5 W1fh Wan1ngs use sf1cf # kequ1e va1ab1e dec1aaf1ons, efc. my $counf = 0 # $counf used fo mafch {}, {}, efc. my $sfafemenf = "" # sfafemenf ho1ds mu1f1-11ne commands 1oca1 $5lG{WAkN} = sub{} # suppess eo epof1ng Wh11e {<>} { # Accepf 1npuf fom fhe keyboad chomp # C1ean-up 1npuf Wh11e {/{|\{1\|/g} {$counf++} # Wafch fo {, {, efc. Wh11e {/}|\}1\]/g} {$counf--} # Wafch fo }, }, efc. $sfafemenf .= $ # Append 1npuf fo cuenf sfafemenf 1f {!$counf} { # Lva1uafe on1y 1f {,{ mafches }, } eva1 $sfafemenf # Lva1uafe Pe1 sfafemenf 1f {$0} {p1nf "5ynfax eo.\n"} # lf eo ... $sfafemenf = "" # C1ea fhe cuenf sfafemenf $counf = 0 # C1ea fhe counfe } } 3ror cnenapn npecrannxer coo npocremym Perl-oonouxy, xoropax moxer opaart- nart cocrannte xomant, n rom uncne n re, uro oxnartnamr necxontxo crpox nnoa. On pao- raer sa cuer ntsona ]ynxnnn Perl eval, xoropax ntuncnxer ntpaxenne, nepeannoe e n xaue- crne aprymenra. 3ra nporpamma raxxe sanomnnaer nnonmt rexcr (pasnrt na necxontxo crpox nnoa) o rex nop, noxa uncno orxptnammnx cxoox ne yer coornercrnonart uncny saxptnammnx cxoox, n nnmt sarem opamaercx x ]ynxnnn eval. (o nexoropo crenenn +ro rapanrnpyer, uro pasnroe na necxontxo crpox ntpaxenne oecmeume.iuo nneeno nonno- crtm. Onaxo nnnmarentnt unrarent, esycnonno, samernr, uro raxax oonouxa ne enaer pasnnunx mexy pasnnuntmn rnnamn cxoox n ne nponepxer npannntnym nx nnoxennocrt.) Hanpnmep, moxno sanycrnrt +ror cnenapn n nnecrn xomany, xoropax sanocnr rexcr n nepe- mennym Perl (ornocnrentno nepemenntx cm. cneymmym rnany): $fexf = "he11o!\n" a sarem pacneuarart ee: $fexf = "he11o!\n" p1nf $fexf Pesyntrar noxnnrcx na +xpane nemenenno: $fexf = "he11o!\n" p1nf $fexf he11o! Touno rax xe moxno nponepnrt, xax ntnonnxmrcx mnorocrpounte xomant (rax xax xa- xax xomana ntnonnxercx, xora ona nonnocrtm nneena, pesyntrar paort xomant print noxnnxercx na +xpane mrnonenno): $va1ab1e1 = 1 $va1ab1e2 = 2 p1nf $va1ab1e1 + $va1ab1e2 4 Ananornuntm opasom opaartnamrcx cocrannte xomant, sannmammne onee ono crpouxn: Crp.29 fo {$1oop1ndex = 1 $1oop1ndex <= 5 $1oop1ndex++} { p1nf "he11o!\n" } he11o! he11o! he11o! he11o! he11o! urot ntrn ns oonouxn, nnenre xomany exit. Cranaprnte oonouxn Perl (noonte anno) tnamr nonesnt npn recrnponannn xo- porxnx cnenapnen, no ne rpeymr cosannx orentntx ]anon n nx sarpysxn n nnrep- nperarop. (Oparnre nnnmanne, uro annax oonouxa - nnmt npnmep, a nnxonm opasom ne saxonuennax oonouxa Perl. B uacrnocrn, ecnn recront cnenapn coepxnr xomany eval, nt ncrpernrect c ceptesntmn nponemamn, rax xax oonouxa cama ncnontsyer xo- many eval nx nomaronoro ntnonnennx xoman Perl.) Knku koraupuo cfpoku Hnrepnperarop Perl moxer ncnontsonart nneuarnxmmee xonnuecrno ononnnrentntx xnmue, ynpannxmmnx ero paoro: pe1 |-s1uu] |-hv] |-v|:conf1gva]] |-cW] |-d|:debugge]] |-D|numbe/11sf]] |-pna] |-Ipaffen] |-1|ocfa1]] |-0|ocfa1]] |-ld1] |-m|-]modu1e] |-M|-] modu1e...] |-P] |-5] |-x|d1]] |-1|exfens1on]] |-e command] |--] |pogamf11e] |agumenfs] ... (xax otuno, xnaparnte cxoxn yxastnamr na neoxsarentnocrt coornercrnymme xon- crpyxnnn). Hrax, uro xe enamr nce +rn xnmun Onn nepeuncnent sect n an]annrnom nopxxe (mno- rne, onaxo, npeocrannxmr nosmoxnocrn, xoropte mt ocynm nosnee): -0 uqpi] saaer pasennrent nxontx sannce xax cnmnon, saannt noctmepnuntm npecrannennem (+ror pasennrent raxxe coepxnrcx n cnennantno nepemenno Perl $/). Ho ymonuannm n xauecrne pasennrenx ntcrynaer cnmnon \n. Ecnn xnmu -0 saan es nocne- ymmnx nn]p, ro ncnontsyercx cnmnon \0. -a nxnmuaer pexnm anropasnnxn (ecrnyer rontxo npn nannunn xnmue -p n -n). Hpn +rom pexnme nxonte crpoxn pasnnamrcx na ]parmenrt no rpannne cnona n nomemamrcx n cnennantnt maccnn F (ro ecrt nmecro cxanxpno nepemenno $_ nao yer ncnontsonart ero). -c sacrannxer Perl nponepxrt cnnraxcnc nxonoro cnenapnx n sanepmart paory es ero ntnonnennx. Bnpouem, noxn BEGIN n END (xoncrpyxropt n ecrpyxropt moyne) yyr ntnonnent n n +rom cnyuae. -d sanycxaer cnenapn no ynpannennem ncrpoennoro ornaunxa Perl. -d:u+ sanycxaer cnenapn no ynpannennem ornaunxa nnn rpaccnponmnxa, nncrannn- ponannoro xax Devel::nun (ro ecrt ornaunx cymecrnyer xax nomoynt moynx Devel, nmemmn yxasannoe nmx cm. rnany 15). -D:uc.o/cnucor] ycranannnnaer ]narn pexnma ornaxn (aprymenr nonunax macxa nnn cnncox ]naron). Fonee nopono ]narn ornaxn paccmarpnnamrcx n rnane 17. -e ro+auoa nnn -e ro+auoi... ncnontsyercx nx nenocpecrnennoro ntnonnennx xo- Crp.30 man Perl, saanaemtx npxmo n xomanno crpoxe. B nexoroptx cncremax moxno ncnontso- nart ononpemenno necxontxo xnmue -e, pasnnax cnncox xoman Perl na noxn. -Fuao.ou nnn -F/uao.ou/ saaer manon nx pasnnxn nxontx crpox na noxn, xora saant xnmun -n nnn -p, a raxxe xnmu -a. Cnmnont naxnonno ueprt, oxpyxammne manon pasnnxn, neoxsarentnt. -h ntnonr xparxn cnncox xnmue c noxcnennxmn. -i nnn -ipacuupeuue paspemaer peaxrnponart na mecre ]ant, orxptrte ns cran- aprnoro noroxa nnoa (xoncrpyxnnx <> cm. anee pasen urenne noroxa nnoa). Pexnm peaxrnponannx na mecre osnauaer, uro nsmenennx nnocxrcx nenocpecrnenno n orxptrt ]an, xora nt ntnonre annte n norox nnoa STDIN. Ecnn nocne xnmua yxasano pacmn- penne, ro Perl oecneunnaer pesepnnym xonnm peaxrnpyemoro ]ana, cosanax ]an c sa- anntm pacmnpennem n rem xe camtm nmenem. Ecnn xe pacmnpenne ne yxasano, ro npemen- nax xonnx ]ana, cosannax nnrepnperaropom, yanxercx nocne sanepmennx paort. -Irama.oe - saaer xaranor, n xoropom Perl nmer moynn. B xomanno crpoxe moxer trt saano necxontxo napamerpon -I. -l ynpannxer opaorxo cnmnonon nauana nono crpoxn. Ecnn +ror xnmu saan nme- cre c -p nnn -n, Perl npn nnoe anromarnuecxn yanxer cnmnon nauana nono crpoxn (sa- annt n cnennantno nepemenno $/). Ononpemenno npn ntnoe oneparopom print ror xe cnmnon oannxercx n xonen crpoxn. -luqpi n ononnenne x ]ynxnnxm npetymero xnmua nosnonxer saart n xnnom nne cnmnon, ntcrynammn n xauecrne nauana nono crpoxn (n sanecrn ero n nepemennym $/) nx +roro ocrarouno saart noctmepnunoe uncno, onpeenxmmee xo cnmnona. Ho ymonuannm n xauecrne pasennrenx crpox ncnontsyercx cnmnon \n. -m-]+oov., -M-]+oov. nnn -M-]+oov.u... es snaxa e]nca +ror xnmu noxnm- uaer yxasannte moynn. Ecnn xnmu ncnontsyercx co snaxom e]nca, yxasannte moynn ncxnmuamrcx ns cnenapnx. ecrnne xnmua es e]nca ananornuno nparme Perl use mo- ynt n nauane cnenapnx. Coornercrnenno, ecrnne xnmua c e]ncom ananornuno nparme no moynt. Hpn crapre nnrepnperaropa n xomanno crpoxe moxno yxastnart necxont- xo napamerpon -m nnn -M. -n Perl cunraer, uro cnenapn saxnmuen n nnxn while (<>)(cm. anee pasen urenne noroxa nnoa ornocnrentno xoncrpyxnnn <>). Hanpnmep, cneymmax xomana ntnonr na +xpan coepxnmoe ]ana file.txt: pe1 -ne "p1nf" f11e.fxf -p Perl cunraer, uro cnenapn saxnmuen n cneymmn nnxn (ero paora nmnrnpyer peaxrop sed): Wh11e {<>} { ... |ceuapuu] ... } conf1nue { p1nf o d1e "-p desf1naf1on: $!\n" } -P nponycrnrt cnenapn uepes npenponeccop xomnnnxropa C. 3ro nosnonxer nc- nontsonart npexrnnt C nna #define n #include, a raxxe oneparopt ycnonno xomnnnx- nnn. Hocne npenponeccopa pesyntrar nocrynaer na nno Perl. Crp.31 -s paspemaer pasopart xnmun, nepeannte cnenapnm n xauecrne napamerpa (cnncox arguments, yxastnaemt n xomanno crpoxe nocne nmenn ]ana). Hanpnmep, cneym- max xomana neuaraer coomenne Found the switch, ecnn npn crapre cnenapnm tn sa- an xnmu -www: 1f {$WWW} {p1nf "Iound fhe sW1fch\n"} -S sacrannxer Perl ncnontsonart nepemennym oxpyxennx PATH nx noncxa cnenapnx. -T axrnnnsnpyer nponepxy meuentx anntx (nponepxa cexpernocrn ocryna). uacro rpeyercx xax cocrannax uacrt npn CGI-nporpammnponannn. -u sacrannxer Perl sanncart amn namxrn (core dump) nocne xomnnnxnnn cnenapnx. -U - paspemaer Perl ntnonnxrt neesonacnte onepannn (nanpnmep, yanenne xaranoron). -v ntnonr nomep nepcnn, nonepcnn n nomep narua Perl, a raxxe nnar]opmosann- cnmym nn]opmannm o nnrepnperarope (nocnenxx moxer trt ouent cymecrnenno). -V noponax pacneuarxa rexyme xon]nrypannn Perl (ro ecrt ncex xon]nrypann- onntx nepemenntx). -Y.u+ pacneuarxa xon]nrypannonno nepemenno c yxasanntm nmenem. -w ntnonrt npeynpexammne coomennx (cm. raxxe cneymmn xnmu). Pexo- menyercx ncera sanycxart Perl c +rnm xnmuom. -x nnn -xrama.oe yxastnaer Perl, uro cnenapn coepxnrcx nnyrpn coomennx. Bno ne yer opaartnartcx, noxa nnrepnperarop ne ncrpernr crpouxy c manonom !# n nocrpoxo perl. Konen opaartnaemoro rexcra connaaer c xonnom ]ana nnn cnnrax- cnuecxo xoncrpyxnne __END__. Ecnn yxasan xaranor, ro Perl ntnonnxer xomany nepe- xoa x xaranory nepe sanycxom cnenapnx. -- -+rn na e]nca xnnxmrcx neoxsarentntmn. Onn osnauamr xonen cnncxa xnmue, nepeanaemtx nnrepnperaropy. Knk - u npoeepka cuufakcuca Hpn paore c Perl cronr ncera saanart xnmu -w. Fontmnncrno snaroxon crnnx xstxa Perl ]anarnuno noxnonxmrcx emy. raxxe pexomenym yxastnart +ror xnmu. Knmu -w ntno- nr npeynpexammne coomennx no mnornm nonoam. Cpen nnx: nmena nepemenntx, ynomnnammnxcx rontxo onn pas, cxanxpnte nepemennte (npoe npocrtx nepemenntx), xoropte ncnontsymrcx o nnnnna- nnsannn, nepeonpeenenne nonporpamm, cctnxn na neonpeenennte ecxpnnropt ]anon, ecxpnnropt ]anon, orxptrtx rontxo nx urennx, no nx xoroptx nponsnonrcx nontr- xa sanncn, snauennx, ncnontsyemte xax uncna, no ntrnxxmne nnaue, uem uncna, ncnontsonanne maccnna xax cxanxpno nepemenno, nonporpammt c rnynno pexypcnn ontme 100. Crp.32 Tekcfoeu eeop u eueop c norouk cfaupapfuux peckpunfopoe qanoe Per paccmarpnnaer nno n ntno anntx xax noroxn, a paora c +rnmn noroxamn oprannsy- ercx uepes ecxpnnropt ]anon. ecxpnnrop ]ana +ro npocro snauenne, xoropoe n Perl coornercrnyer ]any. Hporpamma nonyuaer ecxpnnrop, xora orxptnaer ]an. nx paort c rexcrom ncnontsymrcx rpn npeonpeenenntx ecxpnnropa; STDIN cranaprnt norox nnoa. STDUT cranaprnt norox ntnoa. STDE cranaprnt norox ntnoa nx coomenn o omnxax. Ho ymonuannm nce rpn ]ana coornercrnymr repmnnany. B +ro rnane (nanpnmep, n cne- ymmem pasene) mt orpannunmcx npeonpeenenntmn ecxpnnropamn ]anon, ncnontsyx nx ntnoa rexcra STDUT. Bueop fekcfa urot ntnecrn rexcr n ]an (nxnmuax cranaprnt norox ntnoa STDUT), ncnontsyercx xomana print. Ona nmeer rpn ]opmt: p1nf ecxpun1op cnucox p1nf cnucox p1nf Ecnn ecxpnnrop ]ana ne saan, ncnontsyercx STDUT. Ecnn ne saan cnncox (xoropt moxer cocroxrt n ns onoro +nemenra), Perl ntnonr coepxnmoe cnennantno nepemenno $_. (Ona no ymonuannm ncnontsyercx nx coxpanennx pesyntraron nocnene onepannn ure- nnx ns noroxa nnoa cm. anee pasen urenne noroxa nnoa.) Hpocremn npnmep, n xoropom n norox ntnoa ornpannxercx cnono Hello n cnmnon xonna crpoxn: p1nf "he11o\n" he11o! uynxnnx print paoraer co cnncxom aprymenron (cnncxn Perl yyr paccmorpent n cneym- me rnane). 3ro snaunr, uro e moxno noart na nxo cnncox +nemenron, pasenenntx sanx- rtmn, n onn yyr naneuarant: p1nf "he11o", " fhee!\n" he11o fhee! Ormernm, uro n Perl rexcront ntno moxer trt onontno nsompenntm, naroapx cnenn- antntm ]opmaram n xomane printf (cm. rnany 11). Reafu uorepa fekye cfpoku cueuapun u ureuu cueuapun urot ncnontsonart nomep crpouxn cnenapnx, xoropym n annt momenr opaartnaer Perl, nao cocnartcx na nero c nomomtm xoncrpyxnnn INE__.Touno rax xe moxno ntnecrn nmx ]ana, n xoropom xpannrcx cnenapn, ecnn ncnontsonart xoncrpyxnnm__FIE__. Hpnmep: xpe1 -e "p1nf LlNL" 1 Crp.33 Roefop fekcfa npu neafu Moxno nonropnrt ntno crpoxn necxontxo pas, ne xonnpyx ee n rene cnenapnx n ne ncnont- syx oneparop nnxna. nx +roro cnyxnr oneparop nonropennx, xoropt ntrnxnr cneymmnm opasom: p1nf "he11o!\n" x 5 he11o! he11o! he11o he11o! he11o! Hanpnmep, nor rax ntnonrcx ropnsonrantnax uepra ns e]ncon: p1nf "-" x 30 ------------------------------ Ocuoeuue koraupu qoprafupoeauun C nomomtm escape-nocneonarentnocre n Perl moxno ntnonnxrt nexoropte xomant ]op- marnponannx. Escape-noc.eooeame.iuocmi +ro naop cnmnonon, xoroptm npemecrnyer oparnax xocax uepra (). Ona ocotm opasom opaartnaercx nnyrpn crpoxn, orpannuenno nontmn xantuxamn (pasnnna mexy crpoxamn, orpannuenntmn nontmn xantuxamn, n crpoxamn, orpannuenntmn anocrpo]amn, paccmarpnnaercx n cneymme rnane). Hexoropte escape-nocneonarentnocrn npnneent n ran. 1.1. Hanpnmep, nor xax naneuarart nonte xantuxn n rexcrono crpoxe: p1nf "\"he11o!\"\n" "he11o!" Hocuasua. Cu+eo.i , $ u ro+ouuauu euoa uoeumuquramop u ] marre uaoo uaoupami c no+ouim escape-noc.eooeame.iuocme, mar rar euvmpu cmporu, oepauu:euuo oeoui+u raei:ra+u, omu cu+eo.i uumepnpemupvmmc ocooi+ oopaso+ (e :acmuocmu, cu+eo. rar ua:a.o escape-noc.eooeame.iuocmu.) A nor rax ncnontsyercx raynxnnx: p1nf "he11o\ffom\fPe1.\n" he11o fom Pe1. 3ect c nomomtm cnmnonon nono crpoxn ntnonrcx cpasy necxontxo crpouex: p1nf "he11o\nfom\nPe1.\n" he11o fom Pe1. 3ro nnmt asonte xomant ]opmarnponannx, n n Perl nosmoxnt ropaso onee cnoxnte xon- crpyxnnn. B +rom xstxe ncera cymecrnyer eme onn cnoco ntnonnennx ro nnn nno one- pannn c rexcrom, n xonne xonnon, on cosanancx nmenno xax xstx nx opaorxn rexcron. 1abnua 1.1. 1abnua 1.1. 1abnua 1.1. 1abnua 1.1. hexo1opue escape-nocneoaa1enuuoc1u Cuuaon Cuuaon Cuuaon Cuuaon 3uaueuue 3uaueuue 3uaueuue 3uaueuue \` Ouuouuan xaauuxa, unu anoc1po {`} \ Obpa1uuu anoc1po {} \" aouuan xaauuxa {"} \\ Obpa1uan xocan uep1a {\} \$ Cuuaon onnapa {$} \0 Cuuaon af-xouuepuecxoe {0} \e Cuuaon escape {L5C} Crp.34 \f Cuuaon 1abynnuu {1A8, h1} \v Cuuaon ropuaou1anuuou 1abynnuu {v1} \n Cuuaon uoaou c1poxu {LI} \ Cuuaon aoaapa1a xape1xu {Ck} \f Cuuaon nporoua c1pauuu {II} \b Cuuaon aabon {85} \a Cuuaon aayxoaoro curuana {8LL} \033 8ocuuepuuuuu cuuaon \x1b mec1uaa1epuuuuu cuuaon \c| xnpaannk|uu cuuaon {confo1 chaacfe} Bueop ueqoprafupoeauuoro fekcfa: ecfpoeuuue pokyreufu Perl nosnonxer ntnonrt rexcr n rounocrn rax, xax on napan n rene cnenapnx. urot orme- rnrt nauano noonoro rexcronoro ]parmenra (n Perl onn nastnamrcx here-documents), nc- nontsyercx xomana <<, sa xoropo cneyer nexoropax merxa (n namem npnmepe +ro ED, uro xnnxercx coxpamennem or end-of-document): p1nf <<LOD 1h1s 1s a "hee" documenf. LOD Texcr, or]opmarnponannt n rene cnenapnx, saxanunnaercx nenrn]nxaropom, yxasanntm n ero nauane. (Oparnre nnnmanne, uro n nepno crpoxe nocne nenrn]nxaropa, mapxnpymme- ro nauano ncrpoennoro rexcra, cronr rouxa c sanxro, a nocne nenrn]nxaropa, mapxn- pymmero xonen rexcra, rouxn c sanxro ner.) B pesyntrare na +xpan yer ntneeno: 1h1s 1s a "hee" documenf. Korreufapuu Hpn cosannn cnoxntx cnenapnen nyxno oannxrt xommenrapnn cnoeopasnte na- nomnnannx camomy cee, uro nmenno enaer annt xo. 3ro enaer crpyxrypy cnenapnx onee npospauno n oneruaer paory c nnm. Hpn +rom cam Perl xommenrapnn nrnopnpyer. Kommenrapnn Perl naunnamrcx c cnmnona . Perl nrnopnpyer nect rexcr, nymn or cnm- nona o xonna crpoxn. Bor npnmep cnenapnx Perl-oonouxn c xommenrapnxmn, pasxc- nxmmnmn nasnauenne xoa: #!/us/1oca1/b1n/pe15 -W # use Pe1 5 W1fh Wan1ngs use sf1cf # kequ1e va1ab1e dec1aaf1ons, efc. my $counf = 0 # $counf used fo mafch {}, {}, efc. my $sfafemenf = "" # sfafemenf ho1ds mu1f1-11ne commands 1oca1 $5lG{WAkN} = sub{} # suppess eo epof1ng Wh11e {<>} { # Accepf 1npuf fom fhe keyboad chomp # C1ean-up 1npuf Wh11e {/{|\{|\|/g} {$counf++} # Wafch fo {, {, efc. Wh11e {/}|\}|\]/g} {$counf--} # Wafch fo }, }, efc. Crp.35 $sfafemenf .= $ # Append 1npuf fo cuenf sfafemenf 1f {!$counf} { # Lva1uafe on1y 1f {, { mafches }, } eva1 $sfafemenf # Lva1uafe Pe1 sfafemenf 1f {$0} {p1nf "5ynfax eo.\n"} # lf eo ... $sfafemenf = "" # C1ea fhe cuenf sfafemenf $counf = 0 # C1ea fhe counfe } } Hocuasua. Bi +oreme er.m:umi np+o e me.o npoepa++i oorv+eumaum (POD Plain Old Document), onuci- eamuvm, rar uaoo paoomami c eaue npoepa++o u.u +oov.e+. Oua ovoem ueuopupoeamic npu saepvsre, uo ei eceeoa +oreme use.e:i ee e euoe ASCII-qa.a u.u oare e euoe pas+e:euuoeo HTML-qa.a c no+ouim vmu.um, exoouux e cocmae Perl. Kar omo coe.ami, paccrasieaemc e e.aee 15 (pasoe. orv+eumupoeauue +oov.e). -feuue nofoka eeopa Panee n +ro rnane mt nnenn, uro nx ntnoa rexcra ncnontsyercx ]ynxnnx print, no xax eeecmu rexcr Ero moxno unrart ns cranaprnoro noroxa nnoa STDIN c nomomtm yrnontx cxoox < n >. B cneymmem npnmepe nnxn while (paccmarpnnaemt n rnane 5) nomoraer no- crpouno cunrtnart nnonmt nontsonarenem rexcr, sanomnnart ero n nepemenno $temp n sarem ntnonrt na +xpane: Wh11e {$femp = <51DlN>} { p1nf $femp } Ecnn sanycrnrt +ror cnenapn n nnecrn c xnannarypt cnono Hello, cnenapn nonropnr ero na +xpane: he11o! he11o! Ha camom ene (xax +ro otuno n tnaer n Perl) onrtcx noonoro +]]exra moxno n onee npocrtm nyrem. (B Perl nmeercx cnennantnoe xapronnoe ntpaxenne: There is more than one way to do it Cenart uro-nno moxno necxontxnmn cnocoamn, co- xpamaemoe o TMTOWTDI n nponsnocnmoe npnmepno xax Tim Toady.) nx +roro npn- ercx sarnxnyrt n cneymmn pasen. Cneuuanuuan nepereuuan $_ Kora xoncrpyxnnx <STDIN> ncnontsyercx es yxasannx, xya nomecrnrt nosnpamaemoe snauenne, Perl anromarnuecxn sannctnaer ero n cnennantnym nepemennym $_. Mnorne ]ynx- nnn Perl no ymonuannm nonyuamr aprymenrt ns nee (ecnn nontsonarent ne saan pyroro nxonoro snauennx). Hanpnmep, xomana print es aprymenron ntneer coepxnmoe nmenno $_. (Ecrt raxxe macca pyrnx cnennantntx nepemenntx nanpnmep, $!, xoropax xpannr nn]opmannm o nocnene omnxe, ecnn ra nponsomna. Fonee nopono o cnennantntx ne- pemenntx paccxastnaercx n rnane 9.) Ha camom ene xnmuenoe cnono STDIN n yrnontx cxoxax moxno onycrnrt nx nyc- rtx yrnontx cxoox no ymonuannm npenonaraercx ecxpnnrop STDIN. (B Perl nmeercx macca npannn no ymonuannm, noontx +romy. 3ro enaer nporpammt npome nx +xcnep- ron, no sanyrannee nx nonnuxon. Bosmoxno, nmenno no+romy Perl rax npannrcx +xcnep- ram.) Tem camtm xo ns npetymero pasena moxer trt sanncan xax Wh11e{<>} { p1nf } Crp.36 3ro noncrnny xparxax sannct nx ananornuntx ecrnn cnenapnx Wh11e {$ = <51DlN>} { p1nf $ } Oucfka eeepeuuoro fekcfa uepes cranaprnt norox STDIN unraercx nce, uro nanpaercx c xnannarypt nnn nocry- naer ns ]ana, nxnmuax cnmnon nono crpoxn n xonne. urot nsannrtcx or nero, moxno ncnontsonart ]ynxnnm chop nnn chomp. Bor xax ntrnxnr ]ynxnnx chop: chop nepeueuuan chop cnucox chop Ona orcexaer nocnenn cnmnon n crpoxe n nosnpamaer ero n xauecrne pesyntrara. Ecnn ony- meno nmx nepemenno, ]ynxnnx paoraer co cnennantno nepemenno $_. Hanpnmep, cnena- pn, Wh11e {<>} { p1nf } ntnonr na +xpane coepxnmoe noroxa nnoa, nxnmuax cnmnont nono crpoxn. Ecnn xe ncnontsonart raxo napnanr: Wh11e {<>} { chop p1nf } ro cnmnonon-napasnron nono crpoxn ne yer. Bmecro ]ynxnnn chop pexomenyercx ncnontsonart chomp, xoropax ntstnaercx anano- rnuntm opasom: chomp nepeueuuan chomp cnucox chomp 3ra ]ynxnnx onee esonacna ona yanxer ns xonna crpoxn cnmnont, coorner- crnymmne rexymemy snauennm cnennantno nepemenno Perl $/, xpanxme cnmnon, nt- crynammn n xauecrne pasennrenx nxontx sannce. Ho ymonuannm ncnontsyercx cnm- non nono crpoxn \n. uynxnnx chomp nosnpamaer uncno yanenntx cnmnonon. Otuno ona ncnontsyercx nx yanennx cnmnona nono crpoxn ns sanncn, npounranno uepes no- rox nnoa. Ecnn orcyrcrnyer nmx nepemenno, opaartnaercx $_. Kak useafu uerepneuuoro sakpufun okua MS-DOS e Windos 95/98/NT Ecnn nt ncnontsyere Perl nx Windows 95/9 nnn Windows NT ro, ouennno, ormernnn ony paspaxammym erant. Hocne nonoro menuxa no nmenn ]ana c pacmnpennem .pl noxnnx- ercx oxno ceanca MS-DOS; n nem ntnonnxercx cnenapn, no nemenenno no ero sanepmennn oxno saxptnaercx, ne ocrannxx nnxaxoro manca npocmorpert ntneennym nn]opmannm. 3ro moxno ncnpannrt, ecnn sacrannrt cnenapn xart nnoa c xnannarypt nocne sanep- mennx. nx +roro ocrarouno oannrt n xonen nporpammt ne crpouxn: p1nf "he11o!\n" Crp.37 p1nf "Pess <Lnfe> fo co p1nf "Pess <Lnfe> fo co p1nf "Pess <Lnfe> fo co p1nf "Pess <Lnfe> fo con nn nf1nue... f1nue... f1nue... f1nue... " " " " < << <51DlN 51DlN 51DlN 51DlN> >> > Ecrecrnenno, <STDIN> moxno samennrt npocro na <>: p1nf "he11o!\n" p1nf "Pess <Lnfe> fo conf1nue..." <> Crp.38 Fnana Ckannpume nepeueuume u cnucku
Kopo1ko B +ro rnane mt naunnaem paorart c anntmn. Perl ocoenno xopom no uacrn opaorxn anntx, n n +ro xnnre nt naere nemano nn]opmannn no anno reme. Ceuac mt no- npoyem pasopartcx, xax Perl paoraer c nymx xonxperntmn rnnamn anntx: cxanxp- ntmn nepemenntmn n cnncxamn. Ckannpuue nepereuuue Cxanxpnte nepemennte +ro ro, uro n ontmnncrne xstxon nporpammnponannx Hast- naercx npocrtmn nepemenntmn (n Perl onn raxxe nastnamrcx cra.pa+u). Onn xpanxr onn +nemenr anntx: uncno, rexcronym crpoxy nnn cctnxy (o cctnxax n Perl cmorpn rnany ). Hx nastnamr cxanxpamn, urot ornnuart or xoncrpyxnn, cnocontx xpannrt necxontxo +nemenron (nanpnmep, maccnnon). Hocuasua. B uav:uix mep+uuax cra.p omo npocmoe :uc.oeoe sua:euue, e mo epe+ rar eermopi +oevm u+emi uecro.iro :uc.oeix ro+noueum. Oouo+epuie +accuei e npoepa++upoeauuu :acmo uasieamm eermopa+u. Hmx cxanxpno nepemenno naunnaercx c cnmnona $. 3ro moxer noxasartcx crpanntm, no Perl ncnontsyer nmenno +ror cnoco. Tem camtm nn ona ns nepemenntx ne yer xon- ]nnxronart c sapesepnnponanntmn xnmuentmn cnonamn Perl (ro ecrt ncrpoenntmn n xstx nenrn]nxaropamn). 3nauennx cxanxpntm nepemenntm npncnannamrcx c nomomtm oneparopa , nanpnmep: $sca1a1 = 5 $sca1a2 = "he11o fhee!" Cnucku Kax cneyer ns nasnannx, cnncxn +ro cnncxn +nemenron anntx. 3rn +nemenrt ne ox- sarentno xnnxmrcx cxanxpamn, onn moryr trt n maccnnamn, n x+m-rannnamn (oa +rn rnna anntx yyr paccmorpent n cneymmem pasene), a raxxe cocrnenno cnncxamn. B ornnune or cxanxpon nnn maccnnon, nx cnncxon ne cymecrnyer cnennantnoro rnna anntx. Onaxo nonxrne cnncxa n Perl ouent naxno, n mt yem ncnontsonart ero na ncem nporxxennn xnnrn. Cnncox +ro cnnraxcnuecxax xoncrpyxnnx, oennxmmax pasposnennte +nemenrt anntx. Hpn onpeenennn cnncxa +nemenrt anntx pasenxmr- cx sanxrtmn. Hanpnmep, mt neuaraem noyxnenno cnono Hello c nomomtm ]ynxnnn print, xoropax ymeer opaartnart aprymenrt, saannte n nne cnncxa: p1nf "h", "e", "1", "1", "o" he11o Oparnre nnnmanne, uro cnncox H, e, l, l, o nentsx npncnonrt orentno nepe- Crp.39 menno, rax xax n Perl n xnnom nne nepemenntx raxoro rnna ne cymecrnyer 1 . Bcrpoennte ]ynxnnn Perl pasenxmrcx na ne rpynnt. Onn ncnontsymr cxanxpnte ap- rymenrt, a pyrne cnncxn (xorx na camom ene mnorne ]ynxnnn nonnmamr n ro n py- roe). Orxya xe Perl snaer, xora nnrepnpernponart annte xax cxanxp, a xora xax cnncox On npnnnmaer pemenne, ncxox ns roumercma. B Perl cymecrnymr na ocnonntx xonrexcra cxanxpnt n cnncount. Hmeercx n onee ronxax nepapxnx xonrexcron. Ha- npnmep, uncnono n crpoxont xonrexcrt xnnxmrcx cxanxpntmn. Taxnm opasom, xora Perl oruoaem ncrpernrt cnncox (nanpnmep, xora ]ynxnnx onyc- xaer n xauecrne aprymenra rontxo cnncxn), annte nnrepnpernpymrcx xax cnncox. Ecnn oxnaercx cxanxpnoe snauenne, annte nnrepnpernpymrcx xax cxanxp. Ha npaxrnxe +ro osnauaer, uro neoxonmo sapanee snart, xaxne ]ynxnnn xnnxmrcx cxanxpntmn, a xaxne cnncountmn. yy yxastnart, x xaxomy rnny ornocnrcx ]ynxnnx, npn nepnom yno- mnnannn o ne n +ro xnnre, yxastnax rnn ee aprymenron. Hanpnmep, onpeenenne nx ]ynxnnn map yer nmert nn: map bnox cnucox B +rom pasene cxanxpnt n cnncount xonrexcrt nosnee yyr paccmorpent onee nopono. Bneenne saxonueno nepeem x paore c nporpammntm xoom. Henocpepc1neuume pemeuun -fo fakoe ckannpuan nepereuuan? Cxanxpnax nepemennax +ro nmx onacrn namxrn, n xoropo xpanxrcx annte. Onn mo- ryr trt uncnamn, rexcrontmn crpoxamn nnn cctnxamn (cctnxn paoramr noono ape- cy pyroro +nemenra anntx). Kpome +roro, cxanxpnax nepemennax moxer coepxart n cnennantnt rnn anntx Perl rax nastnaemt neonpeenennt rnn (cm. pasen Pa- ora c neonpeenenntmn anntmn: nenrn]nxarop undeI anee n +ro rnane). Oparnre nnnmanne, uro cxanxpt moryr xpannrt pasnnunte rnnt anntx; nntmn cnona- mn, n Perl cxanxpt ne nmemr onpeenennoro rnna (sa ncxnmuennem cctnox, nx xoroptx rnn anntx xecrxo nponepxercx). B +rom ornnune Perl or raxnx xstxon, xax C. Perl onpe- enxer, xaxo rnn anntx naxonrcx n cxanxpno nepemenno (uncno, crpoxa n r. .), oc- nontnaxct na xonrexcre ntnonnxemo onepannn. Honesno ocoennocrtm Perl xnnxercx ro, uro uncna n crpoxn n nem n nexoropom cmtcne nepasnnunmt. Tax, ecnn nocrannrt crpoxy 123.5 ram, re Perl oxnaer ynnert uncno, ro npeopasonanne x :uc.v 123.5 yer nponsneeno anromarnuecxn. Ananornuntm opasom npn neoxonmocrn uncno npeopasyercx n crpoxy. (3ro cnocrno nosnonxer npnmenxrt necranaprnte nporpammnte pemennx, nexoropte ns nnx mt ynnnm nnxe.) Hreua ckannpuux nepereuuux
1 Onaxo nt moxere cosart cctnxy na cnncox, sanecrn ee n otunym nepemennym n anee paorart c coepxnmtm cctnxn (ro ecrt cnncxom) nourn xax c otuno nepemenno. Fonee nopono o cctnxax peut noer n rnane . Hpu+e:. peo. Crp.40 Hmx, ncnontsyemoe nx cxanxpno nepemenno, moxer coepxart yxnt, nn]pt n no- uepxnnannx. Onaxo ono onxno naunnartcx c cnmnona $, uro npeornpamaer xon]nnxrt c sapesepnnponanntmn nenrn]nxaropamn Perl. Hmx nepemenno moxer trt nnnntm o 255 cnmnonon, no +ra xapaxrepncrnxa sanncnr or nnar]opmt (ro ecrt nexoropte peannsannn Perl onycxamr n onee nnnnte nmena, no nmx c nnno ne ntme 255 yer npannntno pacnosnano .moi+ napnanrom Perl). Hocxontxy nmena cxanxpntx nepemenntx ncera naunnamrcx c cnmnona $ n rem camtm ne xon]nnxrymr c sapesepnnponanntmn nenrn]nxaropamn, nx moxno sannctnart crpountmn yxnamn, xax +ro enaer ontmnn- crno nporpammncron. (Hourn nce cnyxente cnona n Perl ncnontsymr crpounte yxnt. Hcxnmuennem xnnxmrcx ecxpnnropt ]anon rnna STDIN nnn ]ynxnnn, noonte no- xy BEGIN nx naxera.) Homnnre, uro nmena cxanxpntx nepemenntx uyncrnnrentnt x pe- rncrpy: nmx $variable1 +ro ne ro xe camoe, uro nmx $Variable1. Hocne nauantnoro cnmnona $ n nmenn nepemenno moxer croxrt yxna nnn snax nouep- xnnannx. Ha camom ene moxno ncnontsonart n nn]pt, no rora nce nmx onxno cocroxrt rontxo ns nn]p. Moxno axe ncnontsonart neyxnennte cnmnont, ornnunte or snaxa nouepxnnannx, no n raxom cnyuae nmx onxno cocroxrt (xpome nauantnoro $) ponno ns onoro cnmnona xax, nanpnmep, n cnyuae cnennantntx nepemenntx Perl rnna $!. Hocuasua 1. 3a+emime, :mo, xom cra.puie nepe+euuie u ue +oevm rouq.urmoeami c sapesepeupoeauui- +u uoeumuquramopa+u Perl us-sa ua:a.iuoeo cu+eo.a $, +orem eosuuruvmi rouq.urm c u+eua+u o. oo- ermoe, ue mpeovmuu+u ua:a.iuoeo $, uanpu+ep, oecrpunmopa+u qa.oe u.u +emra+u. Umooi usoerami rouq.urma co c.vreoui+u c.oea+u, o. marux u+eu .v:ue ucno.isoeami oouv u.u uecro.iro sae.aeuix ovre. Hocuasua 2. Hepe+euuie, u+eua romopix cocmom mo.iro us uqp, cosoammc ca+u+ Perl o. cneu- a.iuix e.e (c+. e.aev 6). Ho.isoeame.i +orem :umami sua:euu omux nepe+euuix, uo ue +orem uu:e- eo u+ npuceaueami. To:uo mar re ueromopie cneua.iuie nepe+euuie Perl oocmvnui mo.iro o. :me- uu npuceoeuue uoeoeo sua:euu eisoeem ouuorv. Cnmnon $, c xoroporo naunnaercx nmx cxanxpno nepemenno, nastnaercx n Perl pastme- nontnammnm npe]nxcom (nnn, ecnn ncnontsonart xapron, funnv character). Bor pyrne pastmenontnammne npe]nxct, xoropte ncnontsymrcx n Perl: $ cxanxpnte nepemennte; x+mn (onn xe acconnarnnnte maccnnt, xax +ro pasxcnxercx n cneymmem pasene); maccnnt; nonporpammt; sannct rannnt cnmnonon rnn anntx typeglob (onee nopono o +rom rnne anntx paccxastnaercx n rnane 3). Rpuceoeuue ckannpuux nepereuuux Kax n cxanxpnym nepemennym sanocxrcx annte nx +roro ncnontsyercx oneparop npn- cnoennx. Hanpnmep, nt moxere nomecrnrt n nepemennym $variable1 snauenne 5: $va1ab1e1 = 5 Touno raxxe ntnonnxercx npncnoenne rexcrontx crpox: $va1ab1e1 = "he11o fhee!" Oneparop npncnoennx moxer ncnontsonartcx nx npncnannannx anntx nmomy oexry, croxmemy cnena or nero (rax nastnaemoe nenoe snauenne lvalue). Ecnn nt ne snaere, Crp.41 uro raxoe nenoe snauenne, npounrare cneymmn pasen. Hoono ocrantntm ]ynx- nnxm Perl oneparop npncnoennx nosnpamaer nexoropoe snauenne. 3nauennem oneparopa xnnxercx annoe, nomemennoe n coornercrnymmym onacrt namxrn: p1nf $1npuf = 123 123 -fo fakoe neeoe suaeuue? Henoe snauenne +ro +nemenr, croxmn cnena or oneparopa npncnannannx n cnyxa- mn mnmentm nx +ro onepannn. Otuno nenoe snauenne npecrannxer coo o- nacrt namxrn xomntmrepa, n xoropym, yxasan ee nmx, nt moxere sanocnrt annte. B xa- uecrne nenoro snauennx moxer ntcrynart nmax nepemennax. Ha camom ene n Perl +ry pont nnora moxer nrpart n cama onepannx npncnannannx, xax cneyer ns npnmepa: chop{$1npuf = 123} p1nf $1npuf 12 Hocnenn cnmnon orpesaercx or nepemenno $input, a ne or snauennx, nosnpamaemoro onepanne npncnoennx. 3ra xoncrpyxnnx moxer uacro ncrpeuartcx, xora neoxonmo npounrart crpoxy ns nxonoro noroxa, yannrt cnmnon xonna crpoxn n sanecrn n nepe- mennym $input, npnuem ntnonnnrt nce +ro sa onn pas: chop {$1npuf = <>} Hcnonusoeauue ucen e ckannpuux nepereuuux Oparnre nnnmanne na cneymmym sannct uncnonoro snauennx, xoropoe nosnonxer crpynnnponart nn]pt no paspxam nx onee nerxoro urennx pesyntrara: $va1ab1e1 = 1234567
1abnu 1abnu 1abnu 1abnua 2.1. a 2.1. a 2.1. a 2.1. ucnoaue 1unu auuux 1un 1un 1un 1un hpuuep hpuuep hpuuep hpuuep 3uaueuue c nnaaak|eu 1ouxou 1.23 mec1uaa1epuuuoe auaueuue 0x123 enoe uucno 123 8ocuuepuuuoe auaueuue 0123 ucno a uayuuou uo1auu 1.234 ucno c rpynnupoaxou no paapnau 12345674 Paofa c ueonpepeneuuuru pauuuru: upeufuqukafop unde Kpome uncen, crpox n cctnox cxanxpnte nepemennte moryr coepxart ueonpeoe.euuoe snauenne, xoropoe n Perl oosnauaercx xax undef (sapesepnnponannoe cnono). Ono nos- npamaercx nexoroptmn ]ynxnnxmn, n nt moxere nponepnrt ero c nomomtm ]ynxnnn de- fined. Moxno raxxe npncnonrt nepemenno snauenne undef c nomomtm ncrpoenno ]ynxnnn undef (cm. nnxe). Ecnn noneprnyrt nenocpecrnenno nponepxe snauenne un- def, ro ono nnrepnpernpyercx xax 0 (nynenoe snauenne) n uncnonom xonrexcre n xax (nycrax crpoxa) n crpoxonom. Paccmorpnm npnmep. Hycrt nepemenno $variable1 npn- cnoeno snauenne 5: Crp.42 $va1ab1e1 = 5 3arem c nomomtm ]ynxnnn undef +ra nepemennax enaercx neonpeenenno: $va1ab1e1 = 5 undef undef undef undef $ $$ $va1ab1e va1ab1e va1ab1e va1ab1e1 11 1 Tenept nponepnm c nomomtm ]ynxnnn defined, xnnxercx nn snauenne nepemenno neon- peenenntm: $va1ab1e1 = 5 undef $va1ab1e1 1f {def1ned $va1ab1e1} { 1f {def1ned $va1ab1e1} { 1f {def1ned $va1ab1e1} { 1f {def1ned $va1ab1e1} { p1nf " p1nf " p1nf " p1nf "\ \\ \$va1ab1e1 1s def1ned. $va1ab1e1 1s def1ned. $va1ab1e1 1s def1ned. $va1ab1e1 1s def1ned. \ \\ \n" n" n" n" } e1se { } e1se { } e1se { } e1se { p1nf " p1nf " p1nf " p1nf "\ \\ \$va1ab1e1 1s nof d $va1ab1e1 1s nof d $va1ab1e1 1s nof d $va1ab1e1 1s nof de ee ef1ned. f1ned. f1ned. f1ned. \ \\ \n nn n" " " " } }} } B pesyntrare xo coomnr nontsonarenm, uro nepemennax xnnxercx neonpeenenno: $va1ab1e1 1s nof def1ned. Onucauue koucfauf B Perl ner cnennantno cnnraxcnuecxo xoncrpyxnnn nx uncnontx xoncranr, no nx nee moxno cosart samennrent camocroxrentno (ncnontsyx rexnnxy, ocyxaemym n rnane n n pasene rnant 3, nocnxmennomy sanncxm rannnt cnmnonon cnennantnomy rnny anntx typeglob). Hmx nepemenno, ornocxmecx x +romy rnny, naunnaercx c cnmnona (snesouxa, nnn acrepncx). urot cosart xoncranry, nao npncnonrt rnny anntx type- glob cctnxy, xax +ro enaercx n cneymmem npnmepe (sect xoncranra xpannr maxcn- mantnoe uncno ]anon): "MAIlLL5 = \100 (Oparnre nnnmanne: nmx cocranneno ncxnmunrentno ns sarnanntx yxn, urot nouepx- nyrt, uro +ro xoncranra.) ocryn x cosanno xoncranre ocymecrnnxercx uepes nmx $MAFIES, xax ecnn t +ro tna otunax cxanxpnax nepemennax: "MAIlLL5 = \100 p1nf p1nf p1nf p1nf "$ "$ "$ "$MAIlLL5 MAIlLL5 MAIlLL5 MAIlLL5\ \\ \n nn n" " " " Hpn nontrxe npncnonrt nepemenno $MAFIES nonoe snauenne, nt nonyunre coo- menne o omnxe. Hanpnmep, nocne ntnonnennx xoa "MAIlLL5 = \100 p1nf "$MAIlLL5\n" $ $$ $MAIlLL5 MAIlLL5 MAIlLL5 MAIlLL5 = == = 101 101 101 101 na +xpan yer ntneeno 100 Mod1f1caf1on of a ead-on1y va1ue affempfed af consfanf.p1 11ne 3. Paofa c norueckuru pauuuru e Perl Hmeercx eme onn naxnt rnn anntx, o xoropom nao ynomxnyrt: nornuecxne annte, nnn snauennx ncrnna/noxt. Vcnonnte xomant, ynpannxmmne ntnonnennem xoa (na- Crp.43 npnmep, ycnonnte oneparopt if) ncnontsymr nornuecxne nponepxn. Hoono xstxy C, nmoe nenycroe n nenynenoe snauenne coornercrnyer ycnonnm ucmuua, nynenoe nnn nycroe ycnonnm .ori. Coornercrnenno, cnennantnoro nornuecxoro rnna anntx n Perl ner. Tor ]axr, uro nmoe nenynenoe snauenne coornercrnyer ycnonnm ncrnna (nanomnnm, uro nx Perl nycrax crpoxa ror xe nont), nectma nonesen nx ycnonntx oneparopon. Ha- npnmep, naroapx +ro ocoennocrn cneymmn nnxn yer ntnonnxrtcx o camoro xonna nxonoro noroxa, nocxontxy opamenne x <> ncera uro-ro nosnpamaer axe ec- nn nneena nycrax crpoxa (n +rom cnyuae nosnpamaercx cnmnon \n): Wh11e {<>} { p1nf } Hocuasua. B Perl e ra:ecmee sua:euu uoxo eicmvnamm c.eovmuue ee.u:uui. a) :uc.oeie sua:euu, paeuie uv.m, 6) nvcma cmpora "", nvcmo +accue () u.u nvcmo xou ]}, e) ueonpeoe.euuoe sua:euue un- def, nepe+euua c ueonpeoe.euui+ sua:euue+, cnucor ueonpeoe.euuix sua:euu u/u.u nepe+euuix, e) oe- crpunmop qa.a, ue cesauui c raru+-.uoo qa.o+, e) nvcmie cci.ru u uesano.ueuuie sanucu mao.ui cu+eo.oe. Bce ocma.iuie sua:euu pacc+ampueammc rar ucmuua. Rpeopasoeauue eocurepuuux, pecnfuuux u uecfuapuafepuuux ucen B Perl noctmepnunte uncna saamrcx c neymnm nynem (nanpnmep, 0123), a mecrnanarepnu- nte c npe]nxcom 0x (nanpnmep, 0xlAB). Hpn paore c uncnamn, nmemmnmn pasnte uncno- nte ocnonannx, nonesno snart, xax npeopasontnart nx ns onoro ]opmara n pyro. Rpeopasoeauue uecfuapuafepuuoro ucna e pecnfuuoe nx npeopasonannx mecrnanarepnunoro ]opmara n ecxrnunt ncnontsyercx ]ynxnnx hex: p1nf hex 0x1A8 1063 Ecnn nx ]ynxnnn hex ne saan aprymenr, ncnontsyercx cnennantnax nepemennax $_. Rpeopasoeauue pecnfuuoro ucna e uecfuapuafepuuoe urot npeopasonart ecxrnunoe uncno n crpoxy, xnnxmmymcx ero mecrnanarepnuntm npecrannennem, ncnontsyre ]ynxnnm Perl sprintf c manonom x: p1nf sp1nff "xx", 16 10 Rpeopasoeauue eocurepuuoro ucna e pecnfuuoe urot npeopasonart noctmepnunoe uncno n ecxrnunoe, ncnontsyercx ]ynxnnx oct: p1nf ocf 10
Ecnn nx ]ynxnnn oct ne saan aprymenr, yer ncnontsonana cnennantnax nepemennax $_. Crp.44 Rpeopasoeauue pecnfuuoro ucna e eocurepuuoe Kax n n cnyuae mecrnanarepnuntx uncen, nx npeopasonannx ecxrnunoro uncna n crpoxy, xnnxmmymcx ero noctmepnuntm npecrannennem, ncnontsyre ]ynxnnm Perl sprintf, no c manonom o: p1nf sp1nff "xo", 16 20 Okpyrneuue ucen urot oxpyrnnrt uncnonoe snauenne o onpeenennoro uncna ecxrnuntx snaxon, nc- nontsyre ]ynxnnm sprintf c noxoxmnm ]opmarom. Hanpnmep, urot oxpyrnnrt uncno o nyx nn]p nocne sanxro, ronrcx ]opmar .2f. Bor xax +ror mero paoraer npn ox- pyrnennn uncna nn: p1nf sp1nff "x.2f", 3.14159265359 3.14 To, uro nponcxonr nmenno oxpyrnenne, a ne orpactnanne nnmnnx paspxon, nnno na cneymmem npnmepe, re nn oxpyrnxercx o uertpex nn]p nocne sanxro n nocnenxx nn]pa cranonnrcx panno , a ne 5: p1nf sp1nff "x.4f", 3.14159265359 3.1416 Onaxo npnneennte npnmept nnmt noxastnamr, xax ntnecrn oxpyrnennte snauennx. Bosmoxno, norpeyercx raxxe oxpyrnxrt uncnonte snauennx n paorart c nnmn xax c otuntmn uncnamn. Tax xax Perl opaartnaer annte ncxox ns xonrexcra, ro ecnn yx n namnx cnnax nnrepnpernponart rexcronym crpoxy xax uncno, ro n Perl +ro moxer (ecnn rexcronax crpoxa ecrnnrentno onnctnaer uncno). B cneymmem npnmepe mt oxpyrnxem uncno n sanomnnaem crpoxy n nepemenno $variable1: $va1ab1e1 = sp1nff "x.4f", 3.14159265359 Tenept moxno ncnontsonart snauenne, naxoxmeecx n nepemenno $variable1, xax uncno, nt- nonnnn na nnm apn]mernuecxym onepannm, nanpnmep, npnannn x nemy snauenne 0.01: $va1ab1e1 = sp1nff "x.2f", 3.14159265359 $ $$ $va1ab1e va1ab1e va1ab1e va1ab1e1 1 1 1 += += += += .01 .01 .01 .01 Tenept nponepnm pesyntrar: $va1ab1e1 = sp1nff "x.2f", 3.14159265359 $va1ab1e1 += .01 p1nf $va1ab1e1 p1nf $va1ab1e1 p1nf $va1ab1e1 p1nf $va1ab1e1 3.15 Hcnonusoeauue cfpok e ckannpuux nepereuuux B cxanxpntx nepemenntx moxno xpannrt xax uncna, rax n crpoxn: $va1ab1e1 = "he11o!" Hao ormernrt, uro nx xonxarenannn (oennennx) nyx crpox n Perl nentsx ncnontsonart onepannm cnoxennx, xax +ro npnnxro n pyrnx xstxax. Hanpnmep, cneymmne xomant: $va1ab1e1 = "he11o " Crp.45 $va1ab1e2 = "fhee\n" p1nf $va1ab1e1 + $va1ab1e2 ayr rontxo coomenne o omnxe n nont n xauecrne pesyntrara: Agumenf "fhee\n" 1snf nume1c 1n add af - 11ne 3 Agumenf "he11o " 1snf nume1c 1n add af - 11ne 3 0 Hpnunny nerxo nonxrt: n annom cnyuae Perl ntraercx nnrepnpernponart rexcr ncxox ns uncnonoro xonrexcra (onepannx cnoxennx). Bmecro +roro cneyer ncnontsonart oneparop xonxarenannn Perl, n ponn xoroporo ntcry- naer rouxa (.): $va1ab1e1 = "he11o " $va1ab1e2 = "fhee\n" p1nf $va1ab1e1 . $va1ab1e2 he11o fhee Crpoxn moryr saanartcx c nomomtm onnapntx nnn nontx xantuex: $va1ab1e1 = "he11o." $va1ab1e2 = he11o aga1n. Mexy +rnmn cnocoamn ecrt ronxoe pasnnune. Perl ntuncnxer nepemennte n nexoropte ntpaxennx n rene crpoxn, xora ona orpannuena nontmn xantuxamn (onee nopono o +rom paccxasano n cneymmem pasene). Ecnn crpoxa orpannuena onnapntmn xantu- xamn (anocrpo]amn), ro Perl paccmarpnnaer ee xax xoncranry es nontrox nnrepnpernpo- nart reno crpoxn. B crpoxax, orpannuenntx nontmn xantuxamn, moxno ncnontsonart escape-no- cneonarentnocrn, ynpannxmmne nx ]opmarnponannem n nosnonxmmne saanart cnmno- nt, xoropte nnaue sanncart ne yacrcx (ran. 2.2). Hanpnmep, urot nnecrn n rexcr nonym xantuxy, moxno ncnontsonart nocneonarentnocrt \": p1nf "l sa1d, \"he11o\"." l sa1d, "he11o". B crpoxax, orpannuenntx onnapntmn xantuxamn, escape-nocneonarentnocrn ne paoramr. 1abn 1abn 1abn 1abnua 2.2. ua 2.2. ua 2.2. ua 2.2. Lscape-nocneoaa1enuuoc1u u ux auaueuue Cuuaon 3uaueuue Cuuaon 3uaueuue Cuuaon 3uaueuue Cuuaon 3uaueuue \` Ouuapuan xaauuxa, unu anoc1po {`} \ Obpa1uuu anoc1po {} \" aouuan xaauuxa {"} \\ Obpa1uan xocan uep1a {\} \$ Cuuaon onnapa {$} \0 Cuuaon af-xouuepuecxoe {0} \f Cuuaon 1abynnuu {1A8, h1} \v Cuuaon aep1uxanuuou 1abynnuu {v1} \n Cuuaon uoaou c1poxu {LI} \e Cuuaon escape {L5C} \u Cena1u cneyk|yk nu1epy aarnaauou \1 Cena1u cneyk|yk nu1epy c1pouuou \u Cena1u cneyk|yk rpynny nu1ep {o xouauu \} aarnaauuuu \L Cena1u cneyk|yk rpynny nu1ep {o xouauu \} c1pouuuuu \ 8 cneyk|eu rpynne nu1ep {o xouauu \} cuu1a1u, u1o xo aceu uebyxaeuuuu nu1epau obaa- neua obpa1uan xocan uep1a, - 1o aac1aanne1 Pe1 uu1epnpe1upoaa1u ux xax obuuuue cuuaonu \ 3aaepae1 xouauu \L, \u u \ \ Cuuaon aoaapa1a xape1xu {Ck} \f Cuuaon nporoua c1pauuu {II} Crp.46 \b Cuuaon aabon {85} \a Cuuaon aayxoaoro curuana {8LL} \033 8ocuuepuuuuu cuuaon \x1b mec1uaa1epuuuuu cuuaon \c| xnpaannk|uu cuuaon {confo1 chaacfe} Cureon uoeo cfpoku e fekcfoeux cfpokax Bo ncex onepannonntx cncremax cnenapnn Perl ncnontsymr cnmnon \n, urot oosnaunrt xonen crpoxn. Ha camom ene raxo nemn, xax nensmennt n ]nsnuecxn cymecrnymmn n xonne crpoxn rexcra cnmnon \n, ne cymecrnyer. 3ro nnmt nnnmsnx, xoropym oronopn- nnct noepxnnart nnnorexn xstxa C n nnrepnperarop Perl. Tax, nanpnmep, nocne xo- mant print "\n"; Perl nx Unix ntneer n ntxono ]an nonunt cnmnon 0x0D, a Perl nx Windows napy cnmnonon 0x0A n 0x0D. (Ananornunoe npeopasonanne xonna crpo- xn nponcxonr npn nnoe, rax uro c rouxn spennx nontsonarenx n 99 cnyuaen +ro pacxo- xenne mexy nnrepnperaropamn Perl ne yer samerno.) To ecrt anexo ne nce cncremt nocnpnnnmamr \r xax nonunt cnmnon n \n xax nonu- nt cnmnon LF n xonponxe ASCII. Hanpnmep, nx xomntmrepon Macintosh +rn cnmnont ne- pecrannent mecramn. Ha nexoroptx cncremax, ne ncnontsymmnx cnmnon xonna crpoxn, ne- uart \n nnn \r moxer npnnecrn x norepe ntnonmtx anntx. Ho+romy ncnontsyre cnmnon \n, xora nt nmeere n nny xonen crpoxn n pamxax name onepannonno cncremt, no menx- re ero na xnnt cnmnon, xora nam rpeyercx ncrnnnoe nonunoe snauenne. (Hanpnmep, ontmnncrno cerentx nporoxonon oxnamr (n npenounramr) n xauecrne cnmnona xonna crpoxn xomnnannn CRLF (012015 nnn cJcM), n xorx onn, cxopee nce- ro, nomyr n +rom xauecrne cnmnon LF, onn npx nn opaoramr xax xonen crpoxn on- nount CR. Ho+romy ecnn nt npnntxnere ncnontsonart n cerentx npnnoxennxx cnmnon \n, nt pano nnn nosno cronxnerect c nenpnxrnocrxmn.) Ropcfauoeka nepereuuux (uufepnonnuun cfpok) Kora nt ncnontsyere n crpoxe, saxnmuenno n nonte xantuxn, nmena nepemenntx, Perl nocrannxer nmecro nnx snauennx, npncnoennte nepemenntm. Hanpnmep, ecnn y nac ecrt nepemennax $text, n xoropo xpannrcx cnono Hello $fexf = "he11o" ro nt moxere ncnontsonart ee nmx n rene crpoxn, n Perl nocrannr Hello nmecro nmenn nepemenno: $fexf = "he11o" p1nf "Pe1 sa p1nf "Pe1 sa p1nf "Pe1 sa p1nf "Pe1 says: $fexf! ys: $fexf! ys: $fexf! ys: $fexf!\ \\ \n" n" n" n" Pe1 says: he11o!. 3ror nponecc nastnaercx nocranonxo, nnn nnrepnonxnne (interpolation). B uacrnocrn, n namem npnmepe Perl nnrepnonnponan snauenne, coepxameecx n nepemenno $text, n re- no crpoxn, saxnmuenno n nonte xantuxn. Onaxo ecnn saxnmunrt reno crpoxn n on- napnte xantuxn (anocrpo]t), ro Perl ne yer ntnonnxrt nnrepnonxnnm: $fexf = "he11o" p1nf Pe1 says: $fexf! p1nf Pe1 says: $fexf! p1nf Pe1 says: $fexf! p1nf Pe1 says: $fexf!\ \\ \n n n n Pe1 says: $fexf!\n. Crp.47 To ecrt onnapnte xantuxn ncnontsymrcx, xora ne rpeyercx ntuncnxrt ntpaxenne. A uro ecnn nt xornre nnrepnonnponart nepemennym xax uacrt pyroro, a ne orentno nsxroro cnona Hanpnmep, uro ecnn nepemennax $text coepxnr npe]nxc un n nyxno oannrt ero x cnony happy Ouennno, uro ncnontsonart ntpaxenne rnna $texthappy ne nonyunrcx, rax xax Perl yer ncxart nepemennym c +rnm nmenem, a ne nnrepnonnpo- nart $text c nentm noponrt cnono unhappy. Bmecro +roro cneyer ncnontsonart ]n- rypnte cxoxn n ], nosnonxmmne orennrt nmx nepemenno, xoropym nt xornre nnrep- nonnponart xax uacrt nonnoro cnona: $fexf = "un" p1nf "Donf be ${fexf}happy. p1nf "Donf be ${fexf}happy. p1nf "Donf be ${fexf}happy. p1nf "Donf be ${fexf}happy. " " " " Donf be unhappy Hporpammncrt uacro ncnontsymr nnrepnonxnnm nx xonxarenannn crpox: $a = "he11o" $b = "fhee" p1nf "$a $b\n" he11o fhee Hpexe uem nepern x cneymmemy paseny, x noxaxy eme onn rpmx. Ecnn nt ncnont- syere n xauecrne orpannunrenx crpoxn oparnt anocrpo] (), ro ee coepxnmoe nnrep- npernpyercx xax xomana, nepeanaemax onepannonno cncreme, a pesyntrar ntnonnennx xomant (ro ecrt rexcr, ntneennt na +xpan) sanocnrcx n nepemennym n xauecrne sna- uennx. Hanpnmep, n Unix nt moxere raxnm opasom ntnonnnrt xomany uptime, xoropax coomaer, cxontxo npemenn npomno c momenra nocnene sarpysxn xomntmrepa: $upf1me = upf1me p1nf $upf1me 4:29pm up 1 days, 21:22, 13 uses, 1oad aveage: 0.30, 0.39, 0.42 Touno rax xe +ror npnem paoraer n n onepannonno cncreme MS-DOS, re xomany dir moxno ntnonnnrt cneymmnm opasom: $d111sf = d1 p1nf $d111sf D1ecfoy of C:\pe1book\femp . <Dlk> 10-07-994:02p . .. <Dlk> 10-07-994:02p .. 1LMP PL 3,535 10-07-994:06p 1. PL Hocuasua. Bcmpoeuuie oorv+eumi (c+. pasoe. Bieoo ueqop+amupoeauuoeo mercma. ecmpoeuuie oorv+eu- mi npeoiovue e.aei) e c+ic.e uumepno.uu oreuea.eumui cmpora+, sar.m:euui+ e oeouie raei:ru. Cnouue cnyau uufepnonnuuu Bt moxere oennnrt pesyntrar paort nonporpammt c pyrnmn crpoxamn c nomomtm oneparopa xonxarenannn: $sf1ng = $fexf1 . mysubouf1ne{$dafa} . $fexf2 C pyro cropont, nnannponanne c onepexennem nosnonxer (c nomomtm xoncrpyxnnn $...]) nanpxmym nnrepnonnponart nnyrpt saxnmuenno n nonte xantuxn crpoxn sna- uenne, nosnpamaemoe nonporpammo (o nonporpammax peut noer n rnane 7). Hanpn- mep, nt xornre nnrepnonnponart nnyrpt crpox snauenne, nosnpamaemoe nonporpammo getmessage. uopmantno +ro moxno npoenart cneymmnm opasom (oparnre nnnmanne, uro rpeyercx n xnnom nne ncnontsonart pastmenontnammn npe]nxc nepnt n Crp.48 otuno neoxsarentnt cnmnon n nmenn nonporpammt): p1nf "${gefmessage}" Onaxo uro na camom ene enaercx +ro xomano, rax +ro nocranonxa crpoxn, nosnpa- maemo nonporpammo npn ee ntsone, a sarem nnrepnperannx pesyntrara xax nmenn ne- pemenno, snauenne xoropo nao nocrannrt. Tpmx n rom, urot saart n nonporpamme nyxnoe snauenne nx +ro nepemenno n nepnyrt nmx nepemenno: p1nf "${gefmessage}" sub gefmessage { $msg = "he11o!" efun "msg" } Tenept xomana print "$getmessage]" ntnonnnr ro, uro mt xornm: p1nf "${gefmessage}" sub gefmessage { $msg = "he11o!" efun "msg" } he11o! Onaxo raxo npnem cpaoraer nnmt nx nanncanntx namn nonporpamm. Hmeercx cno- co, paorammn n onee mnpoxom cnexrpe napnanron, xoropt sacrannxer Perl ntunc- nnrt snauenne nonporpammt n nocrannrt ero nnyrpt crpoxn (on ncnontsyer cnnraxcn- uecxne xoncrpyxnnn, xoropte cranyr nonxrnt nnmt nocne npourennx rnant ). Bor xax ntrnxnr ncxomax cnnraxcnuecxax xoncrpyxnnx: $sf1ng = "fexf ${\{sca1afuncf1on dafa}} fexf" Ecnn xe nt ncnontsyere ]ynxnnm, nosnpamammym cnncox snauenn, ro nam nomoxer xoncrpyxnnx no nasnannem oesi+uui, nnn auouu+ui +accue (anonymous array): $sf1ng = "fexf 0{|11sffuncf1on dafa]} fexf" Hanpnmep, ecnn nt xornre ncnontsonart ]ynxnnm Perl uc nx roro, urot nnonmax cne- om sa ne yxna crana crpouno (n satnn, uro +ro nerxo peannsyercx c nomomtm escape- nocneonarentnocrn \u), +ro moxno cenart cneymmnm opasom: p1nf "${\{uc \"x\"}}"
Oparnre nnnmanne: nnyrpennne nonte xantuxn, ncnontsonannte nx aprymenra ]ynxnnn, saant c nomomtm escape-nocneonarentnocrn \" n npornnnom cnyuae y Perl tnn t nponemt npn cnnraxcnuecxom pasope crpoxn xax ennoro nenoro. Opaofka kaeuek u cnoe es kaeuek B Perl xantuxn, oxpyxammne onnounoe cnono, nnora oxastnamrcx nnmnnmn. Tax npo- ncxonr n cnyuae, xora cnono moxer trt nnrepnpernponano onosnauno. Hanpnmep, n cnyuae, paccmorpennom nnxe, npncnoenne crpoxn nepemenno $text ouennno, no+romy xantuxn ne rpeymrcx: $fexf = he11o Ecnn renept ntnecrn nepemennym $text, nonyunm ro, uro n cneonano oxnart: $fexf = he11o Crp.49 p1nf p1nf p1nf p1nf $ $$ $fexf fexf fexf fexf he11o Taxne cnona es xantuex nastnamrcx n Perl onnountmn cnonamn, nnn npocmi+u c.oea- +u (barewords). Onaxo ecnn ncnontsyercx onee onoro cnona, ro +ro yxe ne npocroe cnono, n noonax xoncrpyxnnx paorart ne yer: $fexf = he11o fhee # Nof good p1nf $fexf # Does nof Wok Hnora npocrte cnona moryr nyrartcx c merxamn nnn ecxpnnropamn ]anon (nn ro nn pyroe ne rpeyer pastmenontnammero npe]nxca). Bt moxere cenart Perl menee rep- nnmtm x onnountm cnonam n sacrannrt nnrepnperarop neuarart npeynpexammee co- omenne ncxxn pas, xora cnono es xantuex ne moxer trt nponnrepnpernponano xax nmx nonporpammt: use 11sf subs Kpome roro, uro moxno onycxart nnmnne xantuxn, cnennantnte cnnraxcnuecxne xoncr- pyxnnn ns ran. 2.3 nomoryr oannrt xantuxn cpecrnamn camoro Perl. 1abnua 2.3. 1abnua 2.3. 1abnua 2.3. 1abnua 2.3. Cuu1axcuuecxue xouc1pyxuu nn xaauuex Cuu1axcuc Cuu1axcuc Cuu1axcuc Cuu1axcuc eaynu1a1 eaynu1a1 eaynu1a1 eaynu1a1 u1epnonup u1epnonup u1epnonup u1epnonupy yy ye1 e1 e1 e1 Obex1 Obex1 Obex1 Obex1 q/.../ ... he1 C1poxa qq/.../ "..." a C1poxa qx/.../ ... a ouaua qW/.../ {...} he1 Cnucox cnoa /.../ m/.../ a mabnou noucxa s/../../ s/../../ a hoc1auoaxa {subsf1fufe} y/../../ f/../../ he1 3aueuu {fans1afe} Hanpnmep, ecnn nam xouercx naneuarart crpoxy I said, Hello., ro +ro moxno, xoneuno, cenart c nomomtm escape-nocneonarentnocre: p1nf "l sa1d, \"he11o.\"" l sa1d, "he11o. " Ho nyume nserart raxoro xonnuecrna escape-nocneonarentnocre (na xaprone Perl- nporpammncron +ro nastnaercx LTS yuennuecxn cnnpom syouncrxn (learning toothstick syndrome): naunnammne nmemr cxnonnocrt ncnontsonart nsnnmne mnoro cnm- nonon oparno xoco ueprt, ro ecrt syouncrox). urot nosaornrtcx o nontx xa- ntuxax nnyrpn crpoxn, moxno ncnontsonart xoncrpyxnnm q//: p1nf qq/l sa1d, "he11o."/ l sa1d, "he11o. " Ha camom ene ncnontsonanne naxnonno ueprt ne oxsarentno. onycrnm nourn nmo neyxnennt cnmnon, ormeuammn nauano n xonen crpoxn: p1nf qq|l sa1d, "he11o."| l sa1d, "he11o. " Moxno axe ncnontsonart cnmnont, xoropte n pyrnx cnyuaxx nrpamr n Perl cnennant- nym pont, nanpnmep, cnmnon xommenrapnx (sect narnxno nnno, uro n Perl nmte xoncrpyxnnn sanncxr or xonrexcra): p1nf qq#l sa1d, "he11o."# l sa1d, "he11o. " Moxno raxxe ncnontsonart nx +ro nenn cxoxn: p1nf qq{l sa1d, "he11o."} l sa1d, "he11o. " Crp.50 B annom cnyuae cxoxn cnyxar nx orpannuennx xoncrpyxnnn qq, a ne nx rpynnnponxn napamerpon npn opamennn x nonporpamme. (Kcrarn, o nonporpammax. B Perl, re nou- rn ncera ecrt necxontxo cnocoon nx ocrnxennx xaxoro-nno pesyntrara, paspemaercx eme n onycxart cxoxn npn ntsone nonporpammt, ecnn +ro ne ntstnaer nyrannnt c oc- rantntmn unenamn ntpaxennx.) Haxonen, neoxonmo ormernrt, uro orpannunnartcx rpve.i+u cxoxamn roxe ner neoxonmo- crn: moxno ncnontsonart .moie cxoxn xpyrnte, ]nrypnte, xnaparnte nnn axe yrnonte: p1nf qq{l sa1d, "he11o."} l sa1d, "he11o. " p1nf qq|l sa1d, "he11o."] l sa1d, "he11o. " p1nf qq<l sa1d, "he11o."> l sa1d, "he11o. " -fo fakoe cnucok? Perl nosnonxer conpart cxanxpnte nepemennte (n pyrne rnnt anntx maccnnt, x+m-rannnt) n cnucru. Cnncxn ouent naxnt nx Perl. Bcrpoennte ]ynxnnn Perl pasnrt na ne rpynnt: nx paort co cxanxpamn n nx paort co cnncxamn (na camom ene nexo- ropte paoramr n c rem n c pyrnm.) B Perl ner cnennantnoro rnna anntx nx cnncxon. Onaxo nmeercx onepamop cnucra, a nmenno, napa xpyrntx cxoox. urot cosart cnncox, ocrarouno nepeuncnnrt uepes sanxrym ero +nemenrt n saxnmunrt ncm xoncrpyxnnm n xpyrnte cxoxn. Hanpnmep, nt- paxenne (1, 2, 3) coornercrnyer cnncxy, cocroxmemy ns rpex +nemenron: 1, 2 n 3. Oneparop print xnnxercx cnncountm 1 . Ecnn nt noanre emy na nxo cnncox, on oe- nnnr ero +nemenrt n ony crpoxy (ntnonnnr xonxarenannm orentntx crpox). Hanpn- mep, ecnn saart na nxoe cnncox (1, 2, 3) p1nf {1, 2, 3} ro na ntxoe mt ynnnm 123 Hocuasua. J.e+euma+u cnucra +oevm oimi mo.iro cra.puie sua:euu. Bi, roue:uo, +oreme ucno.i- soeami roucmpvrum euoa (1, 2, (4, 5), 7, 8), uo omo mo re ca+oe, :mo u (1, 2, 4, 5, 7, 8) uuoueuova.i- uocmi euvmpeuueeo cnucra mepemc, a eeo o.e+eumi npocmo e.ueammc eo eueuuu cnucor. Kax n pantme, xpyrnte cxoxn noxpyr cnncxa moxno onycrnrt n +rom cnyuae Perl y- er nnrepnpernponart print xax xomany, a ne xax ntson ]ynxnnn: p1nf 1, 2, 3 123 Ccunka ua snereufu cnucka epes uupekc Hocne cosannx cnncxa nt moxere cctnartcx na ero orentnte +nemenrt, ncnontsyx xnaparnte cxoxn ]. Moxno cunrart, uro +ro oneparop nnexca cnncxa. Hanpnmep, ecnn cenart cnncox, cocroxmn ns nnrep a, b n c (nx ner neoxonmocrn saxnmuart n xantu- xn, nocxontxy +ro npocrte cnona), ro moxno cocnartcx na +nemenr c nnexcom 1 (yxna
1 Kax n n C, n Perl ner pasnnunx mexy ]ynxnnxmn n nponeypamn (xomanamn). Onaxo no mnornx cnyuaxx ner pasnnunx n mexy ]ynxnnxmn n oneparopamn rax, xnmuenoe cnono print nrpaer pont oneparopa, xora ero aprymenrt yxasant es cxoox, n pont ]ynxnnn, xora ero aprymenrt saxnmuent n xpyrnte cxoxn (noponee cm. rnany ). Hpu+e:. nepee. Crp.51 b n Perl +nemenrt nymepymrcx c nynx). Hanpnmep, $va1ab1e1 = {a, b, c}|1] Ecnn pacneuarart +ry nepemennym, ro nonyunm oxnaemt pesyntrar: $va1ab1e1 = {a, b, c}|1] p1nf $va1ab1e1 p1nf $va1ab1e1 p1nf $va1ab1e1 p1nf $va1ab1e1 b Oparnre nnnmanne, uro moxno nnexcnponart axe cnncox, nosnpamaemt ]ynxnne. Taxnm opasom, mt nonyuaem npocro cnoco paort co cnncxontmn ]ynxnnxmn, xora na ntxoe rpeyercx rontxo cxanxpnt pesyntrar ns nonnoro cnncxa snauenn. Rpuceaueauue cnuckoe cnuckar Moxno npncnonrt onn cnncox pyromy, ncnontsyx oneparop npncnoennx . Hanpnmep, sect mt npncnannaem +nemenram cnncxa ($a, $b) coornercrnymmne nm +nemenrt cnncxa ($c, $d): {$a, $b} = {$c, $d} 3nemenrt cnncxa, croxmne cnpana, paccmarpnnamrcx xax ntuncnxemte ntpaxennx, a +nemenrt cnncxa cnena xax nente snauennx oneparopa npncnannannx. Tem camtm na cnncxa moryr coepxart nepecexammnecx nepemennte, n npn +rom ne nosnnxner nyrannna cnncox n npano uacrn ntuncnxercx o onepannn npncnannannx. Hanpnmep, raxnm cnocoom moxno nomenxrt mecramn snauennx nepemenntx $a n $b, ne npnerax x nomomn npomexyrouno nepemenno: {$a, $b} = {$b, $a} Cnncxn, yuacrnymmne n +ro onepannn, moryr trt pasno nnnt. B cneymmem npnmepe ne- pemenntm $a n $b npncnannamrcx nepnte na +nemenra cnncxa, cocroxmero ns rpex +nemenron: {$a, $b} = {1, 2, 3} p1nf $a 1 p1nf $b 2 Ecnn uncno +nemenron n neno uacrn oxaxercx ontme uncna +nemenron n npano, ocran- mnecx nepemennte nonyuar neonpeenennoe snauenne undef. 3ro nponsoer axe n rom cnyuae, ecnn o onepannn npncnoennx y nnx tno nexoropoe snauenne: $a =0 $b = 0 $c = 0 {$a, $b, $c} = {1, 2} p1nf $a, "\n" p1nf $b, "\n" p1nf $c, "\n" 1 2 use an un1n1f1a11ed va1ue af - 11ne 5 Ecnn n xauecrne nentx snauenn saart undef, ro coornercrnymmne +nemenrt cnncxa cnpana yyr nponyment: {$a, undef, $b} = {1, 2, 3} p1nf $a 1 p1nf $b 3 Crp.52 Rpeopasoeauue cnucka urot ntnonnnrt ony n ry xe onepannm na ncemn +nemenramn cnncxa, ncnontsyercx ]ynxnnx map: map bnox cnucox map aupaeuue cnucox Ona ntnonnxer xo, yxasannt xax nox oneparopon nnn xax ntpaxenne, nx xaxoro +nemenra cnncxa. Hepe ntnonnennem ouepeno onepannn cnennantno nepemenno $_ npncnannaercx coornercrnymmn +nemenr cnncxa. Ha ntxoe nonyuaem pesyntrar ntuncnenn. Hanpnmep, urot npeopasonart nce +nemenrt cnncxa x crpountm yxnam, moxno ncnontsonart ncrpoen- nte ]ynxnnn Perl: lc (xoropax samenxer n crpoxe sarnannte yxnt na crpounte) n map: {$a, $b} = map {1c, , 8} p1nf $a, $b ab (3ect ncnontsonano ro cnocrno, uro ]ynxnnx lc ncnontsyer nepemennym $_ n xauecrne nxonoro snauennx, ecnn e ne yxasart napamerpt.) OLepuueuue snereufoe cnucka e cfpoky nx xonxarenannn ncex +nemenron cnncxa n ony crpoxy moxno ncnontsonart ]ynxnnm oin: o1n aupaeuue, cnucox 3ra ]ynxnnx oennxer n ony crpoxy +nemenrt cnncxa (nanomnnm, uro n Perl apn]me- rnuecxne n crpoxonte annte cnoono npeopasymrcx pyr n pyra), ncnontsyx saan- noe ntpaxenne n xauecrne pasennrenx mexy +nemenramn. Bor npnmep ee paort: p1nf o1n {":", "12", "00", "00"} 12:00:00 Crporo ronopx, moxno tno t oornct n es nontx xantuex, no ecnn ypart no- nte xantuxn noxpyr 00, ro Perl yer nnrepnpernponart +ror +nemenr xax uncno nont, n n pesyntrare mt norepxem neymne nynn, nonyunn na ntxoe 12:0:0. B cnyuae uncro xonxarenannn es pasennrene ocrarouno saart n xauecrne ntpa- xennx nycrym crpoxy: p1nf o1n {"", h, e, 1, 1, o} he11o Rpeepaeuue cfpoku e cnucok urot pasnrt crpoxy na uacrn n npenparnrt ee n cnncox, moxno ncnontsonart ncrpoen- nym ]ynxnnm split: sp11f /abnou/, aupaeuue, aepxuuu-npeen sp11f /abnou/, aupaeuue sp11f /abnou/ sp11f uynxnnx split pasnnaer crpoxonoe eipareuue no rpannnam, ormeuenntm nocrpoxo- uao.ouo+, n opasyer ns uacre cnncox (npn +rom cam manon yanxercx). Ecnn saan eepxuu npeoe., xoropt onxen trt nonoxnrentntm uncnom, uncno +nemenron cnncxa Crp.53 ne yer npentmart saannoe. Ecnn eipareuue ne saano, ncnontsyercx cnennantnax nepemennax $_. Ecnn orcyrcrnyer uao.ou, nponcxonr pasnnxa no rax nastnaemtm npoentntm cnmnonam (cma nxonr npoen, snax raynxnnn, cnmnon nono crpoxn n r. ., npnuem necxontxo npoentntx cnmnonon nopx paccmarpnnamrcx xax onn). Cneymmn npnmep npenpamaer crpoxy H,e,l,l,o n cnncox ns orentntx yxn n ntnonr ero na neuart: p1nf sp11f /,/, "h,e,1,1,o" he11o Copfupoeka cnuckoe nx coprnponxn cnncxon ncnontsyercx ]ynxnnx sort: sof nonporpauua cnucox sof bnox cnucox sof cnucox 3ra ]ynxnnx coprnpyer cnncox n nosnpamaer orcoprnponannt pesyntrar. Hontsonarent moxer saart npannno coprnponxn n nne nmenn nonporpammt nnn n nne noxa oneparo- pon. Honporpamma onxna nosnpamart pesyntrar cpannennx nyx napamerpon ananornuno oneparopam cpannennx <> n cmp (cm. rnany ). Honporpamma moxer trt samenena no- xom oneparopon, ntnonnxmmnx ry xe ]ynxnnm. Ecnn ne yxasant nn nmx nonporpammt, nn nox oneparopon, ]ynxnnx sort ncnontsyer cranaprnym onepannm cpannennx crpox. Ha- npnmep, anare orcoprnpyem cnncox ("c", "b", "a"): p1nf sof {"c", "b", "a"} abc Moxno xnno saart nox, cpannnnammn ne crpoxn, n nonyunrt ror xe pesyntrar: p1nf sof {$a cmp $b} {"c", "b", "a"} abc Moxno coprnponart cnncox n oparnom nopxxe: p1nf sof {$b cmp $a} {"c", "b", "a"} cba Moxno ncnontsonart uncnonoe cpannenne nx coprnponxn snauenn: p1nf sof {$a <=> $b} {3, 2, 1} 123 Haxonen, ror xe xo moxno nomecrnrt n nonporpammy: sub myfuncf1on { efun {sh1ff{0} <=> sh1ff{0}} } p1nf sof myfuncf1on {3, 2, 1} 123 uro +xnnnanenrno noxy p1nf sof {myfuncf1on{$a, $b}} {3, 2, 1} 123 Hueepfupoeauue cnucka Crp.54 urot nnneprnponart cnncox, ncnontsyre ]ynxnnm reverse: evese cnucox Bor xax moxno ncnontsonart +ry ]ynxnnm, urot nnneprnponart +nemenrt n cnncxe (1, 2, 3): p1nf evese {1, 2, 3} 321 Buop snereufoe us cnucka nx ntenennx ns cnncxa nocnncxa, cocroxmero ns +nemenron, coornercrnymmnx nexo- ropomy xpnrepnm, ncnontsyercx ]ynxnnx grep: gep bnox cnucox gep aupaeuue cnucox 3ro ananor xomant grep onepannonno cncremt Unix. uynxnnx ntuncnxer nox xoman nnn ntpaxenne nx xaxoro +nemenra cnncxa (npn +rom cnennantnax nepemennax $_ panna ouepenomy +nemenry cnncxa) n cosaer nocnncox ns +nemenron, nx xoroptx ntuncnennoe snauenne coornercrnyer ycnonnm ncrnna (ro ecrt ornnuno or nynx, nycro crpoxn n r. .). Otuno grep ncnontsyer noncx no manony, xax, nanpnmep, n cneymme crpoxe, re cosaercx nocnncox ns yxn, xoropte ne xnnxmrcx yxno x: p1nf gep {!/x/, a, b, x, d} abd Fonee nopono o noncxe no manony nt ysnaere ns rnant , no, xax nnno yxe ceuac, ]ynxnnx grep npeocrannxer momnt nncrpymenr nx cosannx ns cnncxon nocnncxon, ocnontnaxct na onpeenennom xpnrepnn noncxa. Ckannpuu u cnuckoeu koufekcfu Cxanxpnt n cnncxont xonrexcrt +ro na ocnonntx xonrexcra anntx n xstxe Perl. Ouent naxno nonnmart pasnnny mexy nnmn. Mt yem nocroxnno ncrpeuartcx co cxa- nxpntm n cnncxontm xonrexcramn n +ro xnnre. Kora Perl oxnaer nonyunrt cnncox, on paccmarpnnaer annte n cnucroeo+ roumercme, a xora cxanxpnoe ntpaxenne n cra.puo+. B pesyntrare, xora annte npeono.aea- mmc n nne cnncxa, onn n rpaxrymrcx xax cnncox. Coornercrnenno, xora annte npe- nonaramrcx n nne cxanxpnoro ntpaxennx, onn rpaxrymrcx xax cxanxp. pyrnmn cnonamn, ro, xax nmenno nnrepnpernpymrcx annte, npn nporpammnponannn na Perl onpeenxercx ueeui+ oopaso+ ns xonrexcra, n xoropom +rn annte ncnontsyercx, n ne saaercx n xnno nne c nomomtm nporpammnoro xoa. Hanpnmep, ecnn nt paoraere c ]ynxnnxmn, xoropte ncnontsymr aprymenrt-cnncxn nnn nosnpamamr snauennx-cnncxn, ro +rn snauennx anromarnuecxn nnrepnpernpymrcx xax cnncxn. B cxanxpnom xonrexcre cnncox npeopasyercx n cxanxp (otuno n nocnenn +nemenr cnn- cxa, cm. cneymmn pasen), a n cnncxonom xonrexcre cxanxp npenpamaercx n cnncox ns ono- ro +nemenra. Onaxo nyxno samernrt, uro n Perl ner ennoro npannna, onpeenxmmero npeo- pasonanne anntx npn nepexoe ns onoro xonrexcra n pyro. Hanpnmep, npn nepexoe ns cnncxonoro xonrexcra n cxanxpnt onn oneparopt moryr nocrannxrt uncno +nemenron cnn- cxa, xoropt onxen tn trt npn cnncxonom xonrexcre, pyrne nosnpamamr nepnoe sna- Crp.55 uenne cnncxa, rpertn nosnpamamr nocnenn +nemenr cnncxa, a nexoropte axe nosnpa- mamr uncno ycnemno nponeenntx onepann na cnncxom. 3ro moxer noxasartcx cnoxntm, no otuno nepexonrt or onoro xonrexcra x pyromy (ocoenno or cnncxonoro x cxanxpnomy) ne rpeyercx, rax uro npx nn cnnmxom uacro npnercx saocrpxrt nnnmanne na +rnx eranxx. 4opcupoeauue ckannpuoro koufekcfa uynxnnx scalar rpeyer nnrepnperannn ntpaxennx n cxanxpnom xonrexcre (npn +rom n Perl ner napnoro oneparopa, ntnyxammero nnrepnpernponart ntpaxenne n cnncxonom xonrexcre). uynxnnx scalar ncnontsyercx rax: sca1a aupaeuue Hanpnmep, moxno ntnecrn cnncox (1, 2, 5) n cnncxonom xonrexcre: p1nf {1, 2, 5} 125 Ecnn nt ncnontsyere ]ynxnnm scalar, ro ona ntnynr nnrepnpernponart cnncox n cxa- nxpnom xonrexcre. To ecrt yer nosnpamen nocnenn +nemenr cnncxa: p1nf sca1a {1, 2, 5} 5 uynxnnx scalar nosnpamaer nocnenn +nemenr cnncxa, +mynnpyx rem camtm noneenne oneparopa-sanxro xstxa C. On neer cex rouno rax xe, a nmenno nosnpamaer nocnenee ntuncnennoe ntpaxenne n cnncxe ntpaxenn, pasenenntx sanxrtmn. To xe camoe npo- ncxonr npn npncnoennn cxanxpno nepemenno ntpaxennx-cnncxa: $a = {1, 2, 5} p1nf $a 5 Kpome npncnoennx snauennx cxanxpno nepemenno, cxanxpnt xonrexcr nx annoro cnncxa moxno ]opcnponart n menee +neranrno ntnonnnn na cnncxom apn]mernue- cxym onepannm (nanpnmep, npnannn nont oneparopom cnoxennx +). Crp.56 Fnana 3
Maccunm, xamu u sanucu 1anuum cuunonon
Kopo1ko B +ro rnane yer npenpnnxra nontrxa ntxcnnrt, xax oprannsonant annte n raxnx xpane naxntx crpyxrypax, xax +accuei n xouu. Kpome roro, yer onncana paora c pyrnm naxntm rnnom anntx sanuc+u mao.ui cu+eo.oe (typeglob). Maccueu Maccnnt npecrannxmr coo cocroxmne ns cxanxpon cnncxn c nenouncnenntm nnex- com. Hnexc nosnonxer cctnartcx na cxanxpt, sanecennte n maccnn, +ro ouent nonesno nx nporpammnponannx, rax xax nosnonxer ynennunnart nnn ymentmart nnexc n nony- uart ocryn ns nporpammt x nmomy +nemenry, paorax cpasy co ncem maccnnom. nx cosannx maccnna neoxonmo npncnonrt nepemenno-maccnny n xauecrne snauennx cnn- cox (n Perl raxne nepemennte naunnamrcx c npe]nxca ): 0aay = {1, 2, 3} urot cctnartcx na orentnte +nemenrt maccnna, cneyer yxasart nnexc +nemenra n xnaparntx cxoxax n samennrt npe]nxc na npe]nxc $ +ro noxastnaer, uro mt pa- oraem co cxanxpom. Oparnre raxxe nnnmanne, uro nnexct nx maccnnon Perl orcunrt- namrcx or nynx: p1nf $aay|0] 1 B +ro rnane ocnonnoe nnnmanne yer yenxrtcx cranaprntm onomepntm maccnnam. B rnane 13, peut n xoropo ner o crpyxrypax anntx, paccxastnaercx raxxe o nymepntx maccnnax. Xsuu X+m-rannnt (x+mnponannte rannnt, nnn npocro x+mn), nastnaemte raxxe acconna- rnnntmn maccnnamn nx ocryna x orentntm +nemenram anntx, ncnontsymr ne nnex- ct, a xnmun. Hpn ncnontsonannn x+me snauennx acconnnpymrcx c rexcrontmn xnmuamn, nanpnmep: Crp.57 $hash{fu1f} = app1e $hash{sandW1ch} = hambuge $hash{d1nk} = bubb1y Tenept moxno ncnontsonart +rn annte, npnmennn nx ocryna x nnm xnmu p1nf $hash{sandW1ch} hambuge Hpecrannenne namnx anntx n nne x+me, xax npannno, onee nnrynrnnno (n ornnune or maccnnon), nocxontxy nx nsnneuennx anntx ncnontsymrcx xnmun. X+mn xnnxmrcx neantntm cpecrnom nx cosannx sannce anntx. 3anucu fanuuu cureonoe typeglob Tnn anntx typeglob eme onn ncrpoennt rnn Perl. Pastmenontnammn npe]nxc nx nero snesouxa . Tnn anntx typeglob ncnontsyercx nx cosannx cnnonnmon nx rnnon anntx, acconnnponanntx c yxasanntm nmenem. (Coornercrnenno, snesouxa, xo- ropax xnnxercx raxxe n ynnnepcantntm manonom npn ntope ]anon, orpaxaer yx no- noro rnna anntx.) Hanpnmep, npn nannunn nepemenntx $data n data: $dafa = "hees fhe dafa" 0dafa = {1, 2, 3} c nomomtm xoncrpyxnnn typeglob moxno cctnartcx na +rn nepemennte no pyrnm nmenem: "a1sodafa = "dafa Tenept $alsodata xnnxercx cnnonnmom nx $data, a alsodata nx data: p1nf "$a1sodafa\n" hees fhe dafa Hocuasua. Tun oauuix typeglob *u+ omo euvmpeuu cmpvrmvpa (sanuci mao.ui cu+eo.oe), xpauua uu- qop+aum ooo ecex nepe+euuix c u+eue+ u+, (mo ecmi o cra.puo nepe+euuo $u+a, +accuee u+a, xoue "u+a, noonpoepa++e &u+a, oecrpunmope qa.a u+). B :acmuocmu, o. rarooeo muna oauuix e mao.uv cu+- eo.oe sanucieaemc aopec oo.acmu na+mu (cci.ra), eoe ouo xpauumc. Hpuceoue oouo sanucu cooepru+oe opveo sanucu, +i npocmo sacmaeu.u cci.ru oevx mao.u cci.amic ua oouv u mv re oo.acmi na+mu. Ha +rom c nneennem noxonueno. B cneymmem pasene +rn rnnt anntx paccmar- pnnamrcx onee nopono. Henocpepc1neuume pemeuun Cospauue raccueoe Hmena maccnnon naunnamrcx c cnmnona . urot cosart maccnn, cneyer npncnonrt ne- pemenno maccnna n xauecrne aprymenra cnncox 0aay = {1, 2, 3} urot ynnert pesyntrar, ntneem nont maccnn 0aay = {1, 2, 3} p1nf p1nf p1nf p1nf 0 00 0a aa a ay ay ay ay 123 Hocuasua. Ko+auoa print uumepnpemupvem +accue rar cnucor u ooeouuem eeo o.e+eumi e eouuoe e- .oe. Bo.ee rpacueie cnocooi eieooa cooepru+oeo +accuea ei uaoeme e pasoe.e Bieoo +accuea. Crp.58 Ha orentnte +nemenrt maccnna moxno cctnartcx, yxastnax nnexc n xnaparntx cxo- xax n samenxx npe]nxc nmenn cnmnonom $ (noromy uro +nemenr maccnna cxanxp): 0aay = {1, 2, 3} p1nf $aay|0] 1 Kpome uncen n maccnne moxno xpannrt n pyrne cxanxpt, nanpnmep crpoxn: 0aay = {"one", "fWo", "fhee"} p1nf 0aay onefWofhee Hocxontxy Perl npn opaorxe cnncxon nponycxaer nce npoentnte cnmnont (nxnmuax cnmnont nono crpoxn), aprymenr n nne cnncxa snauenn moxno nerxo pasnrt na ne- cxontxo crpouex: 0aay = {"one", "fWo", "fhee", "fou", "f1ve", "s1x",} p1nf 0aay onefWofheefouf1ves1x Moxno raxxe ncnontsonart oneparop nonropennx, uro n annom cnyuae cosacr maccnn ns cra nyne: 0aay = {0} x 100 Haxonen, moxno ncnontsonart oneparopt-xantuxn (cm. pasen Opaorxa xantuex n cnon es xantuex n ran. 2.3 n npetyme rnane): 0aay = qW{one fWo fhee} p1nf 0aay onefWofhee Kpome onncanntx cnocoon, nx cosannx maccnnon n oannennx n nnx nontx +nemenron ncnontsymrcx raxxe ]ynxnnn push n unshift (onn paccmarpnnamrcx nnxe n +ro rnane). Xorx +nemenrt n maccnnax Perl no ymonuannm orcunrtnamrcx c nynx, moxno nsmennrt +ro npannno, sanecx nonoe asonoe snauenne n cnennantnym nepemennym $. Ee ncnontso- nanne, onaxo, cunraercx ypntm ronom. Xorx +ror cnoco n ne sanpemen, npx nn ero xro-ro oopnr. (B +rom ornnune Perl or xstxon rnna Java, n xoroptx merot, ntstnam- mne neoopenne, npocro sanpemamrcx.) Hcnonusoeauue raccueoe Hocne cosannx maccnna moxno cctnartcx na ero orentnte +nemenrt xax na cxanxpt, yxastnax nnexc n xnaparntx cxoxax n ncnontsyx npe]nxc $ nepe nmenem maccnna: 0aay = {"one", "fWo", "fhee"} p1nf $aay|1] fWo Hocxontxy nx ocryna x +nemenram maccnna moxno ncnontsonart nnexc, maccnnt mo- ryr paorart xax rannnt nocranonox. Tax n cneymmem npnmepe ecxrnunoe uncno ns nanasona or 0 o 15, nnonmoe nontsonarenem, samenxercx na ero mecrnanarepnunt +xnnnanenr: 0aay = {0, 1, 2, 3, 4, 5, 6, 7, , 9, , 8, C, D, , I} Wh11e {<>} { $hex = $aay|$] Crp.59 p1nf "$hex\n" } C rouxn spennx nporpammncra ror ]axr, uro maccnnt oecneunnamr ocryn x +nemenram anntx no nomepy, xnnxercx momntm cpecrnom, nosnonxmmnm nocneonarentno opa- artnart maccnn, nsmenxx n nnxne nnexc. Hanpnmep, rax ntnoxrcx nce +nemenrt mac- cnna no ouepen: 0aay = {"one", "fWo", "fhee"} fo {$1ndex = 0 $1ndex <= $#aay $1ndex++} { p1nf $aay|$1ndex], " " } one fWo fhee Oparnre nnnmanne na ncnontsonanne xoncrpyxnnn $#array. B Perl ona osnauaer nocne- nn nnexc maccnna array (cm. anee pasen Onpeenenne nnnt maccnna). Onepauuu push u pop Kpome npncnoennx cnncxom, nx nsmenennx maccnnon moxno ncnontsonart ]ynxnnn push n pop. uynxnnx push oannxer onn nnn necxontxo +nemenron n xonen maccnna: push uaccua, cnucox 3nauennx cnncxa oannxmrcx n xonen uaccnna, a nnna uaccnna ynennunnaercx na nn- ny cnncxa. uynxnnx pop yanxer annte ns maccnna pop uaccua pop Ona yanxer n nosnpamaer n xauecrne cnoero pesyntrara nocnenee snauenne n uaccnne, coxpamax nnny uaccnna na onn +nemenr. Cneymmn npnmep noxastnaer, xax nocne- onarentno oannxmrcx +nemenrt n (nsnauantno nycro) maccnn: push {0aay, "one"} push {0aay, "one"} push {0aay, "one"} push {0aay, "one"} push {0aay, "fWo"} push {0aay, "fWo"} push {0aay, "fWo"} push {0aay, "fWo"} push {0aay, "fhee"} push {0aay, "fhee"} push {0aay, "fhee"} push {0aay, "fhee"} p1nf $#aay, :, 0aay 2:onefWofhee (oparnre nnnmanne, uro $#array na ennnny mentme uncna +nemenron maccnna). Anano- rnuntm opasom yanxmrcx annte ns xonna maccnna 0aay = {"one", "fWo", "fhee"} $va1ab1e1 = pop {0aay} $va1ab1e1 = pop {0aay} $va1ab1e1 = pop {0aay} $va1ab1e1 = pop {0aay} p1nf "$va1ab1e1/$#aay" fhee/1 Onepauuu shit u unshit uynxnnn shift n unshift paoramr c nauanom maccnna rax xe, xax push n pop c ero xon- nom. Bor xax ncnontsyercx shift: sh1ff uaccua sh1ff 3ra ]ynxnnx yanxer nepnt +nemenr maccnna, nosnpamax ero xax pesyntrar. Maccnn co- xpamaercx na onn +nemenr, a ocrantnte +nemenrt cnnramrcx na ony nosnnnm nnpano. Crp.60 A nor xax ntrnxnr ]ynxnnx unshift: unsh1ff uaccua, cnucox 3ra ]ynxnnx ntnonnxer onepannm, npornnononoxnym ecrnnxm ]ynxnnn shift. Ona no- cneonarentno oannxer cnncox n nauano uaccnna, cnnrax ocrantnte +nemenrt nnpano n ynennunnax nnny uaccnna na pasmep cnncxa. Hpnmep ncnontsonannx ]ynxnnn shift nx nsnneuennx +nemenra maccnna: 0aay = {"one", "fWo", "fhee"} $va1ab1e1 $va1ab1e1 $va1ab1e1 $va1ab1e1 = = = = sh1ff {0aay} sh1ff {0aay} sh1ff {0aay} sh1ff {0aay} p1nf "$va1ab1e1/$#aay" one/1 Onpepeneuue pnuuu raccuea Ecnn onpeenen maccnn c nmenem array, nepemennax $#array coepxnr nnexc nocnenero ero +nemenra. Hmx moxer trt nmtm: ecnn maccnn nasnan, nanpnmep, phonenumbers, ro nnexc ero nocnenero +nemenra coepxnrcx n nepemenno $#phonenumbers. Hanpnmep, npn nannunn maccnna 0aay = {1, 2, 3} urot ntnecrn uncno ero +nemenron, nao oannrt ennnny x nepemenno $#array: 0aay = {1, 2, 3} p1nf " p1nf " p1nf " p1nf "\ \\ \0aay has" . "{$#aay + 1} . 0aay has" . "{$#aay + 1} . 0aay has" . "{$#aay + 1} . 0aay has" . "{$#aay + 1} . " " " " e1emenfs e1emenfs e1emenfs e1emenfs." ." ." ." 0aay has 3 e1emenfs. (Ennnna npnannxercx noromy, uro nnexct maccnna orcunrtnamrcx c nynx). Hcnontsonanne maccnna n cxanxpnom xonrexcre raxxe nosnpamaer ero nnny. uro t nepenecrn maccnn n cxanxpnt xonrexcr, moxno ntnonnnrt na nnm ]nxrnnnym un- cnonym onepannm (nanpnmep, npnannrt nont): 0aay +0 nno, uro onee npo]eccnonantno, ncnontsonart ]ynxnnm scalar: 0aay = {1, 2, 3} p1nf " p1nf " p1nf " p1nf "\ \\ \0aay has" . sca1a {0aay} . 0aay has" . sca1a {0aay} . 0aay has" . sca1a {0aay} . 0aay has" . sca1a {0aay} . " " " " e1emenfs e1emenfs e1emenfs e1emenfs." ." ." ." 0aay has 3 e1emenfs. nno, naxonen, nonpocry npncnonrt maccnn cxanxpno nepemenno: 0aay = {1, 2, 3} $ $$ $va1ab1e = 0 va1ab1e = 0 va1ab1e = 0 va1ab1e = 0a aa a ay ay ay ay p1nf "\0aay has $va1ab1e e1emenfs." 0aay has 3 e1emenfs. Hocuasua. Oopamume euu+auue, :mo ec.u ei npuceoume cra.puo nepe+euuo cnucor, a ue +accue, mo pesv.imamo+ ovoem ue o.uua cnucra, a noc.eouu o.e+eum cnucra. B omo+, rar u eo +uoeux opveux npu- +epax, npoe.emc roumercmua saeucu+ocmi ro+auo Perl, o romopo +i vre eoeopu.u e e.aee 2. Yeenueuue unu cyeuue raccuea urot nsmennrt uncno +nemenron n maccnne, ocrarouno npncnonrt nonoe snauenne ne- pemenno $#array, xpanxme nnexc nocnenero +nemenra. Bor npnmep raxo onepannn: $aay = {1, 2, 3} Crp.61 $#aay = 10 $aay|5] = "here 1s a neW e1emenf!" p1nf $aay|5] Wee 1s a neW e1emenf! (nce nononneennte +nemenrt maccnna nonyuamr neonpeenennoe snauenne undef). Moxno nonnocrtm ouncrnrt maccnn, npncnonn nnexcy nocnenero +nemenra or- pnnarentnoe uncno: $#aay = -1 Cnunuue peyx raccueoe urot oennnrt na maccnna, nx moxno npncnonrt rpertemy maccnny xax cnncox. B cneymmem npnmepe maccnnt array1 n array2 oennxmrcx n maccnn bigarray: 0aay1 = {1, 2, 3} 0aay2 = {4, 5, 6} 0b1gaay = {0aay1, 0aay2} C nontm maccnnom moxno ntnonnxrt nmte onepannn, onycrnmte nx maccnnon: p1nf $b1gaay|5] 6 Ronyeuue cpesa raccuea Cpes maccnna +ro uacrt maccnna, cosanaemax c nomomtm oneparopa nanasona. On nmeer ]opmar x..y] n coornercrnyer maccnny c +nemenramn, nmemmnmn nnexct x, x+1, ..., n anee o y nxnmunrentno. B cneymmem npnmepe c nomomtm +ro xoncrpyxnnn yer cosan nomaccnn array2, cocroxmn ns +nemenron 2 n 3 maccnna array: 0aay = {1, 2, 3, 4, 5, 6, 7, , 9, 10} 0aay2 = 0aay|2..3] p1nf o1n{", ", 0aay2} 3, 4 Uuknu u raccueu Kax yxe ronopnnoct pantme n +ro rnane, c nomomtm nnxna for moxno nocneonarentno nepepart +nemenrt maccnna, xnno opamaxct x xaxomy +nemenry no ero nnexcy: 0aay = {"one", "fWo", "fhee"} fo {$1oop1nd=0 $1oop1nd<=$#aay $1oop1nd++} { p1nf $aay|$1oop1nd] } onefWofhee Moxno raxxe nocnontsonartcx pyrnm oneparopom nnxna - foreach. On nenocpecrnenno nepenpaer +nemenrt maccnna: 0aay = {1, 2, 3, 4, 5} foeach $e1emenf {0aay} { p1nf "$e1emenf\n" } Crp.62 1 2 3 4 5 Moxno oprannsonart nnxn cpasy no necxontxnm maccnnam, nepeuncnnn nocnenne n cnn- cxe (uro nnrepnonnpyer +nemenrt maccnnon n onn cnncox): 0aay1 = {1, 2, 3} 0aay2 = {4, 5, 6} foeach $ foeach $ foeach $ foeach $e1emenf {0aay1, 0aay2} { e1emenf {0aay1, 0aay2} { e1emenf {0aay1, 0aay2} { e1emenf {0aay1, 0aay2} { p1nf "$e1emenf\n" } 1 2 3 4 5 6 Bmecro nnxna foreach moxno ncnontsonart nnxn Ior (na camom-ro ene for n foreach +ro onn n ror xe oneparop): 0aay = {1, 2, 3, 4, 5} fo fo fo fo $e1emenf {0aay} { $e1emenf {0aay} { $e1emenf {0aay} { $e1emenf {0aay} { p1nf "$e1emenf\n" } 1 2 3 4 5 Hpn xenannn moxno axe ncnontsonart nnxn for es cctnxn na xonxpernym nepemennym nnxna, ncnontsyx cnennantnym nepemennym no ymonuannm $_: 0aay = {1, 2, 3, 4, 5} fo fo fo fo {0 {0 {0 {0aay aay aay aay} { } { } { } { p1nf } 12345 Hrax, nnxn moxer oprannsontnartcx mnoxecrnom cnocoon. Konxpernt napnanr sanncnr rontxo or namero nxyca n or pesyntraron, xoropte onxna art nporpamma. Bueop raccuea Ecnn rpeyercx ntnecrn maccnn, moxno nepeart ero ]ynxnnn print xax 0aay = {"one", "fWo", "fhee"} p1nf "hee 1s fhe aay: p1nf "hee 1s fhe aay: p1nf "hee 1s fhe aay: p1nf "hee 1s fhe aay: ",0aay ",0aay ",0aay ",0aay, , , , ". ". ". ". \ \\ \n" n" n" n" hee 1s fhe aay: onefWofhee. Heocrarox +roro meroa n rom, uro print paccmarpnnaer maccnn xax cnncox, a noromy ne- uaraer +nemenrt onn sa pyrnm, uro nopoxaer na ntxoe cnono onetwothree. Fonee yaunax nex ncnontsonart nnrepnonnponanne crpoxn, cocroxme ns saxnmuen- ntx n nonte xantuxn cnon. Vxasan n rene crpoxn nmx maccnna, nonyunm: 0aay = {"one", "fWo", "fhee"} p1nf "hee 1s fhe aay: 0aay. p1nf "hee 1s fhe aay: 0aay. p1nf "hee 1s fhe aay: 0aay. p1nf "hee 1s fhe aay: 0aay.\ \\ \n" n" n" n" Crp.63 hee 1s fhe aay: one fWo fhee. Perl nnrepnonnpyer maccnn, ncnontsyx no ymonuannm nnrepy-pasennrent none (xpannr- cx n cnennantno nepemenno $,). Bosmoxno, rpeyercx pasnrt +nemenrt maccnna ne npoenamn, a sanxrtmn. nx +roro nao npncnonrt cnmnon sanxrax nepemenno $,, n nor uro nonyuaercx n pesyntrare: 0aay = {"one", "fWo", "fhee"} $,= ", " $,= ", " $,= ", " $,= ", " p1nf "hee 1s fhe aay: 0aay.\n" hee 1s fhe aay: one, fWo, fhee. Eme nyume ncnontsonart ]ynxnnm oin, cosan ns maccnna crpoxy n xnno pasennn +ne- menrt sanxrtmn: 0aay = {1, 2, 3, 4, 5, 6, 7, , 9, 10} p1nf p1nf p1nf p1nf o1n o1n o1n o1n{", ", 0 {", ", 0 {", ", 0 {", ", 0aay aay aay aay} } } } 1, 2, 3, 4, 5, 6, 7, , 9, 10 Ecrecrnenno, moxno ncnontsonart nnxn for nnn foreach no ncem +nemenram maccnna: 0aay = {"one", "fWo", "fhee"} foeach $e1emenf {0aay} { foeach $e1emenf {0aay} { foeach $e1emenf {0aay} { foeach $e1emenf {0aay} { p1nf "Cuenf e1emenf = $e1emenf p1nf "Cuenf e1emenf = $e1emenf p1nf "Cuenf e1emenf = $e1emenf p1nf "Cuenf e1emenf = $e1emenf\ \\ \n" n" n" n" } }} } Cuenf e1emenf = one Cuenf e1emenf = fWo Cuenf e1emenf = fhee Hy n n sanepmenne nao samernrt, uro, nocxontxy nx ocryna x nmomy +nemenry mac- cnna ocrarouno yxasart ero nnexc, moxno oprannsonart ntno maccnna nmtm cnoco- om n n nmom ]opmare. Cpaueauue (splicing) raccuea Cpamnnanne maccnna osnauaer oannenne nontx +nemenron ns cnncxa, nosmoxno, c same- mennem +nemenron, yxe xpanxmnxcx n maccnne. nx +ro nenn ncnontsyercx ]ynxnnx splice: sp11ce uaccua, cue|euue, nuua, cnucox sp11ce uaccua, cue|euue, nuua sp11ce uaccua, cue|euue Ecnn n xauecrne napamerpa saan cnncox, ro splice yanxer ns maccnna +nemenrt, onnct- naemte napamerpamn c+eueuue n o.uua, n samemaer nx +nemenramn cnncxa. B cnncxonom xonrexcre ]ynxnnx splice nosnpamaer +nemenrt, yanennte ns maccnna. B cxanxpnom xonrexcre ona nosnpamaer nocnenn yanennt +nemenr (nnn undef, ecnn +nemenrt ne yanxnnct). Hpn orcyrcrnnn napamerpa o.uua splice yanxer nce +nemenrt o xonna maccnna, naunnax c +nemenra c nnexcom c+eueuue. Hpnneem necxontxo npnmepon. Cnauana n maccnn, n xoropom yxe nmemrcx +nemenrt one n two, yer oannen +nemenr three: 0aay = {"one", "fWo"} sp11ce {0aay, 2 sp11ce {0aay, 2 sp11ce {0aay, 2 sp11ce {0aay, 2, , , , 0, "fhee"} 0, "fhee"} 0, "fhee"} 0, "fhee"} p1nf o1n{", ", 0aay} one, fWo, fhee Tenept n xonen craporo maccnna yer oannen nropo maccnn: 0aay1 = {"one", "fWo"} Crp.64 0aay2 = {"fhee", "fou"} sp11ce sp11ce sp11ce sp11ce {0aay1, 2, 0, 0aay2} {0aay1, 2, 0, 0aay2} {0aay1, 2, 0, 0aay2} {0aay1, 2, 0, 0aay2} p1nf o1n{", ", 0aay1} one, fWo, fhee, fou Haxonen, no npemx cpamnnannx moxno yanxrt +nemenrt onoro ns maccnnon. Hanpnmep, +nemenr ero nepnoro maccnna samenxercx maccnnom, coepxamnm +nemenrt two, three n four: 0aay = {"one", "eo"} 0aay2 = {"fWo", "fhee", "fou"} sp11ce {0aay, sp11ce {0aay, sp11ce {0aay, sp11ce {0aay, 1, 1, 0aay2} 1, 1, 0aay2} 1, 1, 0aay2} 1, 1, 0aay2} p1nf o1n{", ", 0aay} one, fWo, fhee, fou Hueepfupoeauue raccuea urot nnneprnponart maccnn (pacnonoxnrt ero +nemenrt n oparnom nopxxe), ncnont- syercx ]ynxnnx reverse: 0NeW = evese 0aay Copfupoeka raccuea nx coprnponxn maccnna npnmenxercx ]ynxnnx sort (nx maccnnon ona ntstnaercx n pa- oraer rouno rax xe, xax n nx cnncxon, cm. onncanne sort n npetyme rnane): 0neW = sof {$a <=> $b} 0aay C ee nomomtm moxno ntnonnxrt camte xnrpoymnte coprnponxn nanpnmep, nor rax moxno coprnponart maccnn no ytnannm: 0neW = sof {$b <=> $a} 0aay Cospauue xsue X+mn (x+m-rannnt, x+mnponannte rannnt) n onee pannnx nepcnxx Perl nastnannct ac- connarnnntmn maccnnamn, n +ro onnctnaer nx cyrt onee coepxarentno, rax xax nx oc- ryna x anntm nmecro uncnonoro nnexca ncnontsyercx xnmu (ro ecrt rexcronax crpoxa), xo- ropax acconnnpyercx co snauennem. Hocxontxy n x+max cctnxn na annte ocymecrnnxmrcx c nomomtm xnmue, a ne uncen, ocryn x +nemenram otuno nnrynrnnnee npome, uem n cnyuae maccnnon. Onaxo oprannsannx nnxnon nx x+me moxer oxasartcx rpynee, noromy uro x +nemenry x+ma nenosmoxno nonyunrt ocryn c nomomtm uncnonoro nreparopa nnxna. Hmena x+me naunnamrcx c npe]nxca . Tax cosaercx nycrax x+m-rannna: xhash ={} Kax n n cnyuae maccnnon, npn paore c +nemenramn x+me nao ncnontsonart past- menontnammn npe]nxc $. Bor, nanpnmep, xax nomecrnrt n x+m nonte +nemenrt: xhash = {} $ $$ $hash hash hash hash{ {{ {fu1f fu1f fu1f fu1f} = } = } = } = app1e app1e app1e app1e $hash{ san $hash{ san $hash{ san $hash{ sandW1ch} = hambuge dW1ch} = hambuge dW1ch} = hambuge dW1ch} = hambuge $hash{d1nk} = bubb1y $hash{d1nk} = bubb1y $hash{d1nk} = bubb1y $hash{d1nk} = bubb1y Crp.65 (3ect fruit nepnt xnmu x+m-rannnt, n on coornercrnyer snauennm apple; sandwich xnnxercx nroptm xnmuom co snauennem hamburger n r. .) Oparnre nnnmanne, uro nx xnmua ncnontsymrcx ]nrypnte (]), a ne xnaparnte (]) cxoxn, xax +ro tno c nnexcamn maccnnon. Orentnte +nemenrt nsnnexamrcx ns x+ma raxxe c nomomtm xnmue: xhash = {} $hash{fu1f} = app1e $hash{sandW1ch} = hambuge $hash{d1nk} = bubb1y p1nf $hash{s p1nf $hash{s p1nf $hash{s p1nf $hash{sandW1ch} andW1ch} andW1ch} andW1ch} hambuge Ha camom ene ner neoxonmocrn cosanart nycro x+m, urot nauart ero sanonnenne. Bcrpernn opamenne x necymecrnymmemy x+my, Perl cosaer ero anromarnuecxn. (3ro mar nancrpeuy nporpammncram, nontrxa sacrannrt cncremy paorart rax, xax nt oxnae- re.) Ho+romy cneymmn xo paoraer ne xyxe npetymero: $hash{fu1f} = app1e $hash{sandW1ch} = hambuge $hash{d1nk} = bubb1y p1nf $hash{sandW1ch} hambuge He satnare, uro Perl npn cunrtnannn nontx +nemenron onycxaer npoentnte cnmno- nt. Ho+romy, nanpnmep, maccnnt c mnoxecrnom +nemenron moxno cenart onee npo- spauntmn nx nonnmannx, ncnontsonan mnorocrpounte xoncrpyxnnn: 0aay = { "one", "fWo", "fhee", "fou", "f1ve", "s1x" } Touno rax xe moxno cosanart x+m-rannnt, yxastnax napt xnmu/snauenne: xhash = { fu1f , app1e, sandW1ch , hambuge, d1nk , bubby } p1nf "$hash{fu1f}\n" app1e Bmecro sanxro, pasenxmme napt, moxno ncnontsonart cnnonnm xoncrpyxnnm >. C +rnm oneparopom ornomenne xnmu/snauenne ntrnxnr npospaunee, rax uro nporpammn- crt uacro sannctnamr xomany cosannx x+ma rax: xhash = { fu1f => app1e, sandW1ch => hambuge, d1nk => bubby } p1nf "$hash{fu1f}\n" app1e Oneparop > ne ntnonnxer cnennantntx onepann +ro n rounocrn ro xe camoe, uro n otunax sanxrax, sa ncxnmuennem roro ]axra, uro on ntnyxaer nnrepnpernponart cno- no, croxmee cnena, xax crpoxy. Hanpnmep, xomana p1nf "x"=>"y"=>"" xy enaer ro xe, uro n xomana p1nf "x", "y", "" xy Crp.66 He sanpemaercx ncnontsonart xnmun, coepxamne npoent. Hanpnmep, moxno cosart +nemenr x+ma c xnmuom ice cream: $hash2{cake} = choco1afe $hash2{p1e} = b1uebey $ $$ $hash hash hash hash2{ 2{ 2{ 2{1ce 1ce 1ce 1ce ceam ceam ceam ceam} = } = } = } = pecan pecan pecan pecan n xora norpeyercx ncnontsonart ero: p1nf p1nf p1nf p1nf "$hash{1ce ceam} "$hash{1ce ceam} "$hash{1ce ceam} "$hash{1ce ceam}\ \\ \n" n" n" n" pecan Hpn cosannn xnmue moxno ncnontsonart nnrepnonnponanne rexcrontx crpox, orpann- uenntx nontmn xantuxamn, a raxxe npocro nepemennte. $va1ue = $hash{$key} X+mn oecneunnamr momnoe cpecrno nx xpanennx anntx, no cctnartcx na +nemenrt x+m-rannnt nanpxmym, c nomomtm uncnonoro nnexca, nentsx. 3ro, xoneuno xe, ne snaunr, uro nentsx oprannsonart nnxn no +nemenram x+ma, o +rom paccxastnaercx a- nee n +ro rnane n pasene Hnxnt no x+my. Hcnonusoeauue xsue Hocne roro xax nt cosann x+m, moxno paorart c nnm, opamaxct x ero +nemenram c no- momtm xnmue: $va1ue = $hash{$key} Kpome +roro, c nomomtm oneparopa npncnoennx nerxo oannrt n x+m nonte +nemenrt, xax +ro tno cenano n npnmepe ns npetymero pasena: $hash{fu1f} = app1e $hash{fu1f} = app1e $hash{fu1f} = app1e $hash{fu1f} = app1e $hash{sandW1ch} = hambuge $hash{sandW1ch} = hambuge $hash{sandW1ch} = hambuge $hash{sandW1ch} = hambuge $hash {d1nk} = bubb1y $hash {d1nk} = bubb1y $hash {d1nk} = bubb1y $hash {d1nk} = bubb1y p1nf $hash{sandW1ch} hambuge B cnncxonom xonrexcre x+m nnrepnonnpyercx: napt xnmu/snauenne nepexoxr n ennt cnncox +nemenron. B cxanxpnom xonrexcre nocrannxercx snauenne ucmuua (true), ecnn n x+me ecrt xorx t ona napa xnmu/snauenne, n .ori (Ialse), ecnn x+m nycr. oaeneuue snereufoe e xsu urot oannrt nont +nemenr (ro ecrt napy xnmu/snauenne) n x+m, ncnontsyre onepa- rop npncnoennx. B cneymmem npnmepe n x+m hash oannxmrcx na snauennx: xhash={} $hash{$key} = $va1ue $hash{$key2} = $va1ue2 X+mn moxno cosanart, ncnontsyx npncnoenne cnncxa, n rouno rax xe moxno oannxrt nonte +nemenrt. B cneymmem npnmepe raxnm opasom x x+my hash oannxercx no- nax napa xnmu/snauenne: xhash = { fu1f => app1e, sandW1ch => hambuge, d1nk => bubby } x xx xh hh hash = {xhash, dess1ng, b1ue cheese} ash = {xhash, dess1ng, b1ue cheese} ash = {xhash, dess1ng, b1ue cheese} ash = {xhash, dess1ng, b1ue cheese} Crp.67 p1nf $hash{dess1ng} b1ue cheese 3ror npnmep paoraer, noromy uro oneparop cnncxa () cnepna nnrepnonnpyer x+m hash n cnncox, a sarem nocnenn pacmnpxercx eme na ony napy xnmu/snauenne. Hs-sa nnrep- nonxnnn, xoropax nponcxonr o npncnoennx cnncxom, n annom cnyuae nentsx ncnontso- nart coxpamennym ]opmy c oneparopom +: xhash += {dess1ng, b1ue cheese} # 1o ue pabo1ae1 Rpoeepka xsua ua uanuue snereufa urot nponepnrt, ecrt nn n x+me nexoropt +nemenr, moxno ncnontsonart ]ynxnnm exists. Hanpnmep, n cneymmem npnmepe n x+me hash nmercx +nemenr c xnmuom vegetable: $hash{fu1f} = app1e $hash{sandW1ch} = hambuge $hash{d1nk} = bubb1y 1 11 1f {e f {e f {e f {ex xx x1sfs{$hash{"vegefab1e"}}} { 1sfs{$hash{"vegefab1e"}}} { 1sfs{$hash{"vegefab1e"}}} { 1sfs{$hash{"vegefab1e"}}} { p1nf "L1emenf ex1sfs." } e1se { p1nf "L1emenf does nof ex1sf." } L1emenf does nof ex1sf Ypaneuue snereufoe xsua urot yannrt +nemenr ns x+ma, ncnontsyercx ]ynxnnx delete. B +rom npnmepe yanxer- cx +nemenr x+ma n sarem nponepxercx, cymecrnyer nn eme raxo +nemenr: $hash{fu1f} = app1e $hash{sandW1ch} = hambuge $hash{d1nk} = bubb1y de1efe {$hash{"fu1f"}} 1f {e 1f {e 1f {e 1f {ex xx x1sfs{$hash{"fu1f"}}} { 1sfs{$hash{"fu1f"}}} { 1sfs{$hash{"fu1f"}}} { 1sfs{$hash{"fu1f"}}} { p1nf "L1emenf ex1sfs." } e1se { p1nf "L1emenf does nof ex1sf." } L1emenf does nof ex1sf Uuknu no xsuy Cymecrnyer mnoxecrno cnocoon oprannsannn nnxna no +nemenram x+ma. uynxnnx each nosnonxer ncnontsonart sanncn x+ma (ro ecrt n xnmu, n snauenne) nennxom. Paccmorpnm npnmep. Cnauana cosanm x+m-rannny: $hash{fu1f} = app1e $hash{sandW1ch} = hambuge $hash{d1nk} = bubb1y Tenept moxno nsnneut ns nee napt xnmu/snauenne, ncnontsyx ]ynxnnm each n npncnoe- nne cnncxom: $hash{fu1f} = app1e $hash{sandW1ch} = hambuge Crp.68 $hash{d1nk} = bubb1y Wh11e {{$key Wh11e {{$key Wh11e {{$key Wh11e {{$key, , , , $va1ue} = each{xhash}} { $va1ue} = each{xhash}} { $va1ue} = each{xhash}} { $va1ue} = each{xhash}} { p1nf "$key => $va1ue p1nf "$key => $va1ue p1nf "$key => $va1ue p1nf "$key => $va1ue\ \\ \n" n" n" n" } } } } d1nk => bubb1y sandW1ch => hambuge fu1f => app1e Hcnontsonanne each n annom cnyuae nonesno, rax xax nx xaxoro +nemenra x+ma npn onom ee ntsone nosnpamaercx xax xnmu, rax n snauenne. Kcrarn, +nemenrt x+ma nsnnexamrcx ne n rom nopxxe, n xaxom onn sanocnnnct. eno n rom, uro Perl xpannr nx, ncnontsyx cocrnennt nnyrpennn anropnrm, onrnmnsnpymmn sarpart namxrn n oecneunnammn nerxocrt ocryna. Coprnponxa +nemenron onnctnaer- cx n pasene Coprnponxa x+ma anee n +ro rnane. Hpn paore c +nemenramn x+ma moxno ncnontsonart nnxn foreach. Hanpnmep, conmecrno c ]ynxnne keys, nosnpamamme cnncox xnmue x+ma, on nosnonxer nocneonarentno nepepart nect x+m: $hash{fu1f} = app1e $hash{sandW1ch} = hambuge $hash{d1nk} = bubb1y foeach $key {keys xhash}{ foeach $key {keys xhash}{ foeach $key {keys xhash}{ foeach $key {keys xhash}{ p1nf $hash{$key} . p1nf $hash{$key} . p1nf $hash{$key} . p1nf $hash{$key} . " "" "\ \\ \n" n" n" n" } }} } bubb1y hambuge app1e Onaxo nmecro keys moxno cpasy nocnontsonartcx ]ynxnne values. Ona nosnpamaer cnncox snauenn, xpanxmnxcx n x+me. C ne nnxn, ntnoxmn nce snauennx x+ma, npn- nnmaer cneymmn nn: $hash{fu1f} = app1e $hash{sandW1ch} = hambuge $hash{d1nk} = bubb1y foeach $va1ue {va1ues xhash}{ foeach $va1ue {va1ues xhash}{ foeach $va1ue {va1ues xhash}{ foeach $va1ue {va1ues xhash}{ p1nf "$va1ue p1nf "$va1ue p1nf "$va1ue p1nf "$va1ue\ \\ \n" n" n" n" } }} } bubb1y hambuge app1e Kax nnnre, necmorpx na ro, uro x +nemenram x+ma nentsx nonyunrt ocryn c nomomtm uncnonoro nnexca, Perl npeocrannxer ocrarouno cpecrn nx nx nepeopa. Bueop xsua urot ntnecrn coepxnmoe x+ma, moxno nnrepnonnponart ero n crpoxy, saxnmuennym n nonte xantuxn: $hash{fu1f} = app1e $hash{sandW1ch} = hambuge $hash{d1nk} = bubb1y p pp p1nf "0{|xhash]} 1nf "0{|xhash]} 1nf "0{|xhash]} 1nf "0{|xhash]}\ \\ \n" n" n" n" d1nk bubb1y sandW1ch hambuge fu1f app1e B pesyntrare raxo neuarn x+m nepeneen n cnncxont xonrexcr, ro ecrt npecrannen n nne nap xnmu/snauenne, pacnonoxenntx pyr sa pyrom. uynxnnx each n anno cnrya- nnn aer onee yaunoe pemenne: $hash{fu1f} = app1e Crp.69 $hash{sandW1ch} = hambuge $hash{d1nk} = bubb1y W WW Wh1 h1 h1 h11 11 1e e e e {{$key, $va1ue} {{$key, $va1ue} {{$key, $va1ue} {{$key, $va1ue} = = = = each{xhash}} each{xhash}} each{xhash}} each{xhash}} { { { { p1nf "$key: $va1ue p1nf "$key: $va1ue p1nf "$key: $va1ue p1nf "$key: $va1ue\ \\ \n" n" n" n" } } } } d1nk: bubb1y sandW1ch: hambuge fu1f: app1e Ecrt mnoxecrno pyrnx cnocoon oprannsonart nnxn no +nemenram x+ma (cm. pasen Hnxnt no x+my panee n +ro rnane). Copfupoeka xsua nx coprnponxn x+me ncnontsyercx ra xe ]ynxnnx sort, uro n nx coprnponxn cnncxon n maccnnon. Bor, nanpnmep, xax x+m coprnpyercx no snauennm xnmua: $hash{fu1f} = app1e $hash{sandW1ch} = hambuge $hash{d1nk} = bubb1y foeach foeach foeach foeach $key {sof keys xh $key {sof keys xh $key {sof keys xh $key {sof keys xhash} { ash} { ash} { ash} { p1nf "$key => $hash{$key}\n" } d1nk => bubb1y fu1f => app1e sandW1ch => hambuge Touno rax xe nmecro coprnponxn no xnmuy moxno ntnonnnrt coprnponxy no snauennm: $hash{fu1f} = app1e $hash{sandW1ch} = hambuge $hash{d1nk} = bubb1y foeach $va1ue {sof va1ues xhash} { foeach $va1ue {sof va1ues xhash} { foeach $va1ue {sof va1ues xhash} { foeach $va1ue {sof va1ues xhash} { p1nf "$va1ue\n" } app1e bubb1y hambuge Cnunuue xsue nx oennennx nyx x+me moxno ncnontsonart npncnoenne cnncxom. Hanpnmep, o- nycrnm, ecrt na x+ma: $hash1{fu1f} = app1e $hash1{sandW1ch} = hambuge $hash1{d1nk} = bubb1y $hash2{cake} = choco1afe $hash2{p1e} = b1uebey $hash2{1ce ceam} = pecan Oa x+ma moryr trt oennent cneymmnm opasom: xb1ghash = {xhash1, xhash2} xb1ghash = {xhash1, xhash2} xb1ghash = {xhash1, xhash2} xb1ghash = {xhash1, xhash2} p1nf $b1ghash{1ce ceam} pecan Hcnonusoeauue xsue u raccueoe e npuceoeuuu cnuckor Crp.70 Hpn npncnoennn cnncxom moryr ncnontsonartcx x+m-rannnt n maccnnt. Hecxontxo x+me nnn cnncxon cnpana or oneparopa npncnannannx nnrepnonnpymrcx n onn cnncox, rax uro ne nosnnxaer nnxaxnx cnnraxcnuecxnx nponem. Paccmorpnm npnmep ns npetymero pasena: $hash1{fu1f} = app1e $hash1{sandW1ch} = hambuge $hash1{d1nk} = bubb1y $hash2{cake} = choco1afe $hash2{p1e} = b1uebey $hash2{1ce ceam} = pecan Hpn npncnoennn cnncxom x+mn oennxmrcx n onn cnncox: xb1ghash xb1ghash xb1ghash xb1ghash = = = = {xha {xha {xha {xhash sh sh sh1 11 1, , , , xhash2} xhash2} xhash2} xhash2} p1nf $b1ghash{1ce ceam} pecan Bor xax nponcxonr npncnoenne cnncxy, cocroxmemy ns nyx cxanxpntx nepemenntx n onoro maccnna (maccnn oxsarentno onxen croxrt n cnncxe nepemenntx nocnennm): {$va1 {$va1 {$va1 {$va1, , , , $va2 $va2 $va2 $va2, , , , 0 00 0a a a aay ay ay ay} = {1, 2, } = {1, 2, } = {1, 2, } = {1, 2, 3, 4, 5, 6, 3, 4, 5, 6, 3, 4, 5, 6, 3, 4, 5, 6, 7, } 7, } 7, } 7, } p1nf "$va1\n" p1nf "$va2\n" p1nf "0aay\n" 1 2 34567 Hpeynpexeuue. Koeoa ei eino.ueme npuceoeuue cnucrv nepe+euuix, cpeou romopix u+eemc +accue u.u xou, uvruo oimi ocmoporui+. B Perl +accuei u xou-mao.ui npu npuceaueauuu u+ uoeix o.e+eumoe ae- mo+amu:ecru +eumm pas+ep. Hoomo+v npu npuceaueauuu cnucrv sua:euu, uaxooue+vc c.eea om onepa- mopa npuceaueauu, +accue u.u xou e omo+ cnucre oo.rui uaxooumic ua noc.eoue+ +ecme. B npomueuo+ c.v:ae ouu npocmo saxeamm ece o.e+eumi, romopie oo.rui oimi npuceoeui ocmaeuu+c nepe+euui+, u me no.v:am ueonpeoe.euuoe sua:euue. Hcnonusoeauue funa pauuux typeglob Koncrpyxnnn typeglob nrpamr n Perl pont cnnonnmon otuntx nepemenntx. (B pannnx nepcn- xx onn ntcrynann n xauecrne ananora cctnox, no renept n Perl noxnnnnct nonnonennte cctn- xn.) 3ror rnn anntx nosnonxer cnxsart nmx ono nepemenno (nanpnmep, data) c nmenem pyro (nanpnmep, alsodata). B pesyntrare nmena rnna $alsodata, alsodata n alsodata y- yr cctnartcx na re xe oexrt, uro n $data, data n data (ro ecrt $alsodata yer cct- nartcx na re xe annte, uro n $data, alsodata na re xe annte, uro n data, n r. .). Hpnneem npnmep. Cnauana cosamrcx nepemennte $data n data: $dafa = "hee 1s fhe dafa." 0dafa = {1, 2, 3} Tenept nmenn data npncnannaercx cnnonnm alsodata: $dafa = "hee 1s fhe dafa." 0dafa = {1, 2, 3} " "" "a1sodafa a1sodafa a1sodafa a1sodafa = == = " "" "dafa dafa dafa dafa A renept nmecro nmenn data moxno ncnontsonart nmx alsodata: $dafa = "hee 1s fhe dafa." 0dafa = {1, 2, 3} "a1sodafa = "dafa p1nf p1nf p1nf p1nf "$a1sodafa "$a1sodafa "$a1sodafa "$a1sodafa\ \\ \n" n" n" n" Crp.71 p1nf 0 p1nf 0 p1nf 0 p1nf 0a1 a1 a1 a1sodafa sodafa sodafa sodafa hee 1s fhe dafa. 123 Ha camom ene nponcxonr nor uro: sannct rannnt cnmnonon, oosnauaemax xax *u+, xpannr nn]opmannm oo ncex nepemenntx c omnm nmenem u+ nanpnmep, sannct data rexyme rannnt cnmnonon xpannr nn]opmannm o nepemenntx $data, data, data n r. . B uacrnocrn, nx xaxoro rnna anntx sannctnaercx apec onacrn namx- rn, re +ro annoe xpannrcx, nnn cctnxa na nee (ro ecrt cctnxa na cxanxpnym nepemen- nym $data, cctnxa na maccnn data, cctnxa na x+m-rannny data n r. .). Hpn npncnoennn xoncrpyxnn typeglob Perl xonnpyer sanncn rannnt cnmnonon nx ono- ro nmenn n pyroe nmx. Cnmnon , ncnontsyemt n xoncrpyxnnn typeglob, moxno cunrart manonom nmoro npe]nxca rnna anntx ($, , n r. .). Fonee nopono nponecc xonnpo- nannx sannce rannnt cnmnonon yer paccmorpen n cneymmem pasene. Hocuasua. Umooi noc.e onepauu alsodata data nepe+euua $alsodata cma.a cuuouu+o+ $data, ua +o+eum npuceoeuu nepe+euua $data +orem u ue oimi onpeoe.eua. Hocro.irv Perl ro+nu.upvem roo uenocpeocmeeuuo nepeo eino.ueuue+ ceuapu, na+mi o. $data ovoem eioe.eua sapauee u cci.ra ua uee vre nonaoem e cmpvrmvpv data. Hua:e e+ecmo cci.ru ua nepe+euuvm $data e sanuci mao.ui cu+- eo.oe alsodata oi.a oi cronupoeaua uuqop+au o mo+, :mo maro cra.puo nepe+euuo eue uem u nepe+euuie $data u $alsodata ue +oe.u oi cci.amic ua oouo u mo re sua:euue. Hpn ncnontsonannn xoncrpyxnn typeglob neoxsarentno xonnponart ncm sannct rann- nt cnmnonon, ornocxmymcx x annomy nmenn. Ecnn cnpana or oneparopa npncnannannx cronr cctnxa rontxo na onn rnn anntx (nanpnmep, cxanxp), ro n nonoe nmx yer cct- nartcx na +ror rnn anntx n ntcrynart cnnonnmom rontxo nx yxasannoro rnna: $dafa = "hee 1s fhe dafa." 0dafa = {1, 2, 3} " "" "a1sodafa a1sodafa a1sodafa a1sodafa= == =\ \\ \$ $$ $dafa dafa dafa dafa # 8aeeu cuuouuu 1onuxo nn cxannpoa B annom cnyuae $alsodata cranonnrcx cnnonnmom $data, no alsodata ne yer cnno- nnmom nx data, alsodata nx data n r. . Hntmn cnonamn, raxax xomana cpa- oraer nopmantno: p1nf "$a1sodafa\n" hee 1s fhe dafa. a raxax paorart ne yer: p1nf 0a1sodafa Tun pauuux typeglob u sanucu e fanuue cureonoe Kax yxe ronopnnoct, Perl xpannr nn]opmannm o nepemenntx no nnyrpenne rannne nmen (rannne cnmnonon) n nne orentntx sannce. Kaxax sannct rannnt cnmnonon npecrannxer coo rnn typeglob. 3ror rnn anntx moxno cunrart neontmnm x+mem, snauennxmn xoroporo xnnxmrcx cctnxn na onacrt namxrn, re xpanxrcx coornercrnym- mne nepemenntm annte. Knmuamn nx raxnx x+me (xorx +ro nn]opmannn nt, nosmoxno, ne naere n oxymenra- nnn Perl) ntcrynamr nmena rnnon anntx, sanncannte sarnanntmn yxnamn (ro ecrt A- A, HASH n r. .). 3ro moxer trt nonesntm, ecnn rpeyercx nenocpecrnennt ocryn x rannne cnmnonon Perl. onycrnm, n nporpamme onpeenena nepemennax co snauennem 5: $va1ab1e = 5 Crp.72 B +rom cnyuae variable nmx nepemenno rnna typeglob, xpanxme nn]opmannm o $variable, a variableSAA] cctnxa na snauenne nepemenno $variable. urot nonyunrt snauenne nepemenno $variable uepes cctnxy na onacrt anntx n rannne cnmnonon, ncnontsyercx pastmenontnammn oneparop $: $va1ab1e = 5 p1nf ${"va1ab1e{5CALAk}} 5 Crp.73 Fnana 4
Onepa1opm u npuopu1e1m onepa1opon
Kopo1ko B rpex npetymnx rnanax ocyxannct cranaprnte ]opmart anntx n xstxe Perl. B +ro rnane peut ner o paore c anntmn c nomomtm oneparopon. Oneparopt nosnonxmr conepmart onepannn c anntmn, axe ecnn +ro npocroe cnoxenne: p1nf 2 + 2 4 Oneparopt moryr ntnonnxrt n onee cnoxnte ntuncnennx, noono repnapnomy (rpo- crnennomy) ycnonnomy oneparopy, paccmarpnnaemomy n cneymmem npnmepe: Wh11e {<>} { p1nf $ < 10 $ : "${\{{a,b,c,d,e,f}|$ - 10]}}\n" } ntpaxenne cunrtnaer ns nxontx anntx uncna or 0 o 15 n ntnonr mecrnanarepnu- nym nn]py (ecnn nt ne snaxomt c oneparopom :, oparnrect x paseny Tepnapnt yc- nonnt oneparop n +ro rnane). Oneparopt Perl ntnonnxmr camte pasnnunte ecrnnx, no n nepnom npnnnxennn onn moryr trt pasnrt na ynapnte, nnapnte, repnapnte n cnncxonte. Vnapntm oneparo- pam rpeyercx onn onepan nanpnmep, n cnyuae oneparopa !, ntnonnxmmero nooum- uoe .oeu:ecroe ompuauue, xomana $notvariable !$variable ocymecrnnr nornuecxoe nnneprnponanne coepxnmoro nepemenno $variable n sanecer pesyntrar n nepemennym $notvariable. Buuapuie onepamopi rpeymr nyx onepanon nanpnmep, nx oneparopa cnoxennx + xomana $sum 2 + 2 ntuncnnr cymmy nyx nentx uncen n sanecer ee n ne- pemennym $sum. Tepuapuie oneparopt ncnontsymr rpn onepana nanpnmep, n pesynt- rare paort ycnonnoro oneparopa : xomana $absva1ab1e = $va1ab1e >= 0 $va1ab1e : -$va1ab1e naer n sanecer n nepemennym $absvariable aconmrnoe snauenne ntpaxennx $variable. Haxonen, cnucroeie onepamopi, noono oneparopy print, ncnontsymr cnncxn onepan- on (xax, nanpnmep, xomana print 1, 2, 3, 4, 5). Cctnxa na qvurum print xax na onepamop na nepnt nsrnx moxer noxasartcx crpanno. Ho n Perl ]ynxnnx c aprymenramn, yxasanntmn es xpyrntx cxoox, paccmarpnnaercx n xauecrne oneparopa. Fonee roro, npn ntuncnennn ntpaxenn ncnontsymrcx npannna npn- opnrera, onpeenennte nx oneparopon (onee nopono o +rom ronopnrcx n pasene Hanntcmn npnopnrer: repmt n cnncxn, croxmne cnpana +ro rnant). Hpexe uem ne- Crp.74 pexonrt x paore c oneparopamn, neoxonmo pasopartcx c nonxrnem cpannnrentnoro npnopnrera. Rpuopufef onepafopoe Oneparopt Perl no mepe ytnannx npnopnrera (nepnax crpouxa coornercrnyer nanntcme- my npnopnrery) nepeuncnent n ran. .1. Bpemx or npemenn npn paore c Perl npnxonrcx yunrtnart cpannnrentnt npnopnrer oneparopon. B onom ntpaxennn moxer ncnontsonartcx necxontxo oneparopon: p1nf 2 + 3 " 4 Cnoxnr nn Perl 2 n 3 nepe ymnoxennem na 4 nnn cnepna ymnoxnr 3 na 4 n nnmt sarem npnannr 2 3ror nonpoc npoxcnxercx npn snannn npannn npnopnrera oneparopon, cyme- crnymmnx n Perl. Kax nnno ns ran. .1, ymnoxenne () nmeer onee ntcoxn npnopnrer, uem cnoxenne (+). Ho+romy Perl cnauana ymnoxnr 3 na 4, a norom npnannr 2: p1nf 2 + 3 " 4 14 Ecrecrnenno, moxno nsmennrt nopxox ntnonnennx onepann, paccrannn cxoxn: p1nf {{2 + 3} " 4} 20 Kcrarn, oparnre nnnmanne, uro +ry xomany nentsx saart xax p1nf {2 + 3} " 4 Hocxontxy print paoraer nno xax oneparop, nno xax ]ynxnnx, cxoxa yxastnaer Perl, uro print nao ncnontsonart n xauecrne ]ynxnnn, a 2 + 3 +ro napamerp, nepeanaemt e. Ho+romy Perl nocnymno ntneer: p1nf {2 + 3} " 4 5 Onaxo +ry nponemy moxno oorn. Ecnn nnrepnperannx cnncounoro oneparopa (roro xe print) c aprymenrom, naunnammnmcx co cxoxn, xax ntsona ]ynxnnn, ne rpeyercx, ro nepe cxoxamn moxno nocrannrt ynapnt oneparop +. On ne oxaxer nnxaxoro nosecr- nnx na camo ntpaxenne, onaxo coomnr Perl, uro nnrepnpernponart xoncrpyxnnm n cxoxax xax ntson ]ynxnnn ne cneyer: p1nf +{2 + 3} " 4 20 Hrax, cpannnrentnt npnopnrer oneparopon nectma naxen. Pasent +ro rnant yyr op- rannsonant n coornercrnnn c ran. .1, ro ecrt oneparopt c nanntcmnm npnopnrerom o- cyxamrcx n nepnym ouepet. 1abnua 4.1. 1abnua 4.1. 1abnua 4.1. 1abnua 4.1. Cpaauu1enuuuu npuopu1e1 onepa1opoa {onepa1opu, nepeuucneuuue a ouou rpynne, uuek1 ouuaxoauu npuopu1e1} Onepa1op Onepa1op Onepa1op Onepa1op ccoua1uauoc1u ccoua1uauoc1u ccoua1uauoc1u ccoua1uauoc1u 1epuu eaan npaauu onepa1op cnucxa -> eaan ++ he onpeeneua -- "" hpaaan Crp.75 ! hpaaan
\ yuapuuu + yuapuuu - = eaan ! " eaan / x x + eaan - . << eaan >> uueuoaauuue yuapuue he onpeeneua onepa1opu, onepa1opu npoaepxu aunoa <> he onpeeneua <= >= 1f gf 1e ge == he onpeeneua != <=> eq ne cmp eaan | eaan
eaan || eaan .. he onpeeneua ... : hpaaan = hpaaan += "= /= x= = |= x= ""= <<= >>= = ||= , eaan => neauu onepa1op cnucxa he onpeeneua nof hpaaan and eaan o eaan xo
Henocpepc1neuume pemeuun Haueucuu npuopufef: fepru u cnucku, cfonue cnpaea Tepmt nmemr n Perl nanntcmn npnopnrer. K repmam ornocxrcx nepemennte, ntpaxennx n xantuxax, ntpaxennx n cxoxax, xoncrpyxnnn do n eval, estmxnnte (anonnmnte) mac- cnnt n x+mn, cosanaemte c nomomtm xoncrpyxnn ] n ] (cm. - rnany ), a raxxe ]ynx- nnn c aprymenramn, saxnmuenntmn n cxoxn. Touno rax xe nanntcmn npnopnrer, na- npannennt e.eeo (leItward precedence), nmeer oneparop cnncxa (naop +nemenron, pase- Crp.76 nenntx sanxro). 3ro snaunr, uro no cpannennm c oneparopamn, naxoxmnmncx cnena or nero, on nmeer nanntcmn npnopnrer, a xora ero npnopnrer cpannnnaercx c oneparopa- mn, croxmnmn cnpaea, +ror xe oneparop cnncxa nonyunr ropaso onee cnat npaei npnopnrer (rightward precedence). Paccmorpnm cneymmn npnmep: p1nf 1, 2, 3, 4, sof 9, , 7, 6, 5 12345679 Kax nnno ns pesyntrara, cnepna oneparop sort coprnpyer cnncox, yxasannt n xauecrne ero aprymenra, a sarem print ntnonr cnncox, xnnxmmncx oennennem nyx cnncxon. Kora ner ananns uncna 9, ro cnena or nero oxastnaercx oneparop sort, a cnpana one- parop cnncxa. Tax xax no ornomennm x neno cropone y oneparopa cnncxa ontmn npn- opnrer, ro Perl cnepna oennnr uncno 9 n onn cnncox c nocneymmnmn +nemenramn (cm. raxxe pasen Cnncxn, croxmne cnena nnxe x xonny rnant) n nnmt sarem npnme- nnr x pesyntrary onepannm coprnponxn. C pyro cropont, xora Perl oxonr o uncna , ro nmeer eno c nymx nymnmn nopx oneparopamn oneparopom cnncxa n onepa- ropom sort. Oneparop cnncxa nmeer onee cnat npnopnrer no ornomennm x pacnono- xennomy cnpana or nero oneparopy sort, no+romy oennenne +nemenron n cnncox yer ornoxeno o rex nop, noxa oneparop coprnponxn ne ntnonnnr cnom paory. Onepafop-cfpenka Hn]nxcnt oneparop ->, pastmenymmn cctnxy, sanmcrnonan ns xstxa C. Ecnn cnpana or nero naxonrcx xoncrpyxnnx ...] nnn ...], ro cnena onxna naxonrtcx cctnxa na mac- cnn nnn x+m. B cneymmem npnmepe cosaercx cctnxa na x+m (c nomomtm oneparopa \, nosnpamammero apec nepemenno), a sarem c nomomtm oneparopa -> oecneunnaercx ocryn x coepxnmomy x+ma uepes nonyuennym cctnxy: $hash{fu1f} = app1e $hash{sandW1ch} = hambuge $hash{d1nk} = bubb1y: $hashef = $hashef = $hashef = $hashef = \ \\ \xhash xhash xhash xhash p1nf p1nf p1nf p1nf $ $$ $hashef hashef hashef hashef - -- -> { > { > { > {sandW1ch sandW1ch sandW1ch sandW1ch} } } } hambuge Kora cnpana or oneparopa ner xnaparntx ...] nnn ]nrypntx ...] cxoox, a nenax uacrt ne npecrannxer coo cctnxn na maccnn nnn x+m, ro cnena onxen naxonrtcx nno o- exr, nno nmx xnacca, a cnpana ero mero: $esu1f = $myobecf -> mymefhod{$dafa} (Fonee nopono o oexrax n xnaccax paccxastnaercx n rnane 1.) Aefonpupaeuue u aefoyreuuueuue Oneparop npnpamennx () n oneparop ymentmennx () n Perl paoramr rouno rax xe, xax n xstxe C. Haxoxct nepe nmenem nepemenno, onn ynennunnamr nnn ymentmamr ee snauenne na ennnny o roro, xax nocrannrt snauenne n ntpaxenne. Kora +rn oneparo- pt oxastnamrcx nocne nmenn nepemenno, onn cnepna nocrannxmr n ntpaxenne snaue- nne nepemenno, a norom ynennunnamr nnn ymentmamr ee coepxnmoe. onycrnm, onpe- enent nepemennte $variable1 n $variable2: Crp.77 $va1ab1e1 = 1 $va1ab1e2 = 1 Vnennunrt snauenne nepemenno moxno, npnmennn oneparop ++ n xauecrne npe]nxca: p1nf ++$va1ab1e1 . "\n" p1nf $va1ab1e1 . "\n" 2 2 Ecnn ror xe oneparop ncnontsonart n xauecrne cy]]nxca, snauenne nepemenno nsmennr- cx nnmt nocne roro, xax oneparop nepner ee rexymee snauenne: p1nf $va1ab1e2++ . "\n" p1nf $va1ab1e2 . "\n" 1 2 Ormernm, uro oneparop paoraer raxxe n c rexcrontmn crpoxamn, xpanxmnmncx n cxa- nxpntx nepemenntx (onaxo rontxo xora cxanxpnax nepemennax ne ncnontsyercx n un- cnonom xonrexcre). Hanpnmep, nporpamma $va1ab1e = p1nf ++$va1ab1e . "\n" $va1ab1e = bbb p1nf ++$va1ab1e . "\n" $va1ab1e = p1nf ++$va1ab1e . "\n" ntnonr pesyntrar: AA8 bbc aaaa Boseepeuue e cfeneuu Oneparop nosneennx n crenent ntrnxnr xax . 3ro nnapnt oneparop, xoropt nos- nonr nepnt aprymenr n crenent, yxasannym nroptm aprymenrom. Hanpnmep: p1nf 2 "" 10 1024 Yuapuue onepafopu n Perl ecrt uertpe ynapntx oneparopa: ! nornuecxoe orpnnanne (nornuecxax onepannx not). - apn]mernuecxoe orpnnanne (ynapnt mnnyc). + nycrax apn]mernuecxax onepannx (ynapnt nnmc). nonrnoe orpnnanne (nonrnoe ononnenne o ennnnt). \ cosanne cctnxn (ntuncnenne apeca oexra). Hanpnmep, nornuecxoe orpnnanne uncna nont ecrt ennnna: p1nf !0 1 Honrnoe xe orpnnanne nnneprnpyer nce nrt n uncne. B uacrnocrn, onepannx 0 nosno- Crp.78 nnr onpeennrt maxcnmantnoe, npecrannmoe n xonxperno cncreme essnaxonoe nenoe (ona ycranonnr nce nonunte paspxt cnona, ntenennoro nx uncna, n ennnnt): p1nf 0 1294967295 Orcma cneyer, uro cnono na anno mamnne nmeer 32 paspxa, rax xax 1294967295 = 2""32 1294967295 = 2""32 1294967295 = 2""32 1294967295 = 2""32 - -- - 1 11 1 Onepafop censueauun Oneparop cnxstnannx cnxstnaer cxanxpnym nepemennym n onepannm noncxa/sament no manony (onee nopono +rn onepannn paccmarpnnamrcx n rnane ). Crpoxonte one- paropt s/.../.../, m/.../, tr/.../ no ymonuannm paoramr c nepemenno $_. Oneparop cnxstna- nnx ncnontsyercx, urot onn paorann c xonxperno cxanxpno nepemenno. Hanpn- mep, nomecrnm crpoxy n nepemennym $line: $11ne = ".he11o!" Tenept ntnonnnm noncx no manony: $11ne = ".he11o!" 1f {$11ne = m/-\./} { p1nf "5hou1df sfaf a senfence W1fh a pe1od!" } 5hou1df sfaf a senfence W1fh a pe1od! Oneparop ! paoraer rouno rax xe, sa rem ncxnmuennem, uro on ntnonnxer nornuecxoe orpnnanne na pesyntrarom, nosnpamaemtm oneparopom (xax n pyrne ]ynxnnn, one- pannn noncxa n sament nosnpamamr nexoropoe snauenne n xauecrne pesyntrara cnoe pa- ort onee nopono o +rom paccxastnaercx n rnane ). Yruoeuue u peneuue Oneparop ymnoxennx nepemnoxaer na uncna: p1nf 2 " 4
Oneparop enennx / ennr ono uncno na pyroe: p1nf 16 / 3 5.33333333333333 Oneparop ntuncnxer ocrarox or nenouncnennoro enennx nyx snauenn: p1nf 16 x 3 1 Oneparop nonropennx x ynnpyer ecrnne saannoe xonnuecrno pas. B cxanxpnom xon- rexcre on nosnpamaer crpoxy, nonyuennym ns snauennx, croxmero cnena or oneparopa, ny- rem nonropennx +roro snauennx (xonxarenannn c coo) crontxo pas, cxontxo saano unc- nom cnpana or oneparopa. Hanpnmep, nor xax naneuarart crpoxy ns 30 e]ncon: p1nf - x 30 ------------------------------ Ecnn nent onepan xnnxercx cnncxom, saxnmuenntm n xpyrnte cxoxn, ro oneparop no- nropennx npoynnpyer cnncox neoxonmoe uncno pas. Bor xax, nanpnmep, cosart cnn- Crp.79 cox ns noctmnecxrn ennnn n npncnonrt ero maccnny: 0ones = {1} x 0 Cneymmn neouennnt npnmep samenxer nce ennnnt na nxrepxn: 0ones = {5} x 0ones (nocxontxy npant onepan oneparopa nonropennx onxen trt uncnom, ro maccnn ones nnrepnpernpyercx n cxanxpnom xonrexcre, ro ecrt xax nenoe uncno, pannoe rexy- memy xonnuecrny +nemenron maccnna). Cnoeuue, euufauue u koukafeuauun Oneparop cnoxennx (+) cxnatnaer na uncna: p1nf 2+2 4 Oneparop ntunrannx (-) ntunraer ono uncno ns pyroro: p1nf 4-2 2 Oneparop xonxarenannn (.) oennxer ne crpoxn: p1nf "he11o " . "fhee." he11o fhee. Bce +rn oneparopt xnnxmrcx nnapntmn (n uacrnocrn, ne nao nyrart nnapnte onepa- ropt cnoxennx n ntunrannx c ynapntm nnmcom n ynapntm mnnycom). Onepafop cpeura Oneparop cnnra nneno << nosnpamaer snauenne nenoro aprymenra, cnnnyroro nneno na uncno nron, onpeenennoe npantm aprymenrom: p1nf 2 << 10 204 Oneparop cnnra nnpano >> nosnpamaer snauenne nenoro aprymenra, cnnnyroro nnpano na uncno nron, onpeenennoe npantm aprymenrom. Hanpnmep: p1nf 204 >> 3 256 Hreuoeauuue yuapuue onepafopu Perl paccmarpnnaer ]ynxnnn c onnm cxanxpntm aprymenrom (ne cnncxom), xax nmenonan- nte ynapnte oneparopt, ecnn aprymenr ne saxnmuen n xpyrnte cxoxn. (Taxnmn ]ynxnnxmn xnnxmrcx, x npnmepy, sqrt, defined, eval, return, chdir, rmdir, oct, hex, undef, exists n mno- rne pyrne.) Bor, nanpnmep, xax ncnontsyercx n xauecrne oneparopa ]ynxnnx sqrt: p1nf sqf 4 2 Onepafopu npoeepku qanoe Crp.80 Perl noepxnnaer maccy oneparopon nx nponepxn cocroxnnx ]anon, uro nosnonxer nonnocrtm xonrponnponart ]ant n nx ecxpnnropt (cm. rnany 12 ornocnrentno paort c ]anamn n Perl). Bor xax sannctnamrcx +rn oneparopt ( samenxer nmo oneparop): - ecxpun1op-auna - aupaeuue - Bmecro nao nocrannrt onn ns oneparopon, npnneenntx n ran. .2 1 . Bosmoxno, xa- xax-ro nn]opmannx ns +ro rannnt oxaxercx nx nac nesnaxomo, ecnn rontxo nt ne pa- oraere c onepannonno cncremo Unix. Tax, apennarypt UID n GID osnauamr coor- nercrnenno nenrn]nxarop nontsonarenx (user ID) n rpynnt (group ID). Ecnn onymen ap- rymenr, ncnontsyercx nepemennax $_ (sa ncxnmuennem oneparopa -t, xoropt no ymonua- nnm paoraer c nxontm noroxom anntx STDIN). Bor necxontxo npnmepon nponepxn ]anonoro ecxpnnropa STDIN (no ymonuannm coor- nercrnyer nxonomy noroxy anntx): p1nf -e 51DlN # Cy|ec1aye1 nu 51DlN 1 p1nf -f 51DlN # hpucoeuueu nu ou x 1epuuuany 7 p1nf - 51DlN # uee1 nu ou uyneaou paauep 1 (Oparnre nnnmanne, uro nornuecxoe snauenne ncrnna (true) nosnpamaercx +rnmn onepa- ropamn, xax uncno onn.) 1abnua 4.2. 1abnua 4.2. 1abnua 4.2. 1abnua 4.2. Onepa1opu 1ec1upoaauun aunoa Onepa1op Onepa1op Onepa1op Onepa1op hpoaepneuan uuopuaun hpoaepneuan uuopuaun hpoaepneuan uuopuaun hpoaepneuan uuopuaun - 8peun, npoeee c uoueu1a nocneuero obpa|euun x auny -b nouuuu aun -8 aouuuuu aun -c Cuuaonuuuu aun -C 8peun, npoeee c uoueu1a nocneuero uaueueuun uuexcuoro ecxpun1opa -d a1anor -e aun cy|ec1aye1 -f Obuuuuu aun -g xc1auoaneu a1puby1 5L1GlD -k xc1auoaneu a1puby1 5f1cky b1f 2
-l aun nanne1cn cuuaonuuecxou ccunxou - 8peun cy|ec1aoaauun auna a unx ua uoueu1 aanycxa ceuapun -o aun npuuaneu1 1exy|euy nonuaoaa1enk {effecf1ve ulD} -O aun npuuaneu1 peanuuouy nonuaoaa1enk {ea1 ulD} -p aun nanne1cn uueuoaauuuu xauanou {IlIO} - aun oc1yneu nn u1euun 1exy|euy nonuaoaa1enk {effecf1ve ulD} unu rpynne {effecf1ve GlD} -k aun oc1yneu ua u1euue peanuuouy nonuaoaa1enk {ea1 ulD} unu rpynne {ea1 GlD} -s aauep auna {ou e - npoaepxa auna ua uyneaou paauep} -5 aun nanne1cn coxe1ou {ce1eauu coeuueuueu} -f aun o1xpu1 ua 1exy|eu 1epuuuane -1 1exc1oauu aun
1 B oxymenrannn, conponoxamme Perl (]an perlIunc), moxno narn n pyrne oneparopt, ne nxnmuennte n ran. .2. Ho ontme uacrn nx paora cnntno sanncnr or cncremt (n uacrnocrn, n Windows mnorne npocro ecnonesnt, a mnorne paoramr nenpannntno nx FAT1 n FAT32). Hpu+e:. peo. 2 Hnnxn nr ycranannnnaercx nx xaranora n sanpemaer nontsonarenm, nmemmemy npano na sannct n +ror xara- nor, yanxrt ]ant, nnaentnem xoroptx on ne xnnxercx. nx nontsonarene cncremt Unix +ro nonxrne snaxomo n es nepenoa, a n onepannonno cncreme Windows nnuero noonoro npocro ner. Hpu+e:. peo.
Crp.81 -u nn auna yc1auoaneu a1puby1 5L1ulD -W aun oc1yneu nn aanucu 1exy|euy nonuaoaa1enk {effecf1ve ulD} unu rpynne {effecf1ve GlD} -W aun oc1yneu nn u1euun peanuuouy nonuaoaa1enk {ea1 ulD} unu rpynne {ea1 GlD} -x aun oc1yneu nn aunonueuun 1exy|euy nonuaoaa1enk {effecf1ve ulD} unu rpynne {effecf1ve GlD} - aun oc1yneu nn aunonueuun peanuuouy nonuaoaa1enk {ea1 ulD} unu rpynne {ea1 GlD} - aun uuee1 uyneaou paauep Onepafopu cpaeueuun Oneparopt cpannennx +ro nnapnte oneparopt, xoropte cpannnnamr annte, nos- npamax ennnny n xauecrne snauennx ucmuua (true) n nycrym crpoxy n xauecrne snauennx .ori (false). Onn nepeuncnent n ran. .3. Oparnre nnnmanne, uro onn oneparopt nc- nontsymrcx nx cpannennx uncen, a pyrne nx cpannennx crpox. Hocuasua. Oopamume euu+auue, :mo onepamop oo.iue u.u paeuo ooosua:eu rar ~, :mooi ue cnv- mami eeo c onepamopo+ > cuuouu+o+ sanmo (pasoe.ume. o.e+eumoe cnucra). B cneymmem npnmepe nponepxmrcx uncna, nnonmte nontsonarenem, n, ecnn nneennoe uncno oxastnaercx ontme cra, ntaercx coomenne o omnxe: Wh11e {<>} { 1f {$ > 100} { p1nf "1oo b1g!\n" } } Bt moxere ncnontsonart nornuecxne oneparopt n [[ nnn nx coponue and n or (or- nnuammnxcx mentmnm npnopnrerom) nx oennennx orentntx nornuecxnx yrnepxe- nn. B cneymmem npnmepe saaercx rpeonanne roro, urot nneennax nontsonarenem yxna tna mexy k n m: p1nf "P1ease enfe 1effes fom k fo m\n" Wh11e {<>} { chop 1f {$ 1f k o $ gf m} { p1nf "P1ease enfe 1effes fom k fo m\n" } e1se { p1nf "1hank you - 1efs have anofhe!\n" } }
1abnua 4.3. 1abnua 4.3. 1abnua 4.3. 1abnua 4.3. Onepa1opu cpaaueuun Onepa1op Onepa1op Onepa1op Onepa1op 1un auuux 1un auuux 1un auuux 1un auuux 8oaapa|aeuoe auaueuue 8oaapa|aeuoe auaueuue 8oaapa|aeuoe auaueuue 8oaapa|aeuoe auaueuue < ucno c1uua, ecnu neauu onepau ueuue npaaoro > ucno c1uua, ecnu neauu onepau bonue npaaoro <= ucno c1uua, ecnu neauu onepau ueuue unu paaeu npaaouy >= ucno c1uua, ecnu neauu onepau bonue unu paaeu npaaouy 1f C1poxa c1uua, ecnu neauu onepau ueuue npaaoro gf C1poxa c1uua, ecnu neauu onepau bonue npaaoro 1e C1poxa c1uua, ecnu neauu onepau ueuue unu paaeu npaaouy ge C1poxa c1uua, ecnu neauu onepau bonue unu paaeu npaaouy Onepafopu paeeucfea Kpome paccmorpenntx n npetymem pasene oneparopon cpannennx Perl noepxnnaer one- paropt nponepxn na panencrno, npnneennte n ran. .. (Hocxontxy onn nmemr mentmn Crp.82 npnopnrer, uem oneparopt cpannennx, nx nnx orneen ocot pasen.) Kax n n cnyuae onepa- ropon cpannennx, cymecrnymr orentnte oneparopt nx uncnontx anntx n rexcrontx crpox. B cneymmem npnmepe nontsonarent onxen nnecrn yxny y (nrpex). 3anpoc nonropxercx o ecxoneunocrn c ntnoom coomennx o omnxe, noxa nontsonarent ne ntnonnnr rpeyemoe ecrnne: p1nf "P1ease fype fhe 1effe y\n" Wh11e {<>} { chop 1f {$ ne y} { p1nf "P1ease fype fhe 1effe y\n" } e1se { p1nf "Do you a1Ways do Whaf youe fo1d\n" ex1f } } B pesyntrare paort +ro nporpammt na ntxoe moxer nonyunrtcx cneymmn rexcr: P1ease fype fhe 1effe y a P1ease fype fhe 1effe y b P1ease fype fhe 1effe y c P1ease fype fhe 1effe y y Do you a1Ways do Whaf youe fo1d
1abnua 4.4. 1abnua 4.4. 1abnua 4.4. 1abnua 4.4. Onepa1opu cpaaueuun Onepa1op Onepa1op Onepa1op Onepa1op 1un au 1un au 1un au 1un auuux uux uux uux 8oaapa|aeuoe auau 8oaapa|aeuoe auau 8oaapa|aeuoe auau 8oaapa|aeuoe auaue ee euue uue uue uue == ucno c1uua, ecnu neauu onepau paaeu npaaouy != ucno c1uua, ecnu neauu onepau ue paaeu npaaouy <=> ucno -1,0 unu 1 a aaaucuuoc1u o1 1oro, nanne1cn nu neauu onepau ueuue npa- aoro, paauuu npaaouy unu bonue npaaoro eq C1poxa c1uua, ecnu neauu onepau paaeu npaaouy ne C1poxa c1uua, ecnu neauu onepau ue paaeu npaaouy cmp C1poxa -1,0 unu 1 a aaaucuuoc1u o1 1oro, nanne1cn nu neauu onepau ueuue npa- aoro, paauuu npaaouy unu bonue npaaoro Roufuoe H Oneparop nonrnoro nornuecxoro H () nosnpamaer pesyntrar nornuecxoro ymnoxennx and na nramn onepanon, ntponnenntx pyr ornocnrentno pyra. (Tannna nornuecxo- ro ymnoxennx nron npnneena n ran. .5.) Hanpnmep, ntnonnenne +ro onepannn na uncnamn 5 (nrt 0 n 2 pannt ennnne) n (rontxo nr 2 panen ennnne) aer pesyntrar : p1nf 5 4 4
1 Boome ronopx, naexnocrt oecneunnaercx xomnnnxropom, a ne ycnonnxmn copxn. Ecnn nt cunraere cex npo- ]eccnonanom, ro pyunax copxa Perl moxer trt nx nac onee npenournrentntm napnanrom, npn +rom, xpome ncero npouero, moxno saecrnonart ononnnrentnte nosmoxnocrn. Hpu+e:. peo.
Crp.172 $P - noppepka ofnapku Cnnonnm: PERLDB Hepemennax $P coepxnr ]narn, onnctnammne nnyrpennmm xon]nrypannm pexnma ornaxn. Bor onncanne snauenn nexoroptx nron: Bit 0 ornaxa nxoa/ntxoa ns nonporpammt; Bit 1 paspemaer nomaronym ornaxy (crpouxa sa crpouxo); Bit 2 orxnmuaer onrnmnsannm nx ornaxn; Bit 3 coxpanxer annte nx nnrepaxrnnno nponepxn nepemenntx; Bit 4 coxpanxer nomep crpoxn, n xoropo onpeenxercx nonporpamma; Bit 5 naunnaer ornaxy c nxnmuenntm pexnmom nomaronoro ntnonnennx. $R - pesynufaf euucneuun yfeeppeuun e fene uanoua Cnnonnm: ner. Hepemennax $ coepxnr pesyntrar ycnemnoro conocrannennx rexcra n manona nx nocnenero ntuncnennoro yrnepxennx (assertion) manona xomant noncxa nnn sament rexcra (cm. pasent Mnnmte cnmnont n perynxpntx ntpaxennxx n ononnnrentnte xoncrpyxnnn n perynxpntx ntpaxennxx n rnane ). B cneymmem npnmepe yrnepxenne (...]) n rene manona ncnontsyercx nx ntnonnennx nexoroporo xoa Perl n cepenne pe- rynxpnoro ntpaxennx c nocneymmnm ntnoom pesyntrara, nosnpamaemoro +rnm xoom n sanecennoro n nepemennym $: $fexf = "fexf" $fexf = /x{{$va1ab1e1 = 5}}/ p1nf p1nf p1nf p1nf $ $ $ $k kk k 5 $S cocfonuue uufepnpefafopa Cnnonnm: ner. Hepemennax $S coepxnr rexymee cocroxnne nnrepnperaropa. Ecnn ona panna ucmuue, ro nnrepnperarop ntnonnxer xo nnyrpn xomant eval, n npornnnom cnyuae nepemennax coepxnr .ori. $T - epern sanycka cueuapun ua eunonueuue Cnnonnm: BASETIME Hepemennax $T coepxnr npemx, xora cnenapn tn sanymen na ntnonnenne. Bpemx nsmepxercx n cexynax, npomemnx c 1 xnnapx 1970 roa (cranaprnoe npemx cncremt Unix). Hpnmep: p1nf $1 90917645 $W - peur eueopa npepynpepakux cooeuu Crp.173 Cnnonnm: WARNING Hepemennax $ coepxnr rexymee cocroxnne nepexnmuarenx, ynpannxmmero ntnoom npeynpexammnx coomenn (cm. onncanne xnmua -w n rnane 1). Ecnn npn crapre saan xnmu -w, ona coepxnr snauenne ucmuua. p1nf $W # aanycxa1u xax xpe15 -W Wan.p1 1 $X - urn nporparru-uufepnpefafopa Cnnonnm: EXECUTABLENAME Hepemennax $X coepxnr nonnt nyrt x nnrepnperaropy Perl, ntnonnxmmemy rexymn cnenapn: p1nf $ /us/b1n/pe15 $_ - apryreuf no yronauuk Cnnonnm: arg Hepemennax $_ ncnontsyercx mnornmn oneparopamn n ]ynxnnxmn Perl n xauecrne napamerpa, ecnn onn ntsnant es yxasannx aprymenra. Hanpnmep, nx oneparopa Hnxna while n onepa- ropa neuarn print $_ ncnontsyercx n xauecrne napamerpa no ymonuannm, no+romy xo Perl Wh11e {$ = <>} { p1nf $ } enaer ro xe camoe, uro n xo Wh11e {<>} { p1nf } pyrne xomant n ]ynxnnn, xax yxe yxastnanoct n +ro xnnre, raxxe ncnontsymr nepe- mennym $_ (nanpnmep, oneparopt m/.../ n s/.../.../, ]ynxnnn chop n chomp), ecnn nontso- narent ne saan pyroro aprymenra. $ - cfpoka, cnepykan nepep coenapeuuer Cnnonnm: PREMATCH Hepemennax $ coepxnr uacrt saannoro nontsonarenem rexcra, xoropt cneyer nepe ]parmenrom, conocrannenntm manony n nponecce nocnene onepannn noncxa nnn sament. Hpnmep: $fexf = "ea1ynoW1afe" $fexf = /noW/ p pp p1nf "Pemafch: 1nf "Pemafch: 1nf "Pemafch: 1nf "Pemafch: \ \\ \"$ "$ "$ "$\ \\ \" " . " " . " " . " " . "Mafch: "Mafch: "Mafch: "Mafch: \ \\ \"$ "$ "$ "$\ \\ \" " . " " . " " . " " . "Posfmafch: "Posfmafch: "Posfmafch: "Posfmafch: \ \\ \"$` "$` "$` "$`\ \\ \" "" "\ \\ \n" n" n" n" Pemafch: "ea1y" Mafch: "noW" Posfmafch: "1afe" 3ra nepemennax npenasnauena rontxo nx urennx. $ -- ynpaeneuue yqepor eueopa Cnnonnm: OUTPUTAUTOFLUSH Crp.174 Ecnn nepemennax $[ ycranonnena n snauenne ucmuua, Perl nemenenno ntnonr annte n re- xymn norox ntnoa, ne ncnontsyx npomexyrount y]ep-naxonnrent. B momenr, xora $[ ycranannnnaercx n snauenne ucmuua, Perl ntnonr n norox ntnoa rexymee coepxanne y- ]epa n yer enart ro xe camoe nx xaxo nocneymme xomant write nnn print. Otuno +ra nepemennax ncnontsyercx npn paore c xanaramn, urot ne saepxnnart ne- pectnxy anntx. B cneymmem npnmepe nepemennax $[ cnxstnaercx c xonxperntm xana- nom, a ee snauenne ycranannnnaercx n ucmuuv c nomomtm meroa ns ran. 9.2: p1pe {kLADLk, Wkl1Lk} aufof1ush aufof1ush aufof1ush aufof1ush Wkl1Lk Wkl1Lk Wkl1Lk Wkl1Lk 1 1 1 1 To xe camoe moxno cenart c nomomtm xomant p1pe {kLADLk, Wkl1Lk} Wkl1Lk Wkl1Lk Wkl1Lk Wkl1Lk- -- -> >> >aufof1ush aufof1ush aufof1ush aufof1ush{1} {1} {1} {1} $ - urn fekyero qoprafa ofefoe Cnnonnm: FORMATNAME Hepemennax $ coepxnr nmx rexymero ]opmara, ncnontsyemoro nx renepannn oruera nx rexymero noroxa ntnoa. $ - qparreuf coenapeuun Cnnonnm: LASTPARENMATCH Hepemennax $+ coepxnr ]parmenr rexcra, conocrannennoro manony n nponecce no- cnene onepannn noncxa nnn sament. On coornercrnyer nocnene opaoranno nape xpyrntx cxoox nnyrpn rena manona. Hpnmep: $fexf = "here 1s fhe fexf." $fexf = 1s fhe {\W+}/ p1nf p1nf p1nf p1nf $+ $+ $+ $+ fexf 3ra nepemennax npenasnauena rontxo nx urennx. $ - peanuuu upeufuqukafop nonusoeafenn (Real User D) Cnnonnmt: REALUSERID, UID Hepemennax $< coepxnr peantnt nenrn]nxarop nontsonarenx nx rexymero nponecca. 3ra nn]opmannx otuno nmeer cmtcn rontxo nx onepannonno cncremt Unix. Hpnmep: p1nf $< 166 $ - fekyu pasrep cfpauuuu Cnnonnm: FORMATLINESPERPAGE Hepemennax $ coepxnr pasmep crpannnt n crpoxax rexcra (no ymonuannm 0) nx re- xymero noxa ntnoa. Hpnmep: Crp.175 p1nf $= 60 $ - fekyu upeufuqukafop nonusoeafenn (Eectie User D) Cnnonnmt: EFFECTIEUSERID, EUID Hepemennax $> coepxnr rexymn nenrn]nxarop nontsonarenx nx rexymero nponecca. 3ra nn]opmannx otuno nmeer cmtcn rontxo nx onepannonno cncremt Unix. Hpnmep: p1nf $> 166 $0 - urn nporparru Cnnonnm: PROGRAMNAME Hepemennax $0 coepxnr nmx cnenapnx, sanymennoro na ntnonnenne. Hpnmep: p1nf $0 sc1pf.p1 $RGV - urn exopuoro qana Cnnonnm: ner. Hepemennax $AGV coepxnr nmx ]ana, ncnontsyemoro nx nnoa uepes STDOUT c nomomtm xomant <>. Hanpnmep, ecnn cnenapn sanymen c nomomtm xomant xpe1 ead.p1 f11e.fxf ro nepemennax $AGV coepxnr nmx, nepeannoe cnenapnm n xomanno crpoxe: $fexf = <> p1nf $AkGv f11e.fxf $nn - nn- qparreuf coenapeuun Cnnonnm: ner. Hymeponannte nepemennte nna $nn nocne ouepeno ycnemno onepannn noncxa nnn same- nt coepxar conocrannennte manony ]parmenrt rexcra. Hocnenne coornercrnymr rpynnam xpyrntx cxoox, yxasanntx nnyrpn rena manona n nponymeponanntx no nopxxy cneonannx c yuerom nnoxennocrn (onee nopono o +rom paccxasano n rnane ). B cneymmem npnmepe nymeponannte nepemennte ncnontsymrcx nx nsmenennx nopxxa cnon n crpoxe: $fexf = "yes o no" $fexf = s/{\W+} {\W+} {\W+}/$3 $2 $1/ p1nf $fe p1nf $fe p1nf $fe p1nf $fexf xf xf xf no o yes ENV - nepereuuue okpyeuun Crp.176 Cnnonnm: ner. Hepemennax ENV npecrannxer coo x+m n coepxnr snauennx nepemenntx cpet, saanntx na momenr sanycxa cnenapnx. Knmuamn otuno cnyxar nmena nepemenntx cpe- t (no, noome ronopx, cocran xnmue sanncnr or onepannonno cncremt). Hanpnmep, nx onepannonno cncremt Unix moxno oxnart cneymmnx snauenn: Wh11e {$key, $va1ue} = each{xLNv} { p1nf "$key => $va1ue\n"} 5hLLL => /b1n/csh hOML => /home/usename ... NC - nopknkaerue qanu Cnnonnm: ner. Hepemennax IN npecrannxer coo x+m, n xoropom nx xaxoro ]ana, no- xnmuennoro c nomomtm xoman do nnn require, nmeercx sannct. Knmuom xnnxercx nmx ]ana, a snauennem nyrt x nemy. (3ror x+m ncnontsyercx n camnm Perl nx nponepxn, ne noxnmuen nn yxe coornercrnymmn ]an.) SG - opaofuku cufyauu Cnnonnm: ner. Hepemennax SIG npecrannxer coo x+m, n xoropom xpanxrcx opaorunxn pasnnuntx cnryann, nosnnxammnx n Perl. Hanpnmep, rax moxno orxnmunrt ntno npeynpexammnx coomenn: 1oca1 $5lG{WAkN} = sub {} _ - apryreufu, nepepauuue nopnporparre Cnnonnm: ner. uopmantnte napamerpt nonporpamm opaartnamrcx c nomomtm maccnna , n xoropt n momenr ntsona nonporpammt sanocnrcx cnncox aprymenron, nepeanntx nontsonarenem. B saauy nonporpammt nxonr nsnneut napamerpt ns +roro maccnna, uro n noxasano n cne- ymmem npnmepe: sub addem { $va1ue1 = sh1ff $va1ue1 = sh1ff $va1ue1 = sh1ff $va1ue1 = sh1ff 0 0 0 0 $va1ue2 $va1ue2 $va1ue2 $va1ue2 = = = = sh1ff sh1ff sh1ff sh1ff 0 0 0 0 p1nf "$va1ue1 + $va1ue2 = " . {$va1ue1+$va1ue2} . "\n" } addem {2, 2} 2 + 2 = 4 RGV - apryreufu, nepepauuue e koraupuo cfpoke Cnnonnm: ner. Crp.177 Maccnn AGV coepxnr cnncox aprymenron, nepeanntx cnenapnm n momenr ero sa- nycxa. onycrnm, cnenapn sanymen na ntnonnenne xomano xpe1 sc1pf.p1 a b c d Ecnn ntnecrn +nemenrt maccnna AGV, nor uro mt ynnnm: p1nf o1n{", ", 0AkGv} a, b, c, d Hocuasua. Oopamume euu+auue, :mo nepei apev+eum uaxooumc e o.e+eume +accue $ARCJ[j. Ho- omo+v $#ARCJ omo ro.u:ecmeo apev+eumoe oes eouuui. NC - nyfu noucka nopknkaerux qanoe Cnnonnm: ner. Maccnn IN coepxnr cnncox xaranoron, n xoroptx Perl nmer ]ant, noxnmuaemte xomanamn do, require n use. Hpnmep: p1nf o1n{",\n", 0lNC} /us/1oca1/11b/pe15/sun/5.00502, /us/1oca1/11b/pe15/, /us/1oca1/11b/pe15/s1fepe1/sun, /us/1oca1/11b/pe15/s1fepe1, Crp.178 Fnana 10 Bc1poeuume qyukuuu: opao1ka pauumx
Kopo1ko Perl coepxnr mnoxecrno ncrpoenntx ]ynxnn. Hexoropte yxe ocyxannct n +ro xnn- re, nanpnmep ]ynxnnx push, oannxmmax x maccnny annte: push {0aay, "one"} push {0aay, "one"} push {0aay, "one"} push {0aay, "one"} push {0aay, "fWo"} push {0aay, "fWo"} push {0aay, "fWo"} push {0aay, "fWo"} push {0aay, "fhee"} push {0aay, "fhee"} push {0aay, "fhee"} push {0aay, "fhee"} p1nf 0$aay|1] one B +ro rnane paccmarpnnamrcx ncrpoennte ]ynxnnn Perl, npenasnauennte nx paort c anntmn n nx opaorxn (cma nxoxr ]ynxnnn nx paort co crpoxamn, coprnponxn anntx, maremarnuecxne ]ynxnnn, ]ynxnnn nx paort c maccnnamn n x+mamn n mnoroe pyroe). Bcrpoennte ]ynxnnn, ncnontsyemte nx onepann nnoa/ntnoa n nsanmoe- crnnx mexy nponeccamn, yyr paccmorpent n rnane 11. Bcrpoenntm ]ynxnnxm, npe- nasnauenntm nx paort c ]anamn, nocnxmena rnana 12. Haxonen, moynn n ]ynxnnn, nxoxmne n cranaprnym nnnorexy moyne, paccmarpnnamrcx n rnane 13. Hocuasua. Ec.u ei euu+ame.iuo noc+ompume a.qaeumui cnucor qvuru e oorv+eumauu, npu.a- eamuec r Perl, mo c+oreme oouapvrumi ueromopie no.esuie qvuruu, ue onucauuie e omo e.aee. uynxnnn, paccmarpnnaemte n +ro rnane (sa ncxnmuennem ]ynxnn POSIX -Portable Op- erating System InterIace), xnnxmrcx ncrpoenntmn n Perl, rax uro c nnmn moxno paorart es ononnnrentntx nnnorex n ]anon. Hocxontxy no xoy nsnoxennx ontmnncrno npnneenntx sect ]ynxnn yxe neonoxparno ncnontsonanoct, ononnnrentnoro nne- ennx ne rpeyercx. Hrax, mt nemenenno nepexonm x eranxm.
Henocpepc1neuume pemeuun abs - aconkfuoe suaeuue uynxnnx abs nosnpamaer aconmrnoe snauenne aprymenra. Ecnn ne yxasan aprymenr sua- :euue, ncnontsyercx nepemennax $_: abs auaueuue abs Hpnmep: p1nf abs -5 5 Crp.179 atan2 - apkfaureuc uynxnnx atan2 nosnpamaer apxranrenc uacrnoro /X. Bosnpamaemoe snauenne nexnr n nanasone or - o +: afan2 , B Perl ner ncrpoenno ]ynxnnn, ntuncnxmme ranrenc (xorx raxax ]ynxnnx nxnmuena n naxer POSIX +ro PSI::tan, cm. anee pasen uynxnnn POSIX). Hocuasua. Bi eceeoa +oreme pasoe.umi cuuvc ua rocuuvc, :mooi no.v:umi maueeuc. chop - ypaneuue kouua cfpoku uynxnnx chomp yanxer cnmnont nono crpoxn (otuno \n), pacnonoxennte n xonne rexcrono crpoxn. Ona paoraer co crpoxamn nnn cnncxamn. Ecnn ne yxasan aprymenr, nc- nontsyercx nepemennax $_: chomp nepeueuuan chomp cnucox-nepeueuuux chomp B xauecrne aprymenron ]ynxnnn onxnt ncnontsonartcx nente snauennx, ro ecrt cnnrax- cnuecxne xoncrpyxnnn, onycrnmte cnena or oneparopa npncnannannx. uynxnnx nosnpamaer uncno yanenntx cnmnonon. Ecnn yxasan cnncox nepemenntx, ro xonen crpoxn yanxercx y xaxo ns nnx, no nosnpamaemoe ]ynxnne snauenne coornercrnyer rontxo nocnene. Otuno chomp ncnontsyercx nx yanennx cnmnona xonna crpoxn y nneennoro rexcra: Wh11e {<>} { chomp chomp chomp chomp p1nf } B xauecrne cnmnona xonna crpoxn ncnontsyercx coepxnmoe cnennantno nepemenno $/. chop- ypaneuue nocnepuero cureona cfpoku ]ynxnnx chop yanxer nocnenn cnmnon crpoxn nnn cnncxa crpox. B xauecrne snauennx nosnpamaercx yanennt cnmnon. Ecnn ne yxasan aprymenr, ncnontsyercx nepemennax $_: chop nepeueuuan chop cnucox-nepeueuuux chop B xauecrne aprymenron ]ynxnnn onxnt ncnontsonartcx nente snauennx, ro ecrt cnn- raxcnuecxne xoncrpyxnnn, onycrnmte cnena or oneparopa npncnannannx. Ecnn yxasan cnncox nepemenntx, ro nocnenn cnmnon yanxercx y xaxo nepemenno, no nosnpa- maemoe ]ynxnne snauenne coornercrnyer rontxo nocnene. Hpnmep: Wh11e {<>} { chop chop chop chop p1nf } Kax npannno, n noontx cnryannxx pexomenyercx ncnontsonart ]ynxnnm chomp, a ne chop, rax xax ona esonacnee: yanxercx nmenno cnmnon xonna crpoxn, a ne nmo no- cnenn cnmnon. Crp.180 chr - npeopasoeauue ucna e cureon uynxnnx chr nosnpamaer cnmnon, xo ASCII xoroporo saan n xauecrne aprymenra ]ynx- nnn. Ecnn ne yxasan aprymenr, ncnontsyercx nepemennax $_: ch uucno ch Hpnmep: p1nf ch 65
cos - kocuuyc uynxnnx cos ntuncnxer xocnnyc aprymenra, saannoro n pananax. Ecnn ne yxasan apry- menr, ncnontsyercx nepemennax $_: cos aupaeuue cos urot ntuncnnrt apxxocnnyc, moxno nocnontsonartcx ]ynxnne PSI::acos ns naxera POSIX (cm. anee pasen uynxnnn POSIX). each - napa knk/suaeuue us xsua uynxnnx each nocneonarentno nepenpaer sanncn n x+me. B xonrexcre cnncxa ]ynxnnx nosnpamaer napy (r.m:, sua:euue) nx ouepeno sanncn. B cxanxpnom xonrexcre ona nos- npamaer ouepenoe snauenne xnmua: each x Bor npnmep npnmenennx ]ynxnnn each: $hash{sandW1ch} = g111ed $hash{d1nk} = of bee Wh11e {{$key, $va1ue} = each{xhash}} Wh11e {{$key, $va1ue} = each{xhash}} Wh11e {{$key, $va1ue} = each{xhash}} Wh11e {{$key, $va1ue} = each{xhash}} { {{ { p1nf p1nf p1nf p1nf "$key => $va1ue "$key => $va1ue "$key => $va1ue "$key => $va1ue\ \\ \n" n" n" n" } }} } d1nk => oof bee sandW1ch => g111ed Hpn nepnom opamennn x x+my each sanomnnaer rexymn +nemenr (rounee, enaer nomerxy no nnyrpennem npecrannennn x+ma) n npn nocneymmnx opamennxx nepexonr x cneym- memy +nemenry, noxa ne oer o xonna x+ma. Ho ocrnxennn nocnene sanncn nosnpama- ercx neonpeenennoe snauenne (nnrepnpernpyemoe xax .ori), uro moxer trt ncnontsonano n ycnonntx oneparopax n oneparopax nnxna: uepeyre ntsont ]ynxnnn each npnmennrent- no x onomy nnn necxontxnm x+mam n onom nnn necxontxnx mecrax cnenapnx nocxontxy nomerxa rexyme sanncn cnxsana c x+mem, a ne c nnyrpennnm cocroxnnem ]ynxnnn nnn c rouxo xoa, n xoropo ona ntstnaercx, ntsont each yyr paorart npannntno. eal - kornunupoeauue u eunonueuue koraup Perl uynxnnx eval ncnontsyercx nx xomnnnxnnn n ntnonnennx xoman Perl n nponecce pao- Crp.181 rt cnenapnx: eva1 aupaeuue eva1 {bnox} eva1 Ecnn n xauecrne aprymenra saano ntpaxenne (xoropoe onxno nmert rnn rexcrono crpoxn), ro nocne ero ntuncnennx nponsnonrcx cnnraxcnuecxn ananns, xomnnnxnnx n ntnonnenne xoman Perl, coepxamnxcx n saanno crpoxe. B ornnune or crpoxn nox xomnnnnpyercx rontxo onn pas a nmenno, n momenr xomnnnxnnn xoa camoro cnena- pnx. Ecnn ne yxasan aprymenr, ncnontsyercx nepemennax $_. Hpnmep: eva1 {p1nf "he11o " p1nf "fhee.\n"} he11o fhee. Coomenne o omnxe, ecnn ona nosnnxaer, sannctnaercx n nepemennym $. eists -- npoeepka knka e xsue uynxnnx exists nponepxer, cymecrnyer nn n annom x+me yxasannt xnmu: ex1sfs aupaeuue Btpaxennem onxno trt nenoe snauenne, coornercrnymmee opamennm x +nemenry x+ma. Hpnmep: $hash{fu1f} = app1e $hash{sandW1ch} = hambuge $hash{d1nk} = bubb1y 1f {ex1sfs{$hash{"vegefab1e"}}} 1f {ex1sfs{$hash{"vegefab1e"}}} 1f {ex1sfs{$hash{"vegefab1e"}}} 1f {ex1sfs{$hash{"vegefab1e"}}} { p1nf "L1emenf ex1sfs." } e1se { p1nf "L1emenf does nof ex1sfs." } L1emenf does nof ex1sfs ep - euucneuue skcnoueuuuanuuo qyukuuu uynxnnx exp ntuncnxer pesyntrar nosneennx ocnonannx narypantntx norapn]mon (ro ecrt uncna e2.71212...) n saannym crenent. Ecnn ne yxasan aprymenr, ncnontsyercx nepemennax $_: exp aupaeuue exp Hpnmep: p1nf exp 1 2.7121245905 he - npeopasoeauue uecfuapuafepuuoro ucna uynxnnx hex npeopasyer crpoxy, npecrannxmmym coo mecrnanarepnunoe uncno, x nenomy uncny. Ecnn ne yxasan aprymenr, ncnontsyercx nepemennax $_: hex aupaeuue hex Crp.182 Hpnmep: p1nf hex "10" 76 inde - nonoeuue nopcfpoku uynxnnx index nosnpamaer nepnym naennym nosnnnm, na xoropo n crpoxe pacnono- xena yxasannax nocrpoxa: 1ndex c1poxa, noc1poxa, noauun 1ndex c1poxa, noc1poxa Honcx nocrpoxn naunnaercx c saanno nosnnnn. Ecnn coornercrnymmn aprymenr onymen, noncx neercx c nauana crpoxn. Ecnn nocrpoxa ne naena, ]ynxnnx index nos- npamaer snauenne -1 (nnn snauenne, na ennnny mentme asonoro nnexca maccnnon, xpa- nnmoro n nepemenno $, ecnn ono ne nont). Hpnmep: $fexf = "hee 1s fhe fexf!" p1nf 1ndex $fexf, "fexf" p1nf 1ndex $fexf, "fexf" p1nf 1ndex $fexf, "fexf" p1nf 1ndex $fexf, "fexf" 12 int - uenan acfu ucna uynxnnx int ntuncnxer nenym uacrt ntpaxennx, saannoro n xauecrne aprymenra. Ecnn ne yxasan aprymenr, ncnontsyercx nepemennax $_: 1nf aupaeuue 1nf Vceuenne o neno uacrn neercx n nanpannennn nynx. uynxnnx ne oxpyrnxer, a ycexaer snauenne o nenoro, no+romy nx oxpyrnennx nennunn nmecro int nyxno ncnontsonart ncrpoennte ]ynxnnn sprintf n printf nnn ]ynxnnn PSI::floor n PSI::ceil ns naxera POSIX. Hpnmep: p1nf 1nf 1.99999 1 oin - npeopasoeauue cnucka e cfpoky uynxnnx oin npeopasyer cnncox n rexcronym crpoxy, ncrannxx mexy +nemenramn cnn- cxa saannt n nepnom aprymenre pasennrent: o1n aupaeuue, cnucox uynxnnx nosnpamaer n xauecrne pesyntrara crpoxy. Btpaxenne onxno trt rexcrono crpoxo nnn npeopasontnartcx n nee. Ha cam cnncox paora ]ynxnnn ne nnnxer. Hpnmep: 0aay = {1, 2, 3, 4, 5, 6, 7, , 9, 10} p1nf p1nf p1nf p1nf o1n o1n o1n o1n {"/", 0 {"/", 0 {"/", 0 {"/", 0aay aay aay aay} } } } 1/2/3/4/5/6/7//9/10 keys - cnucok knke xsua Crp.183 B cnncxonom xonrexcre ]ynxnnx keys nosnpamaer cnncox, cocroxmn ns ncex xnmue x+ma. B cxanxpnom xonrexcre ]ynxnnx nosnpamaer uncno xonnuecrno xnmue: keys x Hpnmep: $hash{sandW1ch} = sa1am1 $hash{d1nk} = of bee foeach $key {keys xhash} foeach $key {keys xhash} foeach $key {keys xhash} foeach $key {keys xhash} p1nf $hash{$key} . p1nf $hash{$key} . p1nf $hash{$key} . p1nf $hash{$key} . " "" "\ \\ \n nn n" " " " } }} } oof bee sa1am1 lc - npeopasoeauue yke k uuuery perucfpy ]ynxnnx lc nosnpamaer crpoxy, nepeannym n xauecrne napamerpa, npeopasonanno x nnxnemy perncrpy, ro ecrt samenxer n ntxono crpoxe sarnannte yxnt na crpounte. Ecnn aprymenr onymen, ncnontsyercx nepemennax $_: 1c aupaeuue 1c Hpnmep: p1nf 1c hLLLO! he11o! cirst - npeopasoeauue nepeo ykeu k uuuery perucfpy uynxnnx lcfirst nosnpamaer ncxonym crpoxy, n xoropo nepnax yxna (ecnn +ro yxna) npeopasonana x nnxnemy perncrpy (ro ecrt sarnannax yxna samenxercx na crpounym). Ecnn y ]ynxnnn ne yxasan aprymenr, ncnontsyercx nepemennax $_: 1cf1sf aupaeuue 1cf1sf Hpnmep: p1nf 1cf1sf hLLLO! hLLLO! length - pnuua cfpoku uynxnnx length nosnpamaer nnny (n arax) cnoero aprymenra. B xauecrne aprymenra onxno croxrt ntpaxenne, npeopasyemoe n xoneunom cuere x cxanxpy -rexcrono crpoxe. Ecnn ne yxasan aprymenr, ]ynxnnx nosnpamaer nnny crpoxn, coepxamecx n nepemenno $_: 1engfh aupaeuue 1engfh Hpnmep: $fexf = "hee 1s fhe fexf." p1nf p1nf p1nf p1nf 1engfh $fexf 1engfh $fexf 1engfh $fexf 1engfh $fexf 17 Crp.184 log - uafypanuuu norapuqr uynxnnx log ntuncnxer narypantnt norapn]m aprymenra, xoropt onxen trt unc- nom. Ecnn ne yxasan aprymenr, ncnontsyercx nepemennax $_: 1og aupaeuue 1og ap - eunonuufu koraupy pnn kaporo snereufa cnucka uynxnnx map ntuncnxer ntpaxenne nnn ntnonnxer nox xoman nx xaxoro +nemenra cnncxa. B xauecrne pesyntrara ona nosnpamaer cnncox nonyuenntx snauenn n cnncxonom n uncno +nemenron cnncxa n cxanxpnom xonrexcre: map {bnox}, cnucox map aupaeuue, cnucox B cneymmem npnmepe mt ncnontsyem ]ynxnnm uc nx npeopasonannx +nemenron mac- cnna x nepxnemy perncrpy: 0aay = {a, b, c, d, e, f} 0aay 0aay 0aay 0aay = = = = map{uc, 0aay} map{uc, 0aay} map{uc, 0aay} map{uc, 0aay} p1nf o1n{", ", 0aay} A, 8, C, D, L, I B momenr ntnonnennx noxa xoman nnn ntuncnennx ntpaxennx ouepeno +nemenr cnncxa sanocnrcx n cnennantnym nepemennym Perl $_. (B uacrnocrn, no+romy rax xopomo paoramr conmecrno c map ]ynxnnn, ncnontsymmne $_ xax aprymenr no ymonuannm.) Btuncnennx nponoxrcx n cnncxonom xonrexcre n pesyntrare ono snauenne ns nxo- noro cnncxa moxer oannxrt x ntxonomy cnncxy nn onoro, onn nnn necxontxo +ne- menron. Tax, xomana xhash = map {gefkey{$} => $} 0aay - +ro npocro coxpamennt (n onee tcrpt) napnanr nnxna xhash = {} foeach $ {0aay} { xhash{gefkey{$}} = $ } Hocuasua. Hocro.irv nepe+euua $ eicmvnaem e po.u cuuouu+a o.e+euma cnucra, +oruo us+eumi exoouo cnucor c no+ouim o.ora ro+auo. Oouaro, ec.u e po.u cnucra eicmvnaem ue nepe+euua-+accue, pesv.imami +oevm orasamic uenpeocrasve+i+u. oct - npeopasoeauue eocurepuuoro ucna uynxnnx oct ntnonnxer npeopasonanne rexcrono crpoxn, npecrannxmme ns cex noct- mepnunoe uncno, x nenomy uncny. Ecnn ne yxasan aprymenr, ncnontsyercx nepemennax $_: ocf aupaeuue ocf Hpnmep: p1nf ocf "10"
ord - npeopasoeauue cureona e kop Crp.185 ]ynxnnx ord npeopasyer nepnt (mo.iro nepnt!) cnmnon crpoxn, saanno n xauecrne ee aprymenra, n uncno (ro ecrt n xo cnmnona cornacno rannne ASCII). Ecnn ne yxasan aprymenr, ncnontsyercx nepemennax $_: od aupaeuue od Hpnmep: p1nf od A 65 pack - ynakoeka suaeuu uynxnnx pack nonyuaer na nxoe cnncox snauenn n ynaxontnaer nx n nnapnym crpyx- rypy (cxanxp), xoropym n nosnpamaer n xauecrne pesyntrara: pack abnou, cnucox nx pacnaxonxn ncnontsyercx ]ynxnnx unpack c ro xe crpoxo-manonom, uro yxast- nanact npn ynaxonxe. 3ect n xauecrne manona ncnontsyercx ue perynxpnoe ntpaxenne, a crpoxa (no- cneonarentnocrt yxn), xoropax saaer nopxox n rnn snauenn: sanonnenne nonuntmn nynxmn o cneymme aconmrno nosnnnn, a rexcronax crpoxa, ononnxemax nonuntmn nynxmn, A rexcronax crpoxa, ononnxemax npoenamn, b crpoxa nron, ynopxouennax no nospacrannm crapmnncrna nron (ananornuna pe- syntrary paort ]ynxnnn vec), crpoxa nron, ynopxouennax no ytnannm crapmnncrna nron, c onoaronoe nenoe (cnmnon) co snaxom, C onoaronoe nenoe (cnmnon) es snaxa, d uncno c nnanamme rouxo nono rounocrn n ecrecrnennom ]opmare, f uncno c nnanamme rouxo opnnapno rounocrn n ecrecrnennom ]opmare, h mecrnanarepnunax crpoxa, n xoropo cnepna nyr mnamne mecrnanarepnunte nn]pt, saxonponannte uernepxamn nron, H mecrnanarepnunax crpoxa, n xoropo cnepna nyr crapmne mecrnanarepnunte nn]pt, saxonponannte uernepxamn nron, i nenoe snauenne co snaxom (cocronr no xpane mepe ns 32 nr, peantnax nnna on- peenxercx xomnnnxropom C), I nenoe snauenne es snaxa (cocronr no xpane mepe ns 32 nr, peantnax nnna on- peenxercx xomnnnxropom C), l nnnnoe nenoe co snaxom (cocronr ponno ns 32 nr n moxer ornnuartcx or rnna anntx long xomnnnxropa C), nnnnoe nenoe es snaxa (cocronr ponno ns 32 nr n moxer ornnuartcx or rnna anntx long xomnnnxropa C), Crp.186 n xoporxoe nenoe, ncnontsyemoe npn cerentx omenax (crapmne nrt nyr n xonne, coepxnr ponno 1 nr), N nnnnoe nenoe, ncnontsyemoe npn cerentx onepannxx (crapmne nrt nyr n xon- ne, coepxnr ponno 32 nr), p yxasarent na crpoxy, sanepmammymcx nynt-repmnnaropom, P yxasarent na crpyxrypy (ro ecrt crpoxy ]nxcnponanno nnnt), q -nrnoe nenoe co snaxom (ocrynno rontxo ecnn cncrema noepxnnaer raxne uncna n Perl tn copan c coornercrnymmnmn xnmuamn), -nrnoe nenoe es snaxa (ocrynno rontxo ecnn cncrema noepxnnaer raxne uncna n Perl tn copan c coornercrnymmnmn xnmuamn), s xoporxoe nenoe co snaxom (n Perl cocronr ns 1 nr), S xoporxoe nenoe es snaxa (n Perl cocronr ns 1 nr), u crpoxa, saxonponannax no anropnrmy uuencode, v xoporxoe nenoe, ncnontsyemoe na xomntmrepax AX (mnamne nrt nyr n xon- ne, coepxnr ponno 1 nr), V nnnnoe nenoe, ncnontsyemoe na xomntmrepax AX (mnamne nrt nyr n xon- ne, coepxnr ponno 32 nr), w nenoe, saxonponannoe no cranapry BER (ISO Basic Encoding Rules). Fart npecrannxmr coo nn]pt uncna, sanncannoro n cncreme cuncnennx c ocnonannem 12. Konnuecrno ar mnnnmantno neoxonmoe nx npecrannennx annoro uncna. Crap- mn paspx ner nepntm. V ncex nn]p, xpome ro, xoropax nepectnaercx nocnene, - nr ycranonnen n ennnny, x nyneno ar, nxono ar onn x onomy, rexcronax crpoxa, sanepmaemax nynt-repmnnaropom n ononnxemax nonuntmn nynxmn. 3a cnmnonom (xpome cnmnonon a, A, b, , h, H, P, ) moxer cneonart uncno, noxastnammee, cxontxo pas neoxonmo nonropnrt coornercrnymmn cnenn]nxarop. nx neonpeenennoro uncna nonropenn nmecro xonxpernoro uncna moxno ncnontsonart cnmnon . Hanpnmep: p1nf pack {"ccc", , 9, 90}
p1nf pack {"c3", 65, 66, 67} A8C p1nf pack {"c"", 6, 69, 70, 71} DLIG (Fonee erantnte npnmept moryr trt naent n oxymenrannn Perl.) Vmnoxnrent, cne- ymmn sa cnmnonamn a, A, , yxastnaer na uncno ar, ornonmoe no coornercrnym- mee snauenne (ro ecrt +rn cnmnont npnnoxr x ntopxe onoro snauennx ns cnncxa, ne- cmorpx na conyrcrnymmn ymnoxnrent). Hpn pacnaxonxe A yanxer xnocronte npoent n nynente art, yanxer nce nocne nepnoro nynenoro ara, a nepectnaer annte onn x onomy. Ananornuno, cnmnont b n nopoxamr crpoxy ns yxasannoro uncna n- ron, a h n H crpoxy ns yxasannoro uncna :emeepor nron. Crp.187 Cnenn]nxaropt p n P coxpanxmrcx xax snauennx yxasarene, n nontsonarent onxen npocnenrt, urot onn ne cctnannct na npemennte nepemennte n coornercrnymmne o- nacrn namxrn ne nsmenxnnct o momenra pacnaxonxn. Kpome roro, nonropnrent, cneym- mn sa cnmnonom P, yxastnaer xonnuecrno ar, orneennoe nx crpyxrypt anntx, a ne uncno nonropenn cnmnona P n ]opmare. Ecnn snauenne, na xoropoe cctnamrcx yxasare- nn, xnnxercx neonpeenenntm (undef), nocrannxercx nycro yxasarent. Hente, ynaxonannte n ]opmarax i, I, l, , s, S ne xnnxmrcx nepenocnmtmn mexy nponecco- pamn n onepannonntmn cncremamn, nocxontxy coxpanxmr nopxox nron n aron, ecrecr- nennt nx coornercrnymmero nponeccopa (cm. raxxe anee pasen vec nexrop nentx snauenn es snaxa). Tax, nponeccopt Intel, Alpha n AX xnnxmrcx ocrpoxoneuntmn 1 , Motorola, mk/k, PPC, Spare, HP PA, Power, Cray rynoxoneuntmn, a nponeccopt MIPS paoramr xax ocrpoxoneunte na xomntmrepax ]npmt Digital n xax rynoxoneunte na xomntmrepax Silicon Graphics. nx nepenocnmoro ]opmara ynaxonxn nao ncnontsonart cnenn]nxaropt n, N (rynoxoneunt ]opmar) n v, V (ocrpoxoneunt ]opmar). Perl nc- nontsyer annte c nnanamme rouxo nono rounocrn nx nnyrpennnx ntuncnenn. Ho- +romy snauenne, cnepna ynaxonannoe, a sarem pacnaxonannoe c ]opmarom f, moxer trt ne- nenrnuntm camomy cee. Kpome roro, npn ynaxonxe Perl ncnontsyer npecrannenne uncna, ecrecrnennoe nx anno mamnnt, rax, annte, ynaxonannte na onom xomntmrepe, ne oxsarentno yyr npounrant npannntno na pyrom xomntmrepe. pop - useneeuue pauuux us raccuea uynxnnx pop nosnpamaer nocnenee snauenne n maccnne, yxopaunnax ero na onn +ne- menr. Ecnn ne yxasan aprymenr, ncnontsyercx maccnn _: pop uaccua pop Paccmorpnm npnmep (oparnre nnnmanne, uro nepnax xomana cosaer maccnn array, ecnn on eme ne cymecrnyer): push 0aay, 5 p1nf pop 0 p1nf pop 0 p1nf pop 0 p1nf pop 0a aa a ay ay ay ay 5 4yukuuu POS Haoparopnx xomntmrepntx cncrem Hannonantnoro nncrnryra cranapron n rexnonorn (the National Institute oI Standards and Technology Computer Systems Laboratory NIST/CSL) n copyxecrne c pyrnmn oprannsannxmn cosana cranapr POSIX Portable Operating System InterIace. POSIX +ro ontmax nnnorexa cranaprnsnponanntx C- noontx ]ynxnn, noxptnammnx cranaprnte norpenocrn nporpammnponannx, or a- sontx maremarnuecxnx ntuncnenn o nponnnyro paort c ]anamn.
1 Tepmnnt rynoxoneunt (big-endian) n ocrpoxoneunt (little-endian), ncnontsyemte sect, sanmcrnonant ns Hyre- mecrnn Iynnnnepa xonarana Cnn]ra n ro nx uacrn, re onnctnaercx otua nnnnnyron ecrt xypnnte xna c rynoro nnn ocrporo xonna. Tax, nenoe uncno 0x75321 (ecxrnunoe 2271501) sannctnaercx n nne naopa aron 0x12, 0x3, 0x5, 0x7 npn ocrpoxoneunom ynopxounnannn n xax 0x7, 0x5, 0x3, 0x12 npn rynoxoneunom ynopxounna- nnn. Taxax repmnnonornx (big-endian, little-endian, middle-endian) noxnnnact eme n 70-x rr., xora Perl n n nomnne ne tno, n xnnxercx nxnaom amepnxancxnx nporpammncron n mexynapont xomntmrepnt xapron. Hpu+e:. nepee. u peo.
Crp.188 Moynt Perl POSIX npeocrannxer ocryn x npaxrnuecxn ncem cranaprntm ]ynxnnxm POSIX nepcnn 1003.1 ncero oxono 250 ]ynxnn. 3rn ]ynxnnn ne xnnxmrcx ncrpoen- ntmn noono ocrantntm ]ynxnnxm +ro rnant, onaxo, nocxontxy moynt POSIX oec- neunnaer nporpammncram ontme nosmoxnocre, uem ncrpoennte ]ynxnnn Perl, onn onn- cant sect. Moynt POSIX noxnmuaercx c nomomtm xomant use: use PO5l # obaau1u ack bubnuo1exy PO5l use PO5l qW/yuxun/ # obaau1u ouy yuxuk (Bo nropom napnanre ncenoxantuxn qw/.../ (cm. ran. 2.3 n rnane 2) nomoramr cosart cnncox ns crpox-nmen ]ynxnn, saxnmuenntx n xantuxn. Fonee nopono o xomane use paccxastnaercx n rnane 13.) Hanpnmep, nnxe ntuncnxercx ranrenc / c nomomtm ]ynxnnn tan moynx POSIX (+ra ]ynxnnx ne nmeer nonnxa cpen ncrpoenntx ]ynxnn Perl, onaxo nx ntuncnennx snauennx / mt ncnontsyem ncrpoennym ]ynxnnm Perl atan2): use POSIX; p1nf P p1nf P p1nf P p1nf PO5l::fan{afan2 {1, 1}} O5l::fan{afan2 {1, 1}} O5l::fan{afan2 {1, 1}} O5l::fan{afan2 {1, 1}} 1 push - poaeneuue pauuux k raccuey uynxnnx push oannxer nonoe snauenne nnn cnncox snauenn n xonen maccnna n ynenn- unnaer ero nnny na uncno oannenntx +nemenron: push uaccua, cnucox Paccmorpnm npnmep (oparnre nnnmanne, uro xomana push cosaer maccnn array, ecnn on eme ne cymecrnyer): push 0aay, 5 p1nf p1nf p1nf p1nf pop pop pop pop 0 00 0aay aay aay aay 5 rand - cnyauoe ucno uynxnnx rand nosnpamaer ouepenoe cnyuanoe uncno, xoropoe nexnr n nanasone or nynx o snauennx, saannoro xax napamerp ]ynxnnn rand. Ecnn ne yxasan napamerp, ]ynxnnx ncnontsyer snauenne 1: and aupaeuue and Hpn xaxom opamennn x ]ynxnnn nosnpamaercx nonoe snauenne. nx nnnnnannsannn nocneonarentnocrn cnyuantx uncen ncnontsyercx ]ynxnnx srand (cm. nnxe onnca- nne +ro ]ynxnnn). Ecnn ]ynxnnx rand ntsnana es npemecrnymmero ntsona srand, n nepnt pas ]ynxnnx srand ntstnaercx anromarnuecxn. Hpnmep: p1nf and, "\n", and, "\n", and, "\n" 0.676220703125 0.55670166015625 0.6707006359375 reerse - nepecfaeufu cnucok e opafuor nopnpke Crp.189 uynxnnx reverse eper cnncox, saannt xax nxono napamerp, nepecrannxer ero +ne- menrt n oparnom nopxxe n nosnpamaer n xauecrne pesyntrara nonyunnmncx cnncox: evese cnucox Hpnmep: 0aay = {1, 2, 3} p1nf o1n{", ", evese 0aay} p1nf o1n{", ", evese 0aay} p1nf o1n{", ", evese 0aay} p1nf o1n{", ", evese 0aay} 3, 2, 1 rinde - nonoeuue nopcfpoku uynxnnx rindex nosnpamaer nocnenmm nosnnnm, na xoropo n crpoxe pacnonoxena yxa- sannax nontsonarenem nocrpoxa. B ornnune or ]ynxnnn index, ona naunnaer noncx c xonna crpoxn, a ne c nauana: 1ndex c1poxa, noc1poxa, noauun 1ndex c1poxa, noc1poxa Honcx nocrpoxn naunnaercx nepeo yxasanno nosnnne n nanpannennn x nauany crpoxn. Ecnn nosnnnx ne yxasana, noncx neercx c xonna crpoxn. Ecnn nocrpoxa ne naena, ]ynxnnx rindex nosnpamaer snauenne -1 (nnn snauenne, na ennnny mentme asonoro nn- exca maccnnon, xpannmoro n nepemenno $, ecnn ono ne nont). Hpnmep: $fexf = "hee 1s fhe fexf!" p1nf p1nf p1nf p1nf 1ndex 1ndex 1ndex 1ndex $ $$ $fexf fexf fexf fexf, " , " , " , "fexf fexf fexf fexf" " " " 12 scalar - qopcupoeauue ckannpuoro koufekcfa uynxnnx scalar ]opcnpyer nnrepnperannm ntpaxennx, saannoro n xauecrne ee aprymen- ra n cxanxpnom xonrexcre: sca1a aupaeuue Ananornuno ]ynxnnn, xoropax ]opcnponana t cnncxont xonrexcr, n Perl ner. B cne- ymmem npnmepe noxasana ]ynxnnx scalar sa paoro (oparnre nnnmanne uro nosnpama- ercx nocnenn +nemenr cnncxa): 0aay = {1, 2, 3} p1nf p1nf p1nf p1nf sca1a sca1a sca1a sca1a 0 00 0a aa a ay ay ay ay 3 shit - useneeuue nepeoro snereufa raccuea uynxnnx shift nsnnexaer nepnt +nemenr maccnna, nosnpamax ero n xauecrne pesyntrara, cnnraer ocrantnte +nemenrt n ymentmaer nnny maccnna na ennnny: sh1ff uaccua sh1ff Ecnn ne yxasan aprymenr n ]ynxnnx paoraer n nexcnuecxo onacrn nnnmocrn nonpo- rpammt n ]opmara, ncnontsyercx maccnn _. Ecnn xe nt naxonrect n onacrn nnnmo- crn ]ana nnn n nexcnuecxo onacrn nnnmocrn xoncrpyxnn eval, BEGIN, END nnn INIT, ncnontsyercx maccnn AGV. Crp.190 sin - cuuyc uynxnnx sin ntuncnxer cnnyc aprymenra, saannoro n pananax. Ecnn ne yxasan apry- menr, ncnontsyercx nepemennax $_: s1n aupaeuue s1n urot ntuncnnrt apxcnnyc, moxno nocnontsonartcx ]ynxnne PSI::asin ns naxera POSIX (cm. panee pasen uynxnnn POSIX). sort - copfupoeka cnucka uynxnnx sort coprnpyer cnncox n nosnpamaer pesyntrar: sof nonporpauua cnucox sof |bnox] cnucox sof cnucox Ecnn ne saant nn nonporpamma, nn nox xoman, ro ]ynxnnx coprnpyer cnncox n coorner- crnnn co cranaprntm nopxxom rexcrontx crpox. Ecnn yxasano nmx nonporpammt, ona onxna nosnpamart nenoe uncno nno mentmee, nno pannoe, nno ontmee nynx n sann- cnmocrn or pesyntrara cpannennx nyx nepeanntx e +nemenron cnncxa. Bt moxere raxxe saart nox xoman n xauecrne ncrpannaemo no mecry nonporpammt. Paccmorpnm necxont- xo npnmepon: 0aay = {, b, a, x, y, c} p1nf o1n {", ", sof 0aay} . "\n" a, b, c, x, y, p1nf o1n {", ", sof {$a cmp $b} 0aay} . "\n" a, b, c, x, y, p1nf o1n {", ", sof {$b cmp $a} 0aay} . "\n" , y, x, c, b, a 0aay = {1, 5, 6, 7, 3, 2} p1nf o1n {", ", sof {$a <=> $b} 0aay} . "\n" 1, 2, 3, 5, 6, 7 p1nf o1n {", ", sof {$b <=> $a} 0aay} . "\n" 7, 6, 5, 3, 2, 1 splice - sareua cpesa raccuea uynxnnx splice yanxer ns maccnna nocneonarentno pacnonoxennte +nemenrt n, ecnn +ro rpeyercx, oannxer nmecro nnx nonte: sp11ce uaccua, cue|euue, nuua, cnucox sp11ce uaccua, cue|euue, nuua sp11ce uaccua, cue|euue Hapamerp c+eueuue saaer nnexc nepnoro yanxemoro +nemenra maccnna, napamerp o.u- ua uncno yanxemtx +nemenron. Ecnn napamerp o.uua ne saan, yanxmrcx nce +nemen- rt o xonna maccnna. Ecnn ononnnrentno saan cnucor +nemenron, nocne onepannn ya- nennx +rn +nemenrt oannxmrcx n maccnn, naunnax c nnexca, oosnauennoro napamer- pom c+eueuue, cnnrax nmemmnecx n maccnne +nemenrt n ynennunnax ero nnny. Pesyntrar paort ]ynxnnn sanncnr or xonrexcra. B cnncxonom xonrexcre nosnpamaercx cnn- cox yanenntx +nemenron. B cxanxpnom xonrexcre nosnpamaercx nocnenn yanennt +ne- Crp.191 menr. Ecnn nn onn +nemenr ne yanen, nosnpamaercx neonpeenennoe snauenne undef. B cneymmem npnmepe x maccnny oannxercx nont +nemenr "three" nocne roro, xax n nero sannctnamrcx +nemenrt one n two: 0aay = {"one", "fWo"} sp11ce sp11ce sp11ce sp11ce {0aay, 2, 0, "fhee"} {0aay, 2, 0, "fhee"} {0aay, 2, 0, "fhee"} {0aay, 2, 0, "fhee"} p1nf o1n {", ", 0aay} one, fWo, fhee split - pasueka cfpoku ua cnucok cfpok uynxnnx split npenpamaer crpoxy n maccnn crpox, pasnnax ee n nosnnnxx, coornercr- nymmnx saannomy manony: sp11f /abnou/, 1exc1, nuuu1 sp11f /abnou/, 1exc1 sp11f /abnou/ sp11f Ecnn manon (perynxpnoe ntpaxenne) saan, Perl paccmarpnnaer ]parmenrt rexcra, co- nocrannxemte c manonom, xax pasennrenn none. Camn pasennrenn, xax npannno, nc- xnmuamrcx ns pesyntrara. Ecnn rexcr ne saan, ncnontsyercx cnennantnax nepemennax Perl $_. Ecnn ne saan manon, crpoxa $_ pasnnaercx no npoentntm cnmnonam, npn- uem nauantnte npoentnte cnmnont nrnopnpymrcx. Hpnmep: 0aay = sp11f /|,\s]\s"/, "he11o, my f1ends!" p1nf o1n {"/ ", 0aay} he11o/my/f1ends! Ecnn napamerp .u+um saan n xnnxercx nonoxnrentntm uncnom, ]ynxnnx ocra- nannnnaercx, xora ocrnrnyro yxasannoe xonnuecrno ]parmenron (n +rom cnyuae nocne- nxx crpoxa cnncxa coepxnr neopaorannt xnocr). Ecnn napamerp .u+um ne saan nnn panen nynm, ro +ro coornercrnyer pexnmy no ymonuannm, xora pasnenne neercx o xonna crpoxn n xonnente nycrte crpoxn ne nxnmuamrcx n cnncox. Ecnn xe napamerp .u- +um orpnnarentnoe uncno, xonnente nycrte crpoxn nxoxr n pesyntrar. Ecnn, onaxo, ncnontsyercx npncnoenne cnncxom, Perl yer pasnnart crpoxy na ]parmenrt o rex nop, noxa ne npentcnr uncno nmemmnxcx n ero pacnopxxennn nepemenntx. Hanpn- mep, n cneymmem cnyuae nexnno nopasymenaercx, uro napamerp .u+um panen uertpem: {$1og1n, $passWod, $ema1nde} = sp11f /:/, $fexf (3ro nosnonxer +xonomnrt npemx ntnonnennx nx npnnoxenn, y xoroptx ono xpnrnuno.) Otuno pasennrent ne nxnmuaercx n crpoxn, ns xoroptx cocrannen cnncox. Onaxo ecnn manon coepxnr ]parmenrt, saxnmuennte n xpyrnte cxoxn, ro coornercrnymmne no- crpoxn oannxmrcx x pasnennm: p1nf o1n {"|", sp11f{/\s"|,-]\s"/, "1 - 10, 20"}} 1|10|20 p1nf o1n {"|", sp11f{/\s"{|,-]}\s"/,"1 - 10, 20"}} 1|-|10|,|20 Kax npannno, nauantnte nycrte crpoxn nxnmuamrcx n cnncox, a xoneunte ner. Ecnn nx napamerpa .u+um saano orpnnarentnoe snauenne, xonnente crpoxn raxxe nxoxr n pesyntrar. Ecnn n xauecrne manona saano snauenne , nponsnonrcx pasnenne no rpa- nnnam npoentntx cnmnonon, npnuem neymne npoentnte cnmnont nrnopnpymrcx. Crp.192 Hoxoxn na nero manon / / pasoter nxono rexcr no ncem npoenam, noponn maccy nycrtx crpox. Banon /\s+/ npaxrnuecxn ananornuen manony , sa rem ncxnmuennem, uro npn nannunn neymnx npoenon ntxono cnncox yer naunnartcx c nycro crpoxn. Banont, conocrannxemte nycro crpoxe (//, /\s/ n r. .), raxxe cnennantntm opasom o- paartnamrcx ]ynxnne split onn pasnnamr nxonym crpoxy na orentnte cnmnont: p1nf o1n {"-", sp11f{//,"he11o"}} h-e-1-1-o B cnncxonom xonrexcre ]ynxnnx split nosnpamaer cnncox crpox, nonyuenntx n pesyntrare pasnennx. B cxanxpnom xonrexcre ona nosnpamaer uncno pasnenn, a pesyntrar pasne- nnx sanocnrcx n maccnn _. Moxno npnnynrentno sanonnnrt maccnn _ pesyntrarom pasnennx raxxe n n cnncxonom xonrexcre, ecnn orpannunrt manon nonpocnrentntmn snaxamn. Taxoe nexnnoe sanonnenne maccnna _ ne npnnercrnyercx n Perl, rax xax xon- ]nnxryer c nepeaue napamerpon nonporpammam. B xauecrne manona moxno saanart ntpaxenne, ntuncnxemoe no npemx paort nporpammt: $va1ab1e1 = "\s"|+"/=-]" 0aay = sp11f /$va1ab1e1/, "2 + 2 = 4" p1nf o1n {", ", 0aay} 2, 2, 4 Ecnn ntpaxenne onxno xomnnnnponartcx n nponecce ntnonnennx cnenapnx rontxo onn pas, saare mon]nxarop o (cm. rnany n onncanne oneparopon m/.../ n s/.../.../): $va1ab1e1 = "\s"|+"/=-]" 0aay = sp11f /$va1ab1e1/o, "2 + 2 = 4" p1nf o1n {", ", 0aay} 2, 2, 4 Kax n n cnyuae oneparopon m/.../, s/.../.../ n tr/.../.../, nx ]ynxnnn split n xauecrne orpann- unrenx manona ner neoxonmocrn ncnontsonart xocym uepry. sprint - qoprafupoeauue cfpoku uynxnnx sprintf cosaer ntxonym crpoxy, nponsnox nx saannoro cnncxa snauenn npone- ypy nnrepnonxnnn n coornercrnnn c yxasanntmn nontsonarenem cnenn]nxaropamn ]opmara: sp1nff opua1, cnucox B omem cnyuae xaxomy +nemenry cnncxa coornercrnyer cno cnenn]nxarop ]opmara n crpoxe qop+am. Cymecrnymr cneymmne cnenn]nxaropt: snax nponenra, c cnmnon c saanntm xoom, d nenoe co snaxom n ecxrnuno sanncn, e uncno c nnanamme rouxo, manrncco n nopxxom, ro xe camoe, uro e, no nx oosnauennx nopxxa ncnontsyercx , a ne e f uncno c nnanamme rouxo n ]nxcnponannom ]opmare es yxasannx nopxxa, g uncno c nnanamme rouxo nno n ]opmare f, nno n ]opmare e (n sa- nncnmocrn or roro, moxno nn xoppexrno sanncart snauennx uncna n ]opmare f) G ro xe camoe, uro g, no nx oosnauennx nopxxa ncnontsyercx , a ne e Crp.193 n sanomnnaer n cneymme nepemenno (+nemenre cnncxa) uncno yxe nt- neenntx cnmnonon, o nenoe es snaxa n noctmepnuno sanncn, p yxasarent (apec snauennx xax mecrnanarepnunoe uncno), s crpoxa, u nenoe es snaxa n ecxrnuno sanncn, x nenoe es snaxa n mecrnanarepnuno sanncn, X ro xe camoe, uro x, no c sarnanntmn narnncxnmn yxnamn n xauecrne mecr- nanarepnuntx uncen. nx conmecrnmocrn c pannnmn nepcnxmn Perl ncnontsyer raxxe: D ro xe camoe, uro n ld, F ro xe camoe, uro n lf, i ro xe camoe, uro n d, O ro xe camoe, uro n lo, U ro xe camoe, uro n lu. Kpome roro, mexy cnmnonom nponenra n yxno, saamme rnn ]opmara, moxno nc- nontsonart cneymmne ononnnrentnte cnenn]nxaropt: - ntpannnnart no nenomy xpam nonx, # oannrt npe]nxc 0 nx noctmepnunoro n npe]nxc 0x nx mecrnanarepnunoro uncna, ecnn ono ornnuno or nynx, + nx nonoxnrentnoro uncna oannrt npe]nxc +, npooe. nx nonoxnrentnoro uncna oannrt npoen n xauecrne npe]nxca, 0 ncnontsonart nynn, a ne npoent nx ntpannnnannx no npanomy xpam, h nnrepnpernponart nenoe snauenne xax rnn short nnn unsigned short xstxa C, l nnrepnpernponart nenoe snauenne xax rnn long nnn unsigned long xstxa C, V nnrepnpernponart nenoe snauenne xax cranaprnt nenouncnennt rnn Perl (ne nmeer ananoron n xstxe C), :uc.o mnnnmantnt pasmep nonx, .:uc.o nx uncen c nnanamme rouxo saaer uncno snaxon nocne ecxrnuno rouxn; nx nentx uncen saaer mnnnmantnoe uncno paspxon; nx crpox saaer maxcnmantnym nnny crpoxn. (nx onoro asonoro cnenn]nxaropa moxno yxastnart necxontxo ononnnrentntx.) ecnn nmecro uncna yxasana snesouxa , ro n xauecrne uncna yer ncnontsonano ouepe- noe snauenne ns nxonoro cnncxa anntx. Ono onxno trt nentm nonoxnrentntm unc- nom. Hcxnmuennem xnnxercx mnnnmantnt pasmep nonx: nx nero orpnnarentnoe snaue- nne nnrepnpernpyercx xax ononnnrentnt cnenn]nxarop -, ro ecrt xax ntpannnnanne no nenomy xpam nonx. Bor necxontxo npnmepon (oparnre nnnmanne, uro n nepnom npnmepe uncno oxpyrnxercx): Crp.194 $va1ue = 1234.5679 p1nf sp1nff "=x.4f\n", $va1ue =1234.5679 p1nf sp1nff "=x.5f\n", $va1ue =1234.5679 p1nf sp1nff "=x6.6f\n", $va1ue =1234.56790 p1nf sp1nff "W=x+.4e\n", $va1ue W=x1.2346ex003 srt - keappafuu kopeuu uynxnnx sqrt ntuncnxer xnaparnt xopent cnoero aprymenra. Ecnn ne yxasan aprymenr, ncnontsyercx nepemennax $_: sqf aupaeuue sqf Hpnmep: p1nf sqf 144 12 srand - uuuuuafop reuepafopa cnyauux ucen uynxnnx srand nnnnnannsnpyer paory reneparopa cnyuantx uncen. Ecnn yxastnart e onn n ror xe aprymenr, ]ynxnnx rand yer renepnponart onn n re xe nocneona- rentnocrn. Ecnn aprymenr ne yxasan, ncnontsyercx snauenne, ocnonannoe na rexymem npemenn n nenrn]nxarope nponecca: sand aupaeuue sand substr - nopcfpoka fekcfoeo cfpoku uynxnnx substr nosnpamaer nocrpoxy rexcrono crpoxn, nepeanno e n xauecrne aprymenra: subsf 1exc1, cue|euue, nuua, aaueua subsf 1exc1, cue|euue, nuua subsf 1exc1, cue|euue Hocrpoxa naunnaercx c cnmnona, nmemmero saannoe c+eueuue or nauana crpoxn Ecnn c+eueuue orpnnarentno, nocrpoxa naunnaercx c xonna crpoxn n nnraercx or xonna x naua- ny. Ecnn ne saana o.uua, nosnpamaercx nect rexcr o xonna ncxono crpoxn. Ecnn o.uua orpnnarentna, yxasannoe xonnuecrno cnmnonon ntunraercx ns nnnt ocranmerocx o xonna crpoxn rexcra. Ecnn saan napamerp sa+eua, ro n xauecrne mercma onxno trt yxasano nenoe snauenne (ro ecrt aprymenr nmemmn npano naxonrtcx n neno uacrn oneparopa npncnannannx), a ]ynxnnx substr ne npocro nepner nocrpoxy, no n samennr n ncxonom rex- cre ee na nont ]parmenr. Hpnmept: $fexf = "hee 1s fhe fexf." p1nf subsf {$fexf, 12} . "\n" fexf. p1nf subsf {$fexf, 12, 4} . "\n" fexf p1nf subsf {$fexf, 12, 4, "Wod"} . "\n" Crp.195 p1nf $fexf fexf hee 1s fhe Wod. tie - epern e cekyupax c 1 nueapn 1970 ropa uynxnnx time nosnpamaer xonnuecrno cexyn, npomemnx c momenra nexoroporo xnmue- noro cotrnx: f1me Fontmnncrno nnrepnperaropon Perl ncnontsymr n xauecrne xnmuenoro momenra 00:00:00 1-ro xnnapx 1970 roa ennoro npemennoro xanenapx (ro ecrt momenr, c xoropo- ro orcunrtnaer npemx onepannonnax cncrema Unix). Onaxo, nanpnmep, nx MacOs xnm- uentm momenrom xnnxercx 00:00:00 1-ro xnnapx 190 roa 1 . uc - npeopasoeauue yke k eepxuery perucfpy uynxnnx uc nosnpamaer crpoxy, nepeannym e n xauecrne napamerpa, npeopasonanno x nnxnemy perncrpy, ro ecrt samenxx n ntxono crpoxe crpounte yxnt na sarnannte. Ecnn aprymenr onymen, ncnontsyercx nepemennax $_: uc aupaeuue uc Hpnmep: p1nf uc "he11o!" hLLLO! ucirst - npeopasoeauue nepeo ykeu k eepxuery perucfpy uynxnnx ucfirst nosnpamaer ncxonym crpoxy, n xoropo nepnax yxna (ecnn +ro yxna) npeopasonana x nepxnemy perncrpy (ro ecrt crpounax yxna samenxercx na sarnannym). Ecnn y ]ynxnnn ne yxasan aprymenr, ncnontsyercx nepemennax $_: ucf1sf aupaeuue ucf1sf Hpnmep: p1nf ucf1sf "he11o!" he11o! unpack - ynakoeka suaeuu uynxnnx unpack nonyuaer nnapnym crpyxrypy, ynaxonannym ]ynxnne pack (cm. nt- me), a nosnpamaer cnncox pacnaxonanntx snauenn: unpack abnou, aupaeuue
1 Kcrarn, snauennx, renepnpyemte mktime na mamnne, paoramme no ynpannennem Windows, nenpannntno nnrepnpern- pymrcx n Unix, n naoopor. Hpn +rom, onaxo, pasnte napnanrt Unix (Solaris, FreeBSD n Linux) amr nnonne nepenocn- mte pesyntrart. Hpu+e:. peo.
Kopo1ko B +ro rnane paccxastnaercx o cpecrnax paort c ]anamn Perl. Ocooe nnnmanne yenxer- cx ]ynxnnxm, xoropte otuno paoramr c ]nsnuecxnmn (ro ecrt pacnonoxenntmn na ncxe) ]anamn, nx nmenamn n xaranoramn. 3ro ouent naxnax n oemnax rema; xorx nonnt osop nenosmoxen, annax rnana aer nennoxym asy, xoropax nosnonnr unrarenm trt ocrarouno xomnerenrntm n annom nonpoce. (Ona ns npnunn nnymnrentnoro oema +ro remt ro, uro mnorne ]ynxnnn ynnpymr pyr pyra. enns Perl ncera ecrt necxontxo cnocoon cenart uro-nno npoxnnxer cex n onacrn paort c ]anamn c ocoenno nonnoro.) Hocxasxa. Hpomueuuru Unix oo.rui cpasv vcuumi, :mo paooma c qa.a+u e Perl ocuoeiea.aci usua- :a.iuo u+euuo ua qa.oeo cucme+e omo onepauouuo cucme+i. Bsir no-nperue+v e sua:ume.iuo cmeneuu npuoeprueaemc nperue cmpvrmvpi, noooepruea npaea oocmvna r qa.a+ Unix, cu+eo.u:e- crue cci.ru u m. o. Umooi npoeepumi, rarue u+euuo qvuruu noooeprueammc e eaue onepauouuo cucme+e, nompeovmmc ueromopie orcnepu+eumi c rourpemuo eepcue Perl (ocooeuuo roeoa oe.o oo- oem oo vcmauoeru npae oocmvna r eauu+ qa.a+). Koe-fo o paofe c qanaru Fontmnncrno nporpammncron snaxomo c npnnnnnamn, na xoroptx crponrcx paora c ]ana- mn. urot paorart c anntmn, coepxamnmncx n ]ane, nporpamma orxptnaer ero, no- nyuax coornercrnymmn oecrpunmop (Iile handle). 3ra nponeypa cosaer nomor nnoa nnn ntnoa, n antnemne onepannn (urenne, sannct ]ana) cctnamrcx na norox uepes ecxpnn- rop. Ho sanepmennn paort ]an saxptnaercx. B +ro rnane +ror nponecc paccmarpnnaercx onee rnyoxo. Mt yem paorart ne rontxo c ecxpnnropamn, no n c ]ynxnnxmn, xoropte ynpannxmr nenocpecrnenno ]anamn n xaranoramn, pacnonoxenntmn na ncxe. Kpome roro, sect paccxastnaercx o cosannn n ncnontsonannn as anntx DBM (Unix), rax xax +ror ma- repnan nonynxpen n cpee nporpammncron CGI-npnnoxenn. Heoxonmo sanomnnrt ne- cxontxo cornamenn. Bo-nepntx, nmena ecxpnnropon ]anon n Perl, urot ornnunrt nx or sapesepnnponanntx nenrn]nxaropon, otuno nanpamrcx sarnanntmn yxnamn. (ecxpnn- ropt ]anon ne rpeymr pastmenontnammero npe]nxca rnna $. urot paorart c nnmn xax c nepemenntmn, nanpnmep, urot cxonnponart nao oparnrtcx x sanncn rannnt cnm- nonon c rem xe camtm nmenem.) Hocuasua. Bcmpe:a u+ (uanpu+ep, AAME), romopoe +oruo uumepnpemupoeami rar oecrpunmop qa.a, Perl oopauaemc r sanucu mao.ui cu+eo.oe AAME u use.eraem oecrpunmop qa.a. Hoomo+v ec.u ei, uanpu+ep, eino.uume onepaum npuceoeuu AEWAAME AAME o. sanuce mao.ui cu+- eo.oe, mo AEWAAME u AAME ovovm cci.amic ua oouu u mom re oecrpunmop. Bo-nroptx, nao nomnnrt, uro opamenne x ]anam nanonee uacro npnnonr x omnxam, - no- +romy nanonee naxnte onepannn cronr conponoxart xoncrpyxnne or die nnn uem-ro no- ontm. Haxonen, yurnre, uro Unix ncnontsyer xocym uepry (/) nx pasenennx xaranoron n nonnom nyrn x ]any. Ecnn nama onepannonnax cncrema (Windows nnn DOS) ncnontsyer o- parnym xocym uepry (\), ne saytre, uro nx Perl n crpoxax, orpannuenntx nontmn xantuxa- mn, +ro cnennantnt cnmnon n ero nao nanpart c nomomtm escape-nocneonarentnocrn (\\): Crp.219 open {IlLLhANDLL, "fmp open {IlLLhANDLL, "fmp open {IlLLhANDLL, "fmp open {IlLLhANDLL, "fmp\ \\ \\ \\ \f11e.fxf"} f11e.fxf"} f11e.fxf"} f11e.fxf"} o d1e {"Cannof open f11e.fxf"} Wh11e {<IlLLhANDLL>} { p1nf } 3amertre raxxe, uro, nocxontxy Perl rax cnntno opnenrnponan nmenno na ]ant n paory c nnmn, marepnan, ornocxmncx x anno rnane, moxno narn n n pyrnx pasenax xnnrn: n rnane oneparopt paort c ]anamn rnna -, n rnane 9 -cnennantnte nepemennte (nanpnmep, $/ pasennrent nxontx sannce, $, -pasennrent ntxontx sannce, $[ y]epnsannx ntnoa n r. .). Haxonen, n rnane 10 pasnpamrcx ]ynxnnn, ynaxontnammne annte n sanncn ]nxcnponannoro pasmepa, uro yono nx ]anon c npxmtm ocrynom x anntm (]ynxnnn pack, unpack n vec). Haxonen, ne satnare, uro ono n ro xe ecrnne moxno ntnonnnrt pasntmn cnocoamn. Ecnn nt ne moxere narn nyxnoro nncrpymenra cpen ncrpoenntx cpecrn paort c ]ana- mn, ero moxno ortcxart n pyrom mecre. Hanpnmep, cpen ncrpoenntx ]ynxnn ner ]ynx- nnn, nosnonxmme xonnponart ]ant, no n moyne I::File ecrt mero copy, npexpacno noxoxmn nmenno nx +ro nenn. Haxonen, ecnn ne yaercx narn ro, uro nam nao cpen snaxomtx nncrpymenron, nponeptre mnorouncnennte ]ynxnnn moynx POSIX.
Henocpepc1neuume pemeuun open - ofkpufue qana urot orxptrt ]an, ncnontsyre ]ynxnnm open: open ecxpun1op, aupaeuue open ecxpun1op 3ra ]ynxnnx orxptnaer ]an c saanntm nmenem n cosaer yxasannt ecxpnnrop ]a- na. Hocne ee ntsona ecxpnnrop moxer ncnontsonartcx nx cctnox na ]an n camtx pas- ntx onepannxx. Ecnn nmx ne saano, Perl ntraercx orxptrt ]an c nmenem, connaam- mnm c nmenem ecxpnnropa. uynxnnx open nosnpamaer nenynenoe snauenne (coornercrnyer ycnonnm ucmuua), ecnn ]an ycnemno orxptr, n neonpeenennoe snauenne (coornercrnyer ycnonnm .ori), ecnn cenart +roro ne yanoct. (Ecnn n xauecrne ]ana orxptnaercx raua., ro nosnpamaemoe snauenne n cnyuae ycnemnoro sanepmennx paort ]ynxnnn +ro nenrn]nxarop ouepnero nponecca.) Hmx ]ana moxer coepxart ononnnrentnte cnmnont, yxastnammne, xax nmenno cne- yer orxptrt ero. Ecnn nmx nmeer npe]nxc < nnn ne nmeer npe]nxca, ]an orxptnaercx nx urennx. Ecnn nmx nmeer npe]nxc >, ]an orxptnaercx nx sanncn n nonnocrtm ounmaercx (ec- nn on yxe cymecrnyer) nnn xe cosaercx nont ]an. Ecnn nmx nmeer npe]nxc >>, ]an orxptnaercx nx sanncn, a annte onnctnamrcx n ero xonen. Ecnn ]an ne cymecrnyer, cosaercx nont. Ecnn nmx nmeer npe]nxc +<, ]an orxptnaercx nx urennx n sanncn. Ecnn ]an cyme- crnyer, ero coepxnmoe coxpanxercx. Ecnn nmx nmeer npe]nxc +>, ]an orxptnaercx n nx urennx n sanncn, onaxo ecnn on Crp.220 yxe cymecrnyer, ro nonnocrtm ounmaercx. Ecnn nmx nmeer npe]nxc [ nnn xe nepe nnm cronr cnmnon [, Perl paccmarpnnaer +ry xoncrpyxnnm xax raua. eieooa, ro ecrt xax nmx nporpammt, xoropo na nxo yyr no- anartcx ntnonmte cnenapnem annte (noponee cm. rnany H). Ecnn nmx nmeer cy]]nxc [ nnn xe nocne nero cronr cnmnon [, Perl paccmarpnnaer +ry xoncrpyxnnm xax raua. eeooa, ro ecrt xax nmx nporpammt, ntno xoropo yer cunrt- nartcx cnenapnem n xauecrne anntx (noponee cm. rnany 11). Ecnn n xauecrne nmenn ]ana saant xoncrpyxnnn [- nnn -[, nopoxaercx ouepnn npo- necc, ]ynxnnx open nosnpamaer ero nenrn]nxarop, a onepannn nnoa (-[) nnn ntnoa ([-) y- yr npnnonrt x omeny nn]opmanne c ouepnnm nponeccom (noponee cm. rnany 11). Ecnn n xauecrne nmenn ]ana saan e]nc , ]ynxnnx orxptnaer cranaprnt norox nnoa (otuno STDIN). Ecnn n xauecrne nmenn ]ana saant cnmnont >-, ]ynxnnx orxptnaer cranaprnt norox ntnoa (otuno STDUT). Ecnn ntpaxenne naunnaercx c xoncrpyxnnn >, ro nmx sa ne nnrepnpernpyercx nno xax nmx ecxpnnropa ]ana Perl (ecnn +ro rexcr), nno xax ecxpnnrop ]ana Unix (ecnn +ro uncno). Hocuasua. Moruo ucno.isoeami cu+eo. & u noc.e roucmpvru >>, +>, +>>, < u +<. Ecnn ntpaxenne naunnaercx c xoncrpyxnnn <&nn, re nn +ro uncno, ro Perl pac- cmarpnnaer nn xax ecxpnnrop ]ana n opaartnaer ero xax ]ynxnnx fdopen xstxa C. B cneymmem npnmepe ]an orxptnaercx nx sanncn, n n nero ntnonrcx nexoropt rexcr: open {IlLLhANDLL, ">he11o.fxf"} o d1e {"Cannof open f11 open {IlLLhANDLL, ">he11o.fxf"} o d1e {"Cannof open f11 open {IlLLhANDLL, ">he11o.fxf"} o d1e {"Cannof open f11 open {IlLLhANDLL, ">he11o.fxf"} o d1e {"Cannof open f11e he11o.fxf"} e he11o.fxf"} e he11o.fxf"} e he11o.fxf"} p1nf IlLLhANDLL, "he11o!" c1ose {IlLLhANDLL} he11o! close - sakpufue qana uynxnnx close saxptnaer orxptrt ]an nnn xanan no oxonuannn paort c nnm. Hpn +rom n ]an nnn xanan nepectnamrcx nce annte, eme naxoxmnecx n y]epe ntnoa, a ecxpnnrop ]ana ennnnnannsnpyercx, rax uro antnemne onepannn c nnm (xpome or- xptrnx nonoro ]ana) cranonxrcx nenosmoxnt: c1ose ecxpun1op c1ose Ecnn ecxpnnrop ]ana onymen, ]ynxnnx saxptnaer norox, xoropt ycranonnen xax STDOUT (cm. onncanne ]ynxnnn select anee n +ro rnane). Ona nosnpamaer snauenne ucmuua, ecnn yanoct ntnecrn ocrarox y]epa n ycnemno saxptrt ]an. Ecnn saxptnaercx xanan, ]ynxnnx close oxnaer sanepmennx paort nponecca, cnxsanno- ro c nnm, urot moxno nponepnrt ntno uepes xanan. (Ko sanepmennx nporpammt, c xo- ropo nponcxonn omen anntmn, sannctnaercx n nepemennym Perl $.) Hpnmep ncnontsonannx ]ynxnnn close: open {IlLLhANDLL, ">he11o.fxf"} o d1e {"Cannof open f11e he11o.fxf"} p1nf IlLLhANDLL, "he11o!" c1ose {IlLLhANDLL} c1ose {IlLLhANDLL} c1ose {IlLLhANDLL} c1ose {IlLLhANDLL} he11o! Crp.221 print - eueop e qan uynxnnx print ntnonr cnncox n ]an, oosnauennt ecxpnnropom: p1nf ecxpun1op cnucox p1nf cnucox p1nf B cneymmem npnmepe (on yxe ncrpeuancx n +ro rnane) ]ynxnnx print sannctnaer nn- ]opmannm n ]an: open {IlLLhANDLL, ">he11o.fxf"} o d1e {"Cannof open f11e he11o.fxf"} p1nf IlLLhANDLL p1nf IlLLhANDLL p1nf IlLLhANDLL p1nf IlLLhANDLL "he11o!" "he11o!" "he11o!" "he11o!" c1ose {IlLLhANDLL} he11o! uynxnnx nosnpamaer snauenne ucmuua npn ycnemnom sanepmennn. Ecnn ne saan ecx- pnnrop, ntno nponsnonrcx n STDUT nnn n ecxpnnrop ]ana, ycranonnennt xax STDUT (cm. onncanne ]ynxnnn select anee n +ro rnane). Ecnn cnncox onymen, nc- nontsyercx nepemennax $_. Hocxontxy print paoraer co cnncxamn, n xoroptx xaxt +nemenr anntx cunraercx orentno sannctm, moxno ntnonrt n ]an cnncxn cneym- mnm opasom (oparnre nnnmanne, uro sect nepeonpeenxercx pasennrent ntxontx sannce, xpannmt n nepemenno $,): open {IlLLhANDLL, ">aay.daf"} o d1e {"Cannof open f11e aay.daf"} $, = "\n" 0aay = {1, 2, 3} p1nf IlLLhA p1nf IlLLhA p1nf IlLLhA p1nf IlLLhAN NN NDLL 0aay DLL 0aay DLL 0aay DLL 0aay c1ose {IlLLhANDLL} Tenept coepxnmoe ]ana array.dat npecrannxer coo: 1 2 3 Cneymmn xo orxptnaer rontxo uro sanncannt ]an (oparnre nnnmanne, uro n mac- cnn array cunrtnamrcx cpasy nce crpoxn ]ana n yanxercx cnmnon nono crpoxn): open {IlLLhANDLL, "<aay.daf"} o d1e {"Cannof open f11e aay.daf"} chomp{0aay = <IlLLhANDLL>} chomp{0aay = <IlLLhANDLL>} chomp{0aay = <IlLLhANDLL>} chomp{0aay = <IlLLhANDLL>} c1ose IlLLhANDLL p1nf o1n {, , 0aay} 1, 2, 3 rite - sanucu e qan Bmecro print nx sanncn n ]an moxno ncnontsonart ]ynxnnm write: W1fe ecxpun1op W1fe aupaeuue W1fe Mt yxe ncrpeuannct c +ro ]ynxnne n npetyme rnane (cm. ononnnrentnte no- ponocrn n rnane 11). uynxnnx write ncnontsyercx nx ntnoa ]opmarnponanntx sann- ce, a ne xax ]ynxnnx ntnoa omero nasnauennx (nx +ro nenn ncnontsyercx print). Ec- nn yxasan ecxpnnrop ]ana, write ntnonr ouepenym ]opmarnponannym sannct nx ]opmara, npnnncannoro +romy ecxpnnropy. Ecnn yxasano ntpaxenne, ro ono onxno trt rexcrono crpoxo, nnrepnpernpyemo xax nmx ecxpnnropa. Haxonen, ecnn write Crp.222 ntstnaercx es napamerpon, ro ncnontsyercx STDUT nnn ecxpnnrop, xoropt ycra- nonnen xax STDUT (cm. onncanne ]ynxnnn select anee n +ro rnane). B cneymmem npnmepe n ]an format.txt ntnonrcx ]opmarnponannax sannct: open {IlLLhANDLL, ">fomaf.fxf"} o d1e {"Cannof open f11e fomaf.fxf"} fomaf IlLLhANDLL = 0<<<<<<<<<<<0>>>>>>>>>>>> $fexf1, $fexf2 . $fexf1 = "he11o" $fexf2 = "fhee" W1fe IlL W1fe IlL W1fe IlL W1fe IlLL LL LhANDLL hANDLL hANDLL hANDLL c1ose {IlLLhANDLL} he11o fhee! binode - ycfauoeka peouuoro peura Hexoropte onepannonnte cncremt (nanpnmep, DOS n Windows) pasnnuamr rexcronte n nonunte ]ant (rounee, pexnmt paort c ]anamn). Hpn ntnoe cnmnonon nono crpoxn n anromarnuecxn samenxercx napo +F (\r\n), a npn nnoe \r\n samenxercx cnmnonom nono crpoxn \n. urot npn ntnoe ncnontsonart rontxo cnmnont \n, ncnont- syercx ]ynxnnx binmode: b1nmode ecxpun1op Paccmorpnm npnmep ncnontsonannx Perl n MS-DOS. Hpn ntnoe crpoxn, sanepmammecx cnmnonom \n, n ntxonom ]ane noxnnrcx \r\n (ASCII-xot 0x0d0x0a): open {IlLLhANDLL, ">dafa.fxf"} o d1e {"Cannof open f11e dafa.fxf"} p1nf IlLLhANDLL "he11o p1nf IlLLhANDLL "he11o p1nf IlLLhANDLL "he11o p1nf IlLLhANDLL "he11o\ \\ \nfhee! nfhee! nfhee! nfhee!\ \\ \n" n" n" n" c1ose {IlLLhANDLL} C:\debug dafa.fxf -d 107A:0100 4 65 6C 6C 6I 0D 0A 74 - 6 65 72 65 21 0D 0A he11o. . fhee!. . . (nx npocmorpa ]ana n mecrnanarepnunom pexnme n annom cnyuae ncnontsonancx orna- unx MS-DOS, xorx pyrne nporpammt, nanpnmep Norton Commander, ropaso yonee.) Ecnn xe ntsnart ]ynxnnm binmode, ro n ]an nonayr rontxo cnmnont nono crpoxn: open {IlLLhANDLL, ">dafa.fxf"} o d1e {"Cannof open f11e dafa.fxf"} b1nmode IlLLhANDLL b1nmode IlLLhANDLL b1nmode IlLLhANDLL b1nmode IlLLhANDLL p1nf IlLLhANDLL "he11o\nfhee!\n" c1ose {IlLLhANDLL} C:\debug dafa.fxf -d 107A:0100 4 65 6C 6C 6I 0A 74 - 6 65 72 65 21 0A he11o, fhee!. .. Ynpaeneuue yqepusauue eueopa Moxno sacrannrt Perl cpactnart na ncx (nnn pyro nocnrent) y]ep ntnoa nocne xaxo onepannn print nnn write. nx +roro nepemenno Perl $[ nao npncnonrt nenyne- noe snauenne: $| = 1 Crp.223 (B npornnnom cnyuae nce, uro nanpannxercx n norox ntnoa, naxannnnaercx n y]epe (o- nacrn namxrn) n sannctnaercx rontxo nocne sanonnennx y]epa nnn saxptrnx noroxa.) Toro xe pesyntrara moxno onrtcx, ecnn ntsnart ]ynxnnm autoflush: aufof1ush ecxpun1op aupaeuue -feuue qanoe, nepepauuux epes koraupuyk cfpoky Hmena ]anon, croxmne nocne nmenn cnenapnx n xomanno crpoxe, nepeamrcx xoy n xauecrne noroxa nnoa: x p1nfem f11e1.fxf f11e2.fxf Ecnn nocne +ro xomant oparnrtcx x STDIN, ro nmecro nnoa c xonconn (xnannarypt) mt nonyunm oennennoe coepxnmoe ]anon file1.txt n file2.txt: Wh11e {<>} { p1nf } hee 1s a f11e! hee 1s anofhe f11e! -feuue us peckpunfopa qana Btpaxenne nna oecrpunmop~ nosnpamaer cneymmym crpouxy, cunrannym ns ]ana. 3ro nonesno, xora nao npounrart orxptrt ]an. Hanpnmep, cneymmn ]parmenr xo- a unraer nect rexcr ns ]ana file.txt: open {IlLLhANDLL, "<f11e.fxf"} o d1e {"Cannof open f11e f11e.fxf"} Wh11e {<IlLLhANDLL>} { Wh11e {<IlLLhANDLL>} { Wh11e {<IlLLhANDLL>} { Wh11e {<IlLLhANDLL>} { p1nf } hee 1s a f11e! Ecnn ecxpnnrop ]ana ne yxasan, ncnontsyercx STDIN. read - feuue exopuux pauuux uynxnnx read unraer annte ns ecxpnnropa ]ana: ead ecxpun1op, cxannp, nuua, cue|euue ead ecxpun1op, cxannp, nuua (Oparnre nnnmanne: ]ynxnnx read ue e.emc napno nx ]ynxnnn write!) 3ra ]ynx- nnx ntraercx npounrart ns ecxpnnropa ]anon uncno aron, yxasannoe napamerpom o.uua, n sanncart nx n cxanxpnym nepemennym. Hapamerp c+eueuue (ecnn on saan) yxa- stnaer, c xaxo nosnnnn or nauana cxanxpa (crpoxn) nao pasmemart cunrannte art. Ecnn on ne saan nnn panen nynm, ro cxanxpno nepemenno npncnannaercx snauenne- crpoxa, cunrannax ns ]ana, a npexnee coepxnmoe nepemenno repxercx. Ecnn xe saa- no c+eueuue, ro rexymnm snauennem cxanxpno nepemenno onxna trt rexcronax Crp.224 crpoxa, or xoropo epercx necxontxo nepntx aron, x nnm oannxmrcx art, cunran- nte ns ]ana, n nce sanomnnaercx n xauecrne nonoro snauennx nepemenno. Ho+romy nnna crpoxn moxer ymentmnrtcx nnn ynennunrtcx. Ecnn rexymee snauenne cxanxpa ne xnnxercx rexcrono crpoxo, ono npeopasyercx x ]opmary rexcrono crpoxn na- npnmep, uncno 123.5 npeopasyercx n crpoxy 123.5. Ecnn rexymax nnna crpoxn mentme yxasannoro cmemennx, ona ononnxercx nonuntmn nynxmn. (nx +xcne- pnmenrantno nponepxn nonesno nocnontsonartcx ]ynxnne vec ns rnant 10.) uynxnnx read nosnpamaer xonnuecrno ycnemno cunranntx ar. 3nauenne nont yxastnaer na xo- nen ]ana. 3nauenne undef ronopnr o rom, uro n nponecce urennx tnn omnxn. Hpnmep (urenne ]ana ar sa arom c nocneymmnm ntnoom): open {IlLLhANDLL, "<f11e.fxf"} o d1e {"Cannof open f11e f11e.fxf"} $fexf = "" Wh11e {ead {IlL Wh11e {ead {IlL Wh11e {ead {IlL Wh11e {ead {IlLL LL LhANDLL, hANDLL, hANDLL, hANDLL, $neWfexf, 1}} { $neWfexf, 1}} { $neWfexf, 1}} { $neWfexf, 1}} { $ $$ $fexf .= $neWfexf fexf .= $neWfexf fexf .= $neWfexf fexf .= $neWfexf } }} } p1nf $fexf hee 1s a f11e! readline - cufueauue cfpoku eeopa uynxnnx readline unraer ns ]ana ony crpoxy (n cxanxpnom xonrexcre) nnn cnncox crpox o xonna ]ana (n cnncxonom xonrexcre) n nosnpamaer pesyntrar. nx nenrn]nxa- nnn ]ana e nepeaercx ntpaxenne, xoropoe onxno trt sannctm rannnt cnmnonon (typeglob) c rem xe nmenem, uro n ecxpnnrop ]ana (nanpnmep, readline (STDIN);): ead11ne aupaeuue (Hpnunna, no xoropo nepeaercx sannct rannnt cnmnonon, onontno npocra: n Perl +ro eouucmeeuui cnoco nepeart cctnxy na ecxpnnrop ]ana.) urot onpeennrt xonen crpoxn, ]ynxnnx readline ncnontsyer nepemennym Perl $/. B cneymmem npnmepe ns STDIN cunrtnaercx crpoxa n ntnonrcx na +xpane: $1npuf = ead11ne {"51DlN} p1nf $1npuf hee 1s a 11ne of fexf. getc - cufueauue opuuouoro cureona uynxnnx getc nosnpamaer onnount cnmnon, nonyuennt ns ecxpnnropa ]ana. Ecnn nocnenn onymen, ncnontsyercx STDIN: gefc ecxpun1op-auna gefc uynxnnx nosnpamaer cnmnon nnn neonpeenennoe snauenne no ocrnxennn xonna ]ana. uynxnnx getc yxe ncnontsonanact n npetyme rnane. B cneymmem npnmepe c ee no- momtm ]an unraercx noarno (onaxo +ro ne osnauaer, uro nno ne y]epnsyercx noponee cm. rnany 11): open {IlLLhANDLL, "<f11e.fxf"} o d1e {"Cannof open f11e f11e.fxf"} Wh11e {$cha Wh11e {$cha Wh11e {$cha Wh11e {$cha = = = = gefc gefc gefc gefc IlLLhA IlLLhA IlLLhA IlLLhAN NN NDLL} DLL} DLL} DLL} { p1nf $cha } Crp.225 hee 1s a f11e! seek - nouck sapauuo nosuuuu e qane uynxnnx seek ncnontsyercx nx ycranonxn rexyme nosnnnn n ]ane n rouxy, c xoropo naunercx cneymmax onepannx nnoa nnn ntnoa: seek ecxpun1op, noauun, xax-cuu1a1u B xauecrne rexyme nosnnnn oecrpunmopa ]ana ycranannnnaercx saannax nont- sonarenem nosnnnx. Hapamerp nosuu saaercx n arax, a napamerp rar-c:umami yxast- naer, xax ero nnrepnpernponart. Bosmoxnte snauennx: 0 ycranonnrt rexymym nosnnnm n snauenne nosuu (orcunrtnaemoe or nauana ]ana), 1 cnnnyrt rexymym nosnnnm na yxasannoe xonnuecrno aron (c nauana nnn c xonna ]ana n sanncnmocrn or snaxa nosuuu), 2 ycranonnrt rexymym nosnnnm n snauenne nosuu, orcunrtnaemoe or xonna ]ana (snauenne napamerpa nosuu onxno trt orpnnarentntm nnn nynentm). Oparnre nnnmanne, uro napamerp rar-c:umami oxsarenen. Paccmorpnm npnmep. uan file.txt coepxnr rexcr: 1h1s 1s fhe fexf. C nomomtm cneymme xomant rexymax nosnnnx ycranannnnaercx na nauano cnona text, a sarem, naunnax c +ro nosnnnn, ntnonnxercx onepannx urennx: open {IlLLhANDLL, "<f11e.fxf"} o d1e {"Cannof open f11e f11e.fxf"} seek IlLLhANDLL, 12, 0 seek IlLLhANDLL, 12, 0 seek IlLLhANDLL, 12, 0 seek IlLLhANDLL, 12, 0 Wh11e {<IlLLhANDLL>} { p1nf } c1ose {IlLLhANDLL} fexf. uynxnnx seek uacro ncnontsyercx c ]anamn, pasnrtmn na sanncn ]nxcnponannoro pasme- pa. C ee nomomtm nerxo nonyunrt ocryn x nmo sanncn n ]ane (raxo ocryn nastnaercx np+i+ (random), n ornnune or noc.eooeame.iuoeo (sequential access), xoropt rpeyer cun- rtnart nce npomexyrounte sanncn, npexe uem nt oeperect o nyxnoro mecra). urot ocnyxnnart sanncn nocroxnno nnnt (rax xax nepemennte Perl otuno oexrt nepe- +euuo nnnt), moxno ncnontsonart ]ynxnnn Perl pack, unpack, vec n px pyrnx. tell - fekyan nosuuun e qane uynxnnx tell nosnpamaer snauenne rexyme nosnnnn n ]ane, orcunrtnaemoe n arax or nauana ]ana: fe11 ecxpun1op fe11 Ecnn napamerp oecrpunmop onymen, tell ncnontsyer nocnenn npounrannt ]an. B cneymmem npnmepe c nomomtm ]ynxnnn seek ycranannnnaercx nosnnnx n ]ane, a sarem tell coomaer ee snauenne: open {IlLLhANDLL, "<f11e.fxf"} o d1e {"Cannof open f11e f11e.fxf"} Crp.226 seek IlLLhANDLL, 12, 0 p1nf fe11 IlLLhANDLL p1nf fe11 IlLLhANDLL p1nf fe11 IlLLhANDLL p1nf fe11 IlLLhANDLL c1ose {IlLLhANDLL} 12 Hocuasua. C no+ouim qvuruu tell +oruo vsuami pas+ep qa.a, vcmauoeue mervuvm nosuum ua roue qa.a. seek IlLLhANDLL, 0, 2 $s1eoff11e = fe11 IlLLhANDLL stat - uuqoprauun o qane uynxnnx stat nosnpamaer cnncox ns rpnnanarn +nemenron, onnctnammnx cocroxnne ]ana: sfaf ecxpun1op sfaf aupaeuue sfaf uan saaercx c nomomtm ecxpnnropa ]ana nnn rexcrono crpoxn, coornercrnymme ero nmenn. Ecnn aprymenr stat ne saan, ncnontsyercx nepemennax $_. 3nemenrt, onnct- nammne cocroxnne ]ana, npecrannxmr coo cneymmne snauennx: 0 (dev) nomep ]anono cncremt, 1 (ino) nnexcnt ecxpnnrop (xapaxrepncrnxn ]ana n onepannonno cncremt Unix), 2 (mode) pexnmt ocryna ]ana (paspemena sannct, paspemeno urenne, ncnonnxemt ]an, xaranor n r. .), 3 (nlink) uncno xecrxnx cctnox na ]an n ]anono cncreme, 4 (uid) nenrn]nxarop nontsonarenx (User ID) nx nnaentna ]ana, 5 (gid) nenrn]nxarop rpynnt nontsonarenx (Group ID) nx nnaentna ]ana, 6 (rdev) nenrn]nxarop ycrpocrna nx cnennantntx ]anon, 7 (si:e) nonnt pasmep ]ana n arax, 8 (atime) npemx nocnenero opamennx x ]any, 9 (mtime) npemx nocnenero nsmenennx ]ana, 10 (ctime) npemx nocnenero nsmenennx nnexcnoro ecxpnnropa, 11 (blks:e) pasmep noxa no ymonuannm nx cranaprno cncremt nnoa/ntnoa, 12 (blocks) uncno noxon, orneenntx nx ]ana. Hocuasua. Bpe+ omc:umieaemc e cervuoax om ua:a.a onoxu, mo ecmi om 1 ueap 1970 eooa (omo cnpaeeo.ueo no:mu o. ecex onepauouuix cucme+, ue mo.iro o. Unix, sa ucr.m:euue+, uanpu+ep, Ma- cOs). Kpo+e moeo, ue ece o.e+eumi cocmouu noooeprueammc opveu+u onepauouui+u cucme+a+u. B cneymmem npnmepe c nomomtm ]ynxnnn stat ntnonrcx pasmep ]ana: $f11ename = "f11e.fxf" {$dev, $1no, $n11nk, $u1d, $g1d, $dev, $s1e, $af1me, $mf1me, $cf1me, $b1ks1e, $b1ocks} = sfaf {$f11ename} p1nf "$f11ename 1s $s1e byfes 1ong." f11e.fxf 1s 20 byfes 1ong. Ecnn n xauecrne ecxpnnropa ]ana ]ynxnnn stat saan cnmnon nouepxnnannx, ona nosnpa- maer cnncox snauenn, coornercrnymmnx nocnene nponepxe ]ana c nomomtm ]ynxnnn Crp.227 stat nnn oneparopon nponepxa ]ana (cm. pasen Oneparopt nponepxn ]anon rnant ). 4anoeue qyukuuu ropynn POS Haoparopnx xomntmrepntx cncrem Hannonantnoro nncrnryra cranapron n rexnonorn (the National Institute oI Standards and Technology Computer Systems Laboratory NIST/CSL) n copyxecrne c pyrnmn oprannsannxmn cosana cranapr POSIX Portable Operating System InterIace. 3ro omnpnax nnnorexa cranaprnsnponanntx C-noontx ]ynxnn, noxptnammnx cranaprnte norpenocrn nporpammnponannx, or asontx mare- marnuecxnx ntuncnenn o nponnnyro paort c ]anamn. Moynt Perl POSIX npeocrannxer ocryn npaxrnuecxn xo ncem cranaprntm ]ynxnnxm POSIX nepcnn 1003.1 ncero oxono 250. Onn ne xnnxmrcx ncrpoenntmn, noono oc- rantntm ]ynxnnxm +ro rnant, onaxo ynomnnamrcx sect, rax xax moynt POSIX oec- neunnaer ontme nosmoxnocre, uem ncrpoennte ]ynxnnn Perl. Moynt POSIX noxnm- uaercx xomano use: use PO5l # obaau1u ack bubnuo1exy PO5l use PO5l qW/yuxun/ # obaau1u ouy yuxuk (Hcnontsonanne no nropom napnanre ncenoxantuex qw/.../ (cm. ran. 2.3 n rnane 2) camt npocro cnoco cosart cnncox ns crpox-nmen ]ynxnn, saxnmuenntx n xantuxn. Fonee no- pono o xomane use paccxastnaercx n rnane 13.) Hanpnmep, n cneymmem ]parmenre ]ynxnnx fstat moynx POSIX nosnonxer nonyuart nn]opmannm o cocroxnnn ]ana n ntnecrn ero pas- mep (oparnre nnnmanne, uro ]ynxnnx fstat ncnontsyer ecxpnnropt, a ne nmena ]anon): use PO5l use PO5l use PO5l use PO5l $f11ename = "f11e.fxf" $desc1p $desc1p $desc1p $desc1p = = = = PO5l::open{$f11ename, PO5l::0kDONL} PO5l::open{$f11ename, PO5l::0kDONL} PO5l::open{$f11ename, PO5l::0kDONL} PO5l::open{$f11ename, PO5l::0kDONL} {$dev, $1no, $n11nk, $u1d, $g1d, $ {$dev, $1no, $n11nk, $u1d, $g1d, $ {$dev, $1no, $n11nk, $u1d, $g1d, $ {$dev, $1no, $n11nk, $u1d, $g1d, $dev, $s1e, $af1me, dev, $s1e, $af1me, dev, $s1e, $af1me, dev, $s1e, $af1me, $mf1me, $mf1me, $mf1me, $mf1me, $cf1me, $b1ks1e, $cf1me, $b1ks1e, $cf1me, $b1ks1e, $cf1me, $b1ks1e, $b1ocks} $b1ocks} $b1ocks} $b1ocks} = = = = PO5l::fsfaf {$desc1p} PO5l::fsfaf {$desc1p} PO5l::fsfaf {$desc1p} PO5l::fsfaf {$desc1p} p1nf "$f11ename 1s $s1e byfes 1ong." f11e.fxf 1s 7 byfes 1ong. select - euop peckpunfopa qana pnn STDOUT uynxnnx select nosnonxer ycranonnrt nnn nonyunrt ecxpnnrop ]ana, ncnontsyemt no ymonuannm nx onepann ntnoa: se1ecf ecxpun1op se1ecf Hepnax ]opma ycranannnnaer saannt ecxpnnrop ]ana n xauecrne noroxa ntnoa, xo- ropt yer ncnontsonartcx sarem no ymonuannm. Bropax nosnonxer nonyunrt rexymn ecxpnnrop ]ana no ymonuannm nx onepann ntnoa. B cneymmem npnmepe c nomo- mtm nepenanpannennx cranaprnt norox ntnoa STDUT nepeapecyercx n nont ]an, a ]ynxnnx print, saannax es xnnoro yxasannx ecxpnnropa ]ana, ntnonr annte n +ror ]an: open {IlLLhANDLL, ">he11o.fxf} o d1e {"Cannof open f11e he11o.fxf"} se1ecf se1ecf se1ecf se1ecf IlLLhANDLL IlLLhANDLL IlLLhANDLL IlLLhANDLL p1nf "he11o!" c1ose {IlLLhANDLL} Crp.228 eo - npoeepka kouua qana uynxnnx eof nosnonxer nponepnrt npn urennn anntx, ne ocrnrnyr nn yxe xonen ]ana: eof ecxpun1op eof {} eof 3ra ]ynxnnx nosnpamaer snauenne ucmuua (uncno 1), ecnn nt naxonrect n xonne ]ana, sa- annoro uepes ecxpnnrop, rounee, ecnn cneymmax onepannx urennx npnneer x cnryannn xonen ]ana. (3nauenne 1 nosnpamaercx n n rom cnyuae, ecnn ecxpnnrop ]ana ne orxptr.) Fes aprymenra ]ynxnnx eof ncnontsyer nocnenn npounrannt ]an. Honeenne ]ynxnnn n rom cnyuae, xora ee aprymenr nycrax napa xpyrntx cxoox, paccmarpnnaercx nnxe. B cneymmem npnmepe ]an cunrtnaercx noarno o rex nop, noxa ne yer ocrnrnyr ero xonen: open {IlLLhANDLL, "<f11e.fxf"} o d1e {"Cannof open f11e f11e.fxf"} $fexf = "" unf11 {eof{IlLLhANDLL} unf11 {eof{IlLLhANDLL} unf11 {eof{IlLLhANDLL} unf11 {eof{IlLLhANDLL} { { { { ead {IlLLhANDLL, $neWfexf, 1} $fexf .= $neWfexf } p1nf $fexf hee 1s a f11e! uynxnnx eof c nycro napo xpyrntx cxoox n xauecrne aprymenra ncnontsyercx npn ure- nnn noroxa nnoa STDIN, n xauecrne xoroporo ncnontsyercx necxontxo saanntx n xo- manno crpoxe ]anon. B cneymmem npnmepe ntnonrcx coepxnmoe nepnoro ]ana c rexcrom Here is the text!, nroporo c ]paso Here is another text!, a sarem ntnonrcx crpoxa And that is it!. Cnenapn sanycxaercx rax: xpe1 -W p1nf1f.p1 f11e1.fxf f11e2.fxf nor xo cnenapnx: Wh11e {<>} { p1nf 1 11 1f {eof{}} { f {eof{}} { f {eof{}} { f {eof{}} { p1nf "And fhaf 1s 1f!" } } hee 1s fhe fexf! hee 1s anofhe fexf! And fhaf 1s 1f! Fes napamerpon nnn c xnntm yxasannem ecxpnnropa STDIN ]ynxnnx eof cpaartnana t, ne rontxo xora ncuepnan nect nxono norox anntx, no n nepe sanepmennem pao- rt c xaxtm ]nsnuecxnm ]anom: Wh11e {<>} { p1nf 1f 1f 1f 1f {eof} { {eof} { {eof} { {eof} { p1nf "-" x 30 } 1f {eof{}} { 1f {eof{}} { 1f {eof{}} { 1f {eof{}} { p1nf "And fhaf 1s 1f!" } } hee 1s fhe fexf! ------------------------------ hee 1s anofhe fexf! ------------------------------ And fhaf 1s 1f! Crp.229 Oparnre nnnmanne, uro xoncrpyxnnx while (<>) nosnonxer npounrart o xonna nect no- rox nnoa, necmorpx na ro uro on cocronr ns nyx ]nsnuecxnx ]anon. Komana nos- npamaer neonpeenennoe snauenne, ecnn ne moxer ntnonnnrt onepannm urennx anntx. uynxnnx eof nosnpamaer snauenne .ori, xora cneom sa rexyme nosnnne nnoa an- ntx naxonrcx xonen ]ana. Hanocneox ormernm, uro ]ynxnnx eof ncnontsyercx cpannnrentno pexo, rax xax ]ynx- nnn Perl, npenasnauennte nx paort c ]anamn, npexpacno conpxramrcx c ycnonntmn oneparopamn n oneparopamn nnxna a nmenno, onn nosnpamamr snauenne .ori, xora nosnnxaer omnxa nnn xora n ]ane ne ocraercx anntx nx urennx. 3anucu asu pauuux DBM Onepannonnax cncrema Unix noepxnnaer ouent npocro n ncnontsonannn ]opmar as anntx DBM. B craptx nepcnxx Perl nx paort c DBM npenasnauannct ]ynxnnn rnna dbmopen n dbmclose. Onaxo renept nx ntrecnnna ]ynxnnx tie (c ne mt nosnaxomnmcx, xora yem nsyuart oexrno-opnenrnponannoe nporpammnponanne n Perl): f1e nepeueuuan, uun-xnacca, cnucox-napaue1poa Ona cesieaem x+m n xpanxmymcx na ncxe asy anntx DBM. B cneymmem npnmepe x+m hash cnxstnaercx c ]anom data.db (pacmnpenne .db coornercrnyer asam anntx DBM n oannxercx anromarnuecxn npn cnxstnannn nepemenno n ]ana 1 ), n x+m sanocnrcx nonoe snauenne, n n pesyntrare mt nonyuaem asy anntx c nyxno nam nn]opmanne: use Icnf1 use ND8MI11e f1e xhash, "ND8MI11e", dafa, f1e xhash, "ND8MI11e", dafa, f1e xhash, "ND8MI11e", dafa, f1e xhash, "ND8MI11e", dafa, O OO OkDWk| kDWk| kDWk| kDWk|O OO OCkLA1| CkLA1| CkLA1| CkLA1|O OO OLCL, 0644 LCL, 0644 LCL, 0644 LCL, 0644 $hash{d1nk} = oof bee unf1e xhash (Mt noxnmunnn moynt Fcntl, urot ncnontsonart cnmnonnuecxne xoncranrt rnna _D, _EAT n r. . Mncrnuecxoe uncno 0 coornercrnyer paspemennxm na oc- ryn ]ana onee nopono o +rom paccxastnaercx anee npn onncannn ]ynxnnn chmod.) Kax npouecrt coepxnmoe cosanno ast anntx, paccxastnaercx n cneymmem pasene. Hocuasua. Basi oauuix qop+ama DBM noooeprueammc ue mo.iro onepauouuo cucme+o Unix uo u, uanpu+ep, Win32. Hpocmo ucno.isvme e+ecmo ADBMFile +oov.i (u r.acc) SDBMFile 2
Kak npoufafu qan asu pauuux qoprafa DBM urot npounrart cosannym n npetymem pasene asy anntx data.db, nao cnxsart +ror ]an n x+m Perl n ntnecrn annte ns x+ma: use Icnf1 use ND8MI11e
1 3ro yrnepxenne anropa ne nnonne ncrnnno n ocraercx nennxom na ero conecrn. DBM +ro cxopee cnoco xpanennx anntx, a ne ]opmar ]ana xonxpernt rnn DBM (BD, GDBM, NDBM, SDBM) sanncnr or nepcnn Unix. B uacrno- crn, no ast anntx SDBM cosamrcx na ]ana, npnuem onn nonyuaer pacmnpenne pag, a pyro dir, a ]an ast anntx GDBM noome ne nonyuaer pacmnpennx, ecnn ero ne yxasart. Hpu+e:. peo. 2 uecrno ronopx, sect anrop ntpan ne camt nyumn npnmep naexnee tno t ncnontsonart ]opmar DB (Berkley DB), xoropt peannsonan nx ncex nnar]opm, a raxxe nosnonxer cosanart nanonee tcrpte n xomnaxrnte ast anntx. Kpome roro, neoxonmo npeynpenrt, uro x+m maccnnon nnn x+m x+me n DBM coxpannrt ne yacrcx (xorx nexoropte nontsona- renn ntramrcx +ro cenart) nx +ro nenn cneyer ncnontsonart moynt MLDBM. Hpu+e:. peo. Crp.230 f1e xhash, "ND8MI11e", dafa, OkDWk, 0644 f1e xhash, "ND8MI11e", dafa, OkDWk, 0644 f1e xhash, "ND8MI11e", dafa, OkDWk, 0644 f1e xhash, "ND8MI11e", dafa, OkDWk, 0644 p1nf $hash{d1nk} unf1e xhash oof bee urot paorart c asamn anntx DBM, +rnx cneenn ocrarouno. Cnxxnre asy anntx c nepemenno Perl (x+mem), n x+m moxno yer ncnontsonart xax asy anntx. (Tem ne menee erantnoe snaxomcrno c xnaccamn n meroamn ns moynx NDBMFile n/nnn SDBMFile npx nn oxaxercx nnmnnm, xorx, nanpnmep, ncnontsonanne DBFile xnnxercx, xax npannno, nan- onee naexntm, ycrounntm n pexomenyemtm noxoom.) Koneuno, moxno ncnontsonart n ropaso onee momnte ast anntx c nosmoxnocrxmn, anexo npenocxoxmnmn DBM. Onaxo ecnn namn sanpoct ne cnnmxom nennxn, ocrarouno ast anntx DBM. Hocuasua. Basi oauuix qop+ama DBM noooeprueammc ue mo.iro noo onepauouuo cucme+o Unix uo u, uanpu+ep, noo Win32. Hpocmo ucno.isvme e+ecmo ADBMFile +oov.i (u r.acc) SDBMFile. lock - nokupoeka qana ]ynxnnx flock nosnonxer sanoxnponart ]an, saannt ecxpnnropom, nx ocryna co cropont pyrnx nponeccon: f1ock ecxpun1op, xo-onepauu 3ra onepannx ynpannxer pexnmom ocryna x ]any co cropont pyrnx nponeccon n, n uacr- nocrn, nosnonxer nsexart xon]nnxron c pyrnmn nporpammamn, unrammnmn ]an, noxa n nero sannctnamrcx nonte annte. Xorx n cncreme Unix noxnponxa nnmt pero+euove+a onepannx, nx pyrnx onepannonntx cncrem (nanpnmep, nx Windows NT) ona oosame.iua. Cneymmne snauennx xnnxmrcx onycrnmtmn nx xoa onepannn (urot ncnontsonart cnm- nonnuecxne nmena, nao noxnmunrt moynt Fcntl c nomomtm xomant use Fcntl): _SH (1) pasenxemt ocryn x ]any, _E (2) mononontnt ocryn x ]any, _NB (4) - conmecrno c _SH nnn _E oecneunnaer tcrpt nosnpar, ro ecrt ]ynxnnx flock nosnpamaer ynpannenne n rouxy ntsona, ne oxnaxct, noxa pexnm ocryna x ]any axrnnnsnpyercx (nanpnmep, npnercx nooxart pasenxe- moro ocryna, ecnn xaxo-ro nponecc yxe saxnarnn mononontnt ocryn x ]any), _UN (8) cnnmaer pexnm noxnponxn (ro ecrt nocne ntnonnennx +ro one- pannn nponecc repxer nce cnon npana na ocryn x ]any). Paspemaercx xomnnnponart necxontxo (ne xon]nnxrymmnx) pexnmon c nomomtm one- pannn nonrnoe nnn ([). chod - usreueuue npae pocfyna k qany uynxnnx chmod nsmenxer npana ocryna x ]any, xpanxmemycx na nocroxnnom nocnrene. Hanonee naxnt npana na urenne n/nnn sannct, npncnoennte romy nnn nnomy nontsonarenm: chmod cnucox-napaue1poa Hepntm +nemenrom cnncxa onxno trt uncno, saammee npana ocryna, xax +ro npnnx- ro n onepannonno cncreme Unix (+ro uncno yono saanart n noctmepnunom npecran- nennn, - nanpnmep, 0 nnn 000). Ocrantntmn +nemenramn cnncxa xnnxmrcx nmena Crp.231 ]anon. uynxnnx nosnpamaer uncno ]anon, nx xoroptx onepannx tna ycnemno. B cneymmem npnmepe ncnontsyercx ]an file.txt. Texymne npana ocryna x nemy ycra- nonnent n 000. A nmenno, nx +roro ]ana xomana Unix ls -l ntnonr pesyntrar: -W------- 1 use 1 Ocf 2 11:51 f11e/fxf C nomomtm ]ynxnnn chmod moxno nsmennrt npana ocryna na 0: chmod 0644, f11e.fxf -W----- 1 use 1 Ocf 2 11:51 f11e/fxf Bosmoxno, nama onepannonnax cncrema ne noepxnnaer noctmepnunte xot npan oc- ryna. Hanpnmep, Windows noepxnnaer rontxo rpn arpnyra ]anon: A (apxnnnt), R (rontxo nx urennx), H (cxptrt) n S (cncremnt). 3rn arpnyrt nsmenxmrcx c nomo- mtm xomant MS-DOS attrib nnn, n cnyuae nnrepnperaropa ActiveState Perl Ior Win32, ]ynxnn in32::File::GetAttributes n in32::File::SetAttributes. renae - nepeureuoeauue qanoe uynxnnx rename nosnonxer nsmenxrt nmena ]anon: ename c1apoe-uun, uoaoe-uun Ona nosnpamaer ucmuuv (uncno 1), ecnn ]an yanoct nepenmenonart, n .ori (uncno 0) n npornnnom cnyuae. glob - nouck qanoe no uanouy uynxnnx glob nosnpamaer cnncox ]anon, nmena xoroptx coornercrnymr yxasannomy manony (manon cneyer nonnmart n cmtcne ]anono cncremt Unix, a ne xax pery- nxpnoe ntpaxenne Perl 1 ). Hmx ]ynxnnn nponcxonr or coornercrnymme xomant Unix, xorx c ne mentmnm ycnexom +ra ]ynxnnx Perl paoraer n nx pyrnx onepannonntx cnc- rem 2 . Ecnn ne yxasan aprymenr, ncnontsyercx nepemennax $_: g1ob aupaeuue g1ob Hanpnmep, cneymmn xo ntnonr nonnt cnncox ]anon rexymero xaranora: p1nf o1n{"\n", g1ob {"}} Hoocrasra. Moruo eieecmu u+eua qa.oe c.eovmuu+ oopaso+. Wh11e {<".fxf>} { p1nf } e.o e mo+, :mo Perl ueeuo eisieaem qvurum glob u npeepauaem uao.ou vrasauuoeo e+ecmo oecr- punmopa qa.a, e reasuqa., romopi cocmoum us cmpor, eosepauae+ix qvurue glob. Oouaro o. mo- eo, :mooi noumi, rar paoomaem omom mpmr, npuoemc ooeo.iuo e.vooro sa.esmi e oorv+eumaum Perl. unlink - ypaneuue qanoe
1 Xorx n annom cnyuae +ro nourn ono n ro xe perynxpnte ntpaxennx n Unix ncnontsymrcx na yponne cranaprntx cpecrn OC. Hpu+e:. peo. 2 K coxanennm, +ra nannnax nepa anropa ne ntepxnnaer nponepxn npaxrnxo. Hcnontsonart annym ]ynxnnm otuno ne pexomenyercx axe n Unix, ecnn ncnontsyercx oonouxa C shell, a n Windows nnn DOS ona moxer art omnounte pe- syntrart, ecnn rontxo ne npnnxrt cnennantnte mept. -Hpu+e:. peo.
Crp.232 uynxnnx unlink (nasnanne nponcxonr or ononmenno xomant Unix, xoropym +ra ]ynxnnx nmnrnpyer) nosnonxer yanxrt ]ant, yxasannte n xauecrne ee aprymenra. uynxnnx nosnpamaer uncno yanenntx ]anon. Ecnn aprymenr onymen, ncnontsyercx ne- pemennax $_: un11nk cnucox-aunoa un11nk C nomomtm rpmxa, onncannoro n npetymem pasene, moxno yanxrt ]ant c nomo- mtm manona, ananornunoro manony glob. B cneymmem npnmepe mt yanxem nce ]a- nt c pacmnpennem .old: p1nf De1efed , un11nk {<".o1d>}, f11es. De1efed 9 f11es. uynxnnx unlink ne npenasnauena nx yanennx xaranoron. nx +ro nenn cneyer ncnontso- nart rmdir (cm. nnxe). Xorx npn ocotx ycnonnxx ]ynxnnx unlink n cnocona yanxrt xaranorn (cm. oxymenrannm Perl), +ro moxer oxasartcx onacntm nx ]anono cncremt. opendir - ofkpufue kafanora uynxnnx opendir orxptnaer xaranor n cosaer ecxpnnrop, xoropt ncnontsyercx onn- ctnaemtmn nnxe ]ynxnnxmn readdir, telldir, seekdir, rewinddir n closedir: opend1 ecxpun1op, aupaeuue Karanor paccmarpnnaercx xax xnasn]an, n xoropom sanncxmn cnyxar nmena ]anon n noxaranoron. Hontsonarent moxer cunrtnart nx noono crpoxam otunoro ]ana, a raxxe ycranannnnart nosnnnm nauana urennx c nomomtm nepeuncnenntx ntme ]ynxnn. ecxpnnrop ]ana, nnnnnannsnponannt ]ynxnne opendir xax xaranor, ne moxer nc- nontsonartcx ]ynxnnxmn ]anonoro nnoa/ntnoa, noxa nt ne saxpoere ero ]ynxnne closedir n ne orxpoere xax otunt ]an ]ynxnne open. uynxnnx nosnpamaer snauenne ucmuua, ecnn xaranor yanoct orxptrt, n .ori n npornnnom cnyuae. closedir - sakpufue kafanora uynxnnx closedir saxptnaer xaranor, panee orxptrt c nomomtm ]ynxnnn opendir: c1osed1 ecxpun1op uynxnnx nosnpamaer snauenne ucmuua, ecnn ee paora sanepmnnact ycnexom, n .ori n npornnnom cnyuae. readdir - feuue copepuroro kafanora uynxnnx readdir nosnonxer nonyunrt cnncox ]anon n noxaranoron n xaranore, panee orxptrom c nomomtm opendir: eadd1 ecxpun1op Ho ymonuannm nmena ]anon n noxaranoron naunnamr ntnonrtcx c nepnoro coepxame- rocx n xaranore nmenn, onaxo c nomomtm ]ynxnn seekdir n rewinddir (cm. anee) moxno nsmennrt nopxox ntnoa. B cnncxonom xonrexcre readdir nosnpamaer cnncox ns ncex nmen ]anon, naunnax c rexyme nosnnnn n o xonna xaranora. B cxanxpnom xonrexcre ona nos- Crp.233 npamaer ouepenoe nmx ]ana. Ecnn cnncox nmen ncuepnan, nosnpamaercx nycro cnncox n cnncxonom xonrexcre n neonpeenennoe snauenne n cxanxpnom xonrexcre. Hocuasua. Ec.u ei cooupaemeci ue npocmo eieecmu no.v:euui cnucor qa.oe, a eue u npoeepumi ux cocmouue, mo cnepea noc+ompume onucauue qvuruu readdir e oorv+eumauu Perl soeci ecmi nooeoo- uie ra+uu, o romopix no.esuo suami. B cneymmem npnmepe ntnonrcx cnncox nmen ]anon n rexymem xaranore: opend1 {DlkLC1Ok, "."} o d1e "Cannof open cuenf d1ecfoy." p1nf o1n{"/", eadd1{DlkLC1Ok}}: c1osed1 DlkLC1Ok . /. . /16.p1/.PL/P.PL/v.PL/W.PL seekdir - ycfauoeka fekye nosuuuu e kafanore uynxnnx seekdir nosnonxer nsmenxrt rexymym nosnnnm n xaranore, orxptrom c nomo- mtm ]ynxnnn opendir: seekd1 ecxpun1op, noauun 3nauenne napamerpa nosuu onxno trt snauennem, nosnpamaemtm ]ynxnne telldir (cm. nnxe). telldir - feuue fekye nosuuuu e kafanore uynxnnx telldir nosnpamaer rexymym nosnnnm n xaranore, orxptrom c nomomtm opendir (c +ro nosnnnn yer naunnartcx ouepenax onepannx urennx, ntnonnxemax ]ynxnne readdir): fe11d1 ecxpun1op reinddir - ycfauoeka fekye nosuuuu ua uaano kafanora ]ynxnnx rewinddir ycranannnnaer nosnnnm, ncnontsyemym ]ynxnne readdir, na nauano xaranora: eW1ndd1 ecxpun1op chdir - creua fekyero kafanora Bt moxere nsmennrt rexymn xaranor c nomomtm ]ynxnnn chdir: chd1 aupaeuue chd1 ]ynxnnx chdir nsmenxer rexymn xaranor na snauenne aprymenra (rexcrono crpoxo), ecnn +ro nosmoxno. Ecnn ne yxasan napamerp, ro rexymnm cranonnrcx omamnn xaranor. uynx- nnx nosnpamaer snauenne ucmuua, ecnn ee paora sanepmnnact ycnexom, n .ori n npornnnom cnyuae. B cneymmem npnmepe rexymn xaranor nsmenxercx na ponrentcxn (oosnauaemoe xax .. xax n DOS, rax n n Unix) n ntnonrcx cnncox ]anon, xpanxmnxcx n nem: chd1 ".." chd1 ".." chd1 ".." chd1 ".." opend1 {DlkLC1Ok, "."} o d1e "Cannof open d1ecfoy." p1nf o1n {", ", eadd1{DlkLC1Ok}} Crp.234 c1osed1 DlkLC1Ok ., .., ma11, .a11as, .cshc, .1og1n, .p1an, .pof11e kdir - cospauue uoeoro kafanora uynnnx mkdir cosaer nont xaranor: mkd1 aupaeuue, npaaa-oc1yna Hont xaranor cosaercx c nmenem, yxasanntm nepntm aprymenrom (rexcrono crpoxo), ecnn +ro nosmoxno. Bropo napamerp saaer npana ocryna x xaranory n nne noctmepnunoro uncna (nx ]anono cncremt Unix cm. ntme onncanne ]ynxnnn chmod). uynxnnx nosnpamaer snauenne ucmuua, ecnn ee paora sanepmnnact ycnexom, n .ori n npornnnom cnyuae. B cneymmem npnmepe mt cosaem nont xaranor tmp, nepexonm n nero n sannctnaem ]an: mkd1 "fmp", 0744 mkd1 "fmp", 0744 mkd1 "fmp", 0744 mkd1 "fmp", 0744 chd1 "fmp" open {IlLLhANDLL, ">he11o.fxf"} o d1e "Cannof open f11e he11o.fxf." p1nf IlLLhANDLL "he11o!" c1ose {IlLLhANDLL} Hocuasua. Bepcu Perl for Win32 ueuopupvem emopo napa+emp, mar :mo ei +oreme oes npoo.e+ cos- oaeami rama.oeu, paooma e Windows. rdir - ypanufu kafanor uynxnnx rmdir yanxer xaranor: md1 aupaeuue md1 Paspemaercx yanxrt rontxo nycro xaranor. Ecnn ne saano nmx xaranora, ncnontsyercx nepemennax $_. uynxnnx nosnpamaer snauenne ucmuua, ecnn ee paora sanepmnnact ycne- xom, n .ori n npornnnom cnyuae (n nocnenem cnyuae n nepemennym $! nomemaercx co- omenne o omnxe). Crp.235
Hac1u III
Rporpauuuponauue ua PerI
Fnana 13
C1aupap1ume uopynu
Kopo1ko B +ro rnane mt nxparne nosnaxomnmcx c nosmoxnocrxmn, npeocrannxemtmn mnorounc- nenntmn moynxmn Perl. Moynt Perl cocronr ns xoa, xoropt nanncan n coornercrnne c onpeenenntmn rpeonannxmn. uynxnnn, coepxamnecx n moynxx, moxno ncnontsonart n nmo nporpamme. Hcnonusoeauue ropyne Perl O npannnax nanncannx moyne Perl paccxastnaercx n rnane 15. Ceuac nanonee cymecr- nenno ro, uro onn npeocrannxmr n pacnopxxenne paspaorunxa orpomnt oem yxe na- nncannoro n ntnonnxmmero mnoxecrno nonesntx ]ynxnn xoa. Moynn naxoxrcx n ]anax c pacmnpennem .pm n moryr sarpyxartcx n nporpammy c nomomtm xomant use: use uoynu cnucox use uoynu use uoynu {} use uoynu aepcun cnucox use uoynu aepcun use uoynu aepcun {} use aepcun Ecnn saano nmx moynx n sa nnm cneyer cnncox ]ynxnn, ro sarpyxamrcx yxasannte ]ynxnnn. Ecnn cnncox ne yxasan, sarpyxamrcx nce ]ynxnnn moynx. Haxonen, ecnn yxa- san nycro cnncox, ro nn ona ]ynxnnx ne sarpyxaercx, xorx nmena ]ynxnn n nepemen- ntx, yxasannte n moyne, cranonxrcx nsnecrnt nporpamme. Ecnn nocne nmenn moynx (nnn mexy nmenem moynx n cnncxom ]ynxnn) naxonrcx uncno, ro nepe sarpysxo moynx nponepxercx ero rexymax nepcnx (ecnn n moyne npeycmorpen no- mep nepcnn). Ecnn nepcnx moynx, ycranonnennoro n Bame cncreme, mname nepcnn, yxasan- Crp.236 no n xomane use, nnrepnperarop npeptnaer paory c ntaue coomennx o omnxe. Haxonen, ecnn nepnt nepeannt xomane napamerp uncno, ro Perl nponepxer rexy- mym nepcnm nnrepnperaropa. Ecnn ona mentme saannoro uncna, ro nnrepnperarop npe- xpamaer paory c ntaue coomennx o omnxe. Bor npnmep, n xoropom mt sarpyxaem nce ]ynxnnn ns moynx SaIe: use use use use 5afe 5afe 5afe 5afe $safecompafmenf = neW 5afe $safecompafmenf->pem1f{qW{p1nf}} $esu1f = $safecompafmenf->eva1{"p1nf \"he11o!\""} he11o! A nor rax ns moynx POSIX sarpyxaercx rontxo ]ynxnnx strtime: use use use use PO5l sfff1me PO5l sfff1me PO5l sfff1me PO5l sfff1me p1nf sfff1me "hee 1s fhe dafe: xd/xm/x\n", 1oca1f1me hee 1s fhe dafe: 30/10/1999 Hocuasua. Hauoo.ee npocmo cnocoo npeoopasoeami cnucor u+eu qvuru e cnucor cmpor ~ omo sar.m- :umi ux e nceeooraei:ru qw/.../ (c+. mao.. 23 e e.aee 2). To ecmi roucmpvru use POSIX qw/strftime asc- time/ oreuea.eumua roucmpvruu use POSIX ('strftime', 'asctime') (oopamume euu+auue ua omcvmcmeue sanmix euvmpu roucmpvruu qw/.../). Hnora nx cocranntx nmen, nxnmuammnx nmx naxera n nmx moynx, raxxe npnxonrcx ncnontsonart pasennrent :: (ro ecrt xora rpeyercx nomoynt moynx). Hanpnmep, n cneymmem cnyuae mt ncnontsyem nomoynt Copy moynx File, urot cxonnponart ]an no nontm nmenem: use use use use I11e::Copy I11e::Copy I11e::Copy I11e::Copy copy {"f11e.fxf", "f11e2.fxf"} Hocuasua. Perl sa+euem pasoe.ume.i :: ua /, mar :mo u+ File::Copy, mo ecmi File/Copy, osua:aem, :mo +i uue+ qa. Copy.pm e noorama.oee File rama.oea ouo.uomeru +oov.e. Kpome sarpysxn moyne xomana use opaartnaer raxxe nparmt, ro ecrt cnennantnte npexrnnt nx xomnnnxropa Perl. Mt yxe ncrpeuannct c nexoroptmn ns nnx, nanpn- mep, ecnn nt nomecrnre xomany use strict vars n nporpammy, Perl yer rpeonart o- xnnennx ncex rnoantntx nepemenntx. B Perl nmeercx mnoxecrno cranaprntx moyne, n mt conpaemcx cenart n +ro rnane xparxn osop nanonee nonynxpntx. Cxontxo moyne nxnmuaercx n nocranxy Perl Bsrnxnnre na ran. 13.1. Homnmo ocnonntx moyne Perl, nepeuncnenntx n ran. 13.1, n annom pasene npnno- nrcx cnncox ocnonntx nparm, oomenntx n ran. 13.2. Hmena nparm ncnontsymr crpounte yxnt, rora xax nmena moyne naunnamrcx c sarnanno yxnt. Kpome cranaprntx moyne, nocrannxemtx c Perl, mnoxecrno ononnnrentntx moyne moxno nonyunrt uepes CPAN n pyrne apxnnt (nanpnmep, ysen xomnannn ActiveState). 3rn moynn oxnartnamr nonnt nanason saau or cerentx onepann o paort c nnrep]ec- ntmn nnnorexamn rnna Tk. Bt moxere cxonnponart n ycranonnrt +rn moynn camocrox- rentno nnn xe ncnontsonart nncrpymenr, noont Perl Package Manager (PPM), ro ecrt roront cnenapn Perl nx ycranonxn naxeron 1 (on nxonr n cocran naxera ActivePerl). Bor, x npnmepy, xaxne xomant nt moxere ncnontsonart c PPM nocne coennennx c Hnrepnerom: help ntnecrn cnpanxy,
1 B Unix nx ycranonxn moyne otuno ncnontsyercx moynt CPAN. Hpu+e:. peo. Crp.237 install naremi sarpysnrt n ycranonnrt yxasannte naxert, query nonyunrt nn]opmannm o ycranonnenntx naxerax, quit ntxo ns PPM, remove naremi yanxer yxasannte naxert, search nonyunrt nn]opmannm o ocrynntx (nx sarpysxn n ycranonxn) naxerax, set saart n oropasnrt rexymne ycranonxn, verify nponepnrt, coornercrnymr nn ycranonnennte naxert camo nocnene nepcnn. Hanpnmep, urot sarpysnrt n ycranonnrt nonynxpnt moynt Tk, nao coennnrtcx c Hnrepnerom, sanycrnrt PPM, a sarem nnecrn xomany install Tk. 3ra nponeypa cnntno ynpomaer nponecc, xorx o nponemax, cnxsanntx c PPM, n nocnxmenntx Perl xon]epen- nnxx UseNet nyr ecxoneunte cnopt. Moynt Tk noepxnnaer ntson nponeyp nnnorexn Tk ns Perl n nosnonxer ncnontsonart n nporpammax nnsyantnt rpa]nuecxn nnrep]ec. Tax xax +ror moynt cran cront nonynx- pen cpen nporpammncron na Perl, mt paccmorpnm ero uyrt onee nopono (xorx on n ue nxonr n cranaprnym nnnorexy moyne), npoemoncrpnponan necxontxo npnmepon, xax oropasnrt oxno c xnonxamn, xnonxamn c sanncnmo ]nxcanne (radiobuttons) n xnonxamn c nesanncnmo ]nxcanne (checkbox), menm, cnncxamn n pyrnmn nnrep]ecntmn +nemenra- mn rpa]nuecxo nnnorexn Tk. (Oparnre nnnmanne, uro nnrep]ecnte +nemenrt nnno- rexn Tk moryr ntrnxert no-pasnomy n pasnnuntx onepannonntx cncremax.) Ha +rom saxonunm c nneennem. Tenept mt roront npncrynnrt x osopy moyne Perl. 1abnua 13.1. 1abnua 13.1. 1abnua 13.1. 1abnua 13.1. C1auap1uue uoynu Pe1 oynu hpeuaauaueuue hpeuaauaueuue hpeuaauaueuue hpeuaauaueuue AnyD8MI11e Cpea nn paanuuuux baa auuux D8M AufoLoade 3arpyaxa yuxuu no 1peboaauuk Aufo5p11f aabuaxa naxe1a nn obnerueuun peuua aa1oaarpyaxu {aufo1oad1ng} 8enchmak 1ec1u cxopoc1u xoa ua 1ane aunonueuun CPAN u1epeuc x apxuay CN {Compehens1ve Pe1 Ach1ve NefWok} CPAN::I1sf11me Coaae1 xouurypauouuuu aun CPAN CPAN::Nox 3anycx uoyneu CPAN bea ucnonuaoaauun cxoununupoaauuux aunoa {o1bop no pacupeuuk auna} Cap hpeynpeeuun ob oubxax C1ass::5fucf Coaauue c1pyx1ypuux 1unoa auuux, noobuux auuuu nauxa C Conf1g uopuaun o xouurypauu Pe1 CWd hy1u, coo1ae1c1ayk|uu 1exy|euy {paboueuy} xa1anory D8I11e Onepauu c baaauu auuux D8M opua1a 8ek1ey D8 Deve1::5e1f5fubbe Coaauue aarnyex nn uoyneu c peuuou aa1oaarpyaxu D1hand1e e1ou pabo1u c ecxpun1opauu xa1anoroa DynaLoade 3arpyaxa bubnuo1ex nauxa C Lng11sh cnonuaoaauue aurnuucxux uueu nn cneuanuuux nepeueuuux Pe1 Lnv oc1yn x auaueuunu nepeueuuux cpeu Lxpofe e1o uunop1upoaauun uoyneu, ucnonuayeuuu no yuonuauuk Lxfuf11s::Lmbed 8uepeuue Pe1 a npunoeuun, uanucauuue ua C/C++ Lxfuf11s::1nsfa11 xc1auoaxa aunoa Lxfuf11s::L1b11sf honyueuue bubnuo1ex nn ux ucnonuaoaauun Lxfuf11s::MMO52 3aueua noaeeuun uoynn Lxfuf11s::MakeMake, 1unuuuoro nn un1x, ua no- aeeuue, 1unuuuoe nn O5/2 Lxfuf11s::MMun1x xc1auaanuaae1 noaeeuue uoynn Lxfuf11s::MakeMake, 1unuuuoe nn un1x Lxfuf11s::MMvM5 3aueua noaeeuun uoynn Lxfuf11s::MakeMake, 1unuuuoro nn un1x, ua no- aeeuue, 1unuuuoe nn vM5 Lxfuf11s::MakeMake Coaauue pacupeuuoro makef11e Lxfuf11s::Man1fesf 3anucu auna c onucauueu naxe1a Lxfuf11s::Mkboofsfap Coaauue auna aa1oaarpyaxu, ucnonuayeuoro uoyneu DynaLoade Lxfuf11s::Mksym11sfs 3anucu auna c napaue1pauu pabo1u nn peax1opa canaeu Crp.238 Lxfuf11s::fesf11b obaanne1 xa1anoru x nepeueuuou 0 00 0l ll lNC NC NC NC Iafa1 Oubxu cuu1ak1cn xpu1uuecxuuu Icnf1 3arpyaxa aaronoaouuoro auna nauxa C Icnf1 Icnf1 Icnf1 Icnf1. .. .h hh h, coepa|ero cuuaonuuecxue uueua nn xouc1au1, ucnonuayeuux yuxunuu Pe1 I11e::8asename Cuu1axcuuecxuu paabop nonuoro uueuu auna I11e::Check1ee 1ec1upoaauue aunoa no nonuouy epeay xa1anoroa I11e::Compae Cpaaueuue aunoa I11e::Copy onupoaauue aunoa I11e::I1nd houcx aunoa no nonuouy epeay xa1anoroa I11e::Pafh Coaauue u yaneuue xa1anoroa I11e::sfaf u1epeuc nn yuxuu sfaf{} I11eCache hoaaonne1 ouoapeueuuo o1xpu1u bonue aunoa I11ehand1e e1ou nn pabo1u c ecxpun1opauu aunoa I1nd81n houcx xa1anora, re uaxou1cn ceuapuu Pe1 GD8MI11e yuxuu u xnaccu nn pabo1u c baaauu auuux D8M {bubnuo1exa GD8M} Gefopf::Long Obpabo1xa napaue1poa xouauuou c1poxu Gefopf::5fd Obpabo1xa ouobyxaeuuux napaue1poa xouauuou c1poxu l1N::Co11afe Cpaaueuue -bu1uux cxannpuux auuux a coo1ae1c1auu c uauouanuuuuu c1au- ap1auu lO 3arpyaxa uoyneu aaoa/auaoa lO::I11e e1ou nn pabo1u c ecxpun1opauu aunoa lO::hand1e e1ou nn pabo1u c ecxpun1opauu aaoa/auaoa lO::P1pe e1ou nn pabo1u c xauanauu lO::5eekab1e e1ou nn pabo1u c obex1auu aaoa/auaoa lO::5e1ecf 8ubop cuc1euuux auaoaoa lO::5ockef Obueu auuuuu uepea coxe1u lPC::Open2 O1xpuaae1 npoecc ua u1euue u aanucu {ouoapeueuuo} lPC::Open3 O1xpuaae1 npoecc ua u1euue, aanucu u obpabo1xy oubox {ouoapeueuuo} Mafh::81gI1oaf Coaauue uucen c nnaaak|eu 1ouxou npouaaonuuou nuuu Mafh::81g1nf Coaauue enux uucen npouaaonuuou nuuu Mafh::Comp1ex abo1a c xounnexcuuuu uucnauu Mafh::11g u1epeuc Mafh::Comp1ex nn 1purououe1puuecxux yuxuu ND8MI11e yuxuu u xnaccu nn pabo1u c baaauu auuux D8M {bubnuo1exa ND8M} Nef::P1ng O1npaaxa lCMP-naxe1oa ua yaneuuuu xounuk1ep Nef::hosfenf u1epeuc x yuxunu gefhosf gefhosf gefhosf gefhosf" "" " Nef::nefenf u1epeuc x yuxunu gefnef gefnef gefnef gefnef" "" " Nef::pofenf u1epeuc x yuxunu gefpofo gefpofo gefpofo gefpofo" "" " Nef::sevenf u1epeuc x yuxunu gefsev gefsev gefsev gefsev" "" " Opcode 3anpe|ae1 uueuoaauuue nceaoxou Pod::1exf hpeobpaaye1 oxyueu1auk a opua1e POD {P1a1n O1d Documenfaf1on} a op- ua1upoaauuuu 1exc1 A5Cll PO5l u1epeuc x yuxunu PO5l {c1auap1 lLLL 1003.1} 5D8MI11e yuxuu u xnaccu nn pabo1u c baaauu auuux D8M {bubnuo1exa 5D8M} 5afe 8unonueuue xoa a aa|u|euuou paaene 5each::D1cf houcx xnkua a cnoaape {auanor x-1abnuu} 5e1ecf5ave Coxpaueuue u aocc1auoaneuue ecxpun1opoa aunoa 5e1fLoade 3arpyaxa yuxuu ucxnkuu1enuuo no 1peboaauuk 5he11 8unonueuue xouau xouauuou obonouxu 5ockef 3arpyaxa auna nauxa C sockef sockef sockef sockef. .. .h hh h c cuuaonuuecxuuu uueuauu nn xouc1au1, ucnonuayeuux yuxunuu obueua auuuuu uepea ce1u 5ymbo1 auunynupoaauue cuuaonauu Pe1 5ys:hosfname hoaaonne1 nonyuu1u uun xounuk1epa 5ys::5ys1og u1epeuc x auaoaau cuc1euuou yuxuu sys1og sys1og sys1og sys1og{3} {3} {3} {3} 1em::Cap u1epeuc ynpaaneuun 1epuuuanou 1em::Comp1efe u1epax1uauoe aanonueuue cnoa auuuuu 1em::keadL1ne u1epeuc nn naxe1a ead11ne 1esf::haness 8unonune1 ceuapuu Pe1 u aanucuaae1 c1a1uc1uxy 1exf::Abbev Coaae1 1abnuy coxpa|euuu 1exf::PaseWods Cuu1axcuuecxuu paabop 1exc1a 1exf::5oundex nropu1u 5oundex Crp.239 1exf::1abs 3aueune1 1abynnuu ua nocneoaa1enuuoc1u npobenoa, u uaobopo1 1exf::Wap hepeuoc nuuuux c1pox 11e::hash Onpeeneuun nn canaauuux xeu 11e::kefhash Onpeeneuun nn canaauuux xeu co ccunxauu ua xnkuu 11e::5ca1a Onpeeneuun nn canaauuux cxannpuux nepeueuuux 11e::5ubsfhash Coaae1 1abnuy uxcupoaauuoro paauepa c anropu1uou xupoaauun xnkueu, 1axe uuek|ux uxcupoaauuuu paauep 11me::Loca1 8oaapa|ae1 apeun a coo1ae1c1auu c noxanuuuuu yc1auoaxauu u no puuauu- cxouy uepuuauy 11me::gmf1me u1epeuc nn yuxuu gmf1me 11me::1oca1f1me u1epeuc nn yuxuu 1oca1f1me 11me::fm cnonuaye1cn uoynnuu 11me::gmf1me u 11me::1oca1f1me uNlvLk5AL aaoauu xnacc nn acex xnaccoa use::genf u1epeuc x yuxunu gefg gefg gefg gefg" "" " use::pWenf u1epeuc x yuxunu gefpW gefpW gefpW gefpW" "" "
Henocpepc1neuume pemeuun Ter::Cap - paofa c fepruuanor Moynt Term npenasnauen nx paort c repmnnanom. Hanpnmep, c nomomtm ]ynxnnn Tgoto moxno nepemecrnrt xypcop n nmym rouxy. B cneymmem npnmepe on nepememaercx n crpoxy 5, xononxy 0, re n ntnonrcx cnono Perl. nx +roro nam norpeymrcx ]ynxnnn ns moyne POSIX n Term (]ynxnnx moynx POSIX onpeenxer cxopocrt ntnoa na repmnnan). Hepeem x npnmepy. Cnauana cosaercx oexr $termcap, coornercrnymmn repmnnany: use PO5l use 1em $fem1os = PO5l::1em1os->neW $fem1os->gefaff $speed = $fem1os-gefospeed $femcap = 1em::Cap $femcap = 1em::Cap $femcap = 1em::Cap $femcap = 1em::Cap- -- ->1gefenf {{1em => undef, O5PLLD >1gefenf {{1em => undef, O5PLLD >1gefenf {{1em => undef, O5PLLD >1gefenf {{1em => undef, O5PLLD => => => => $speed}} $speed}} $speed}} $speed}} Tenept $termcap ncnontsyercx nx ouncrxn +xpana c nomomtm meroa Tputs n nepeme- mennx xypcopa n nyxnoe mecro c nomomtm meroa Tgoto: use PO5l use 1em Crp.240 $fem1os = PO5l::1em1os->neW $fem1os->gefaff $speed = $fem1os-gefospeed $femcap = 1em::Cap->1gefenf {{1em => undef, O5PLLO => $speed}} $femcap $femcap $femcap $femcap- -- ->1pufs{c1, 1, "51DOu1} >1pufs{c1, 1, "51DOu1} >1pufs{c1, 1, "51DOu1} >1pufs{c1, 1, "51DOu1} $femcap $femcap $femcap $femcap- -- ->1gofo{cm, 40, 5, "51DOu1} >1gofo{cm, 40, 5, "51DOu1} >1gofo{cm, 40, 5, "51DOu1} >1gofo{cm, 40, 5, "51DOu1} p1nf "Pe1\n" Hrax, mt nonyunnn, uro rpeonanoct, xypcop nonan n rouxy (5,0). Hocuasua. Jmom ceuapu ovoem paoomami mo.iro o. mep+uua.oe u.u o+v.mopoe mep+uua.oe, noo- oeprueamuux vnpae.muue escape-noc.eooeame.iuocmu. . orou DOS, paoomamuux noo vnpae.euue+ Windows, ou paoomami ue ovoem. Math - kornnekcuue ucna u ucna onuuo paspnpuocfu Moynt Math cnyxnr nx ntnonnennx maremarnuecxnx onepann c xomnnexcntmn unc- namn nnn uncnamn c ontmnm uncnom paspxon. B cneymmem npnmepe cosamrcx na xomnnexcntx uncna (ro ecrt uncna, cocroxmnx ns nemecrnenno n mnnmo uacrn), sarem onn cxnatnamrcx, a pesyntrar ntnonrcx na +xpan: use Mafh::Comp1ex $opeand1 = Mafh::Comp1ex->neW{1, 2} $opeand2 = Mafh::Comp1ex->neW{3, 4} $sum = $opeand1 + $opeand2 p1nf "5um = $sum\n" 5um = 4"61 A nor xax ncnontsyercx naxer BigInt, nosnonxmmn paorart c ontmnmn nentmn uncna- mn (naxer BigFloat, nosnonxmmn paorart c ontmnmn uncnamn c nnanamme rouxo, raxxe cymecrnyer). B cneymmem npnmepe cxnatnamrcx na ontmnx nentx uncna: use Mafh::81glnf $1nf1 = 1234567912345679 $1nf2 = 9765432197654321 p1nf "5um of 1nfeges = ", $1nf1 + $1nf2, "\n" 5um of 1nfeges = 1.11111111111111111ex1 Hocxontxy Perl ne paoraer c ontmnmn uncnamn nanpxmym, on npeopasyer nx n uncna c nnanamme rouxo. Bor xax nonyunrt pacneuarxy pesyntrara n ]opmare nenoro uncna: use Mafh::81glnf $b1nf1 = Mafh::81glnf->neW{1234567912345679} $b1nf2 = Mafh::81glnf->neW{9765432197654321} p1nf "5um of 1nfeges = ", $b1nf1->badd{$b1nf2}, "\n" 5um of 1nfeges = 1111111111111111110 POS - qyukuuu Portable Operating Syste nterace Kax mt yxe snaem ns npetymnx rnan, Haoparopnx xomntmrepntx cncrem Hannonant- noro nncrnryra cranapron n rexnonorn (the National Institute oI Standards and Technol- ogy Computer Systems Laboratory - NIST/CSL) n copyxecrne c pyrnmn oprannsannxmn cosana cranapr POSIX - Portable Operating System InterIace. POSIX - +ro ontmax n- nnorexa cranaprnsnponanntx C-noontx ]ynxnn, noxptnammne cranaprnte no- rpenocrn nporpammnponannx. Moynt Perl POSIX oecneunnaer ocryn nourn xo ncem ]ynxnnxm, cranaprnsnponanntm n Crp.241 POSIX nepcnn 1003.1. Moynt POSIX noxnmuaercx x nporpamme xomano use: use PO5l # obaau1u ack bubnuo1exy use PO5l yuxun # obaau1u ouy yuxuk use PO5l qW{yu1 yu2} # obaau1u uecxonuxo yuxuu (Hcenoxantuxn qw/.../ (cm. ran. 2.3 n rnane 2), ncnontsonannte n rpertem napnanre, xn- nxmrcx camtm npocrtm cnocoom cosart cnncox ns crpox-nmen ]ynxnn, saxnmuenntx n xantuxn.) Hanpnmep, nor rax ncnontsyercx ]ynxnnx strftime moynx POSIX, ]opmarnpymmax ary: use PO5l sfff1me use PO5l sfff1me use PO5l sfff1me use PO5l sfff1me p1nf sfff1me "hees fhe dafe: xd/xm/x\n", 1oca1f1me hees fhe dafe: 30/10/1999 Ecnn nt eme ne snaere, xaxne ]ynxnnn coepxarcx n moyne POSIX, nmeer cmtcn norpa- rnrt nexoropoe npemx, urot osnaxomnrtcx c nnmn. Bo mnornx cnyuaxx onn axe menee nnar]opmosanncnmt, uem cam Perl. Benchark - fecfupoeauue npouseopufenuuocfu Moynt Benchmark moxer cnyxnrt nx onpeenennx nponsnonrentnocrn nporpammt, no- ono cexynomepy, nxnmuaemomy npn crapre nporpammt n ntxnmuaemomy npn ee oxonua- nnn. (B mnorosaauntx cncremax n nrpy nnora ncrynamr nocroponnne ]axropt, nanpnmep ro, xax nnannponmnx ornecercx x nporpamme. B pesyntrare nsmepennoe npemx moxer oxa- sartcx ontme ncrnnnoro npemenn ee paort.) B cneymmem npnmepe c nomomtm oexron moynx Benchmark nsmepxercx, cxontxo npemenn sannmaer mnnnnon nrepann nnxna: use 8enchmak $f1mesfamp1 = neW 8enchmak fo {$1oop1ndex= 0 $1oop1ndex < 1000000 $1oop1ndex++} { $va1ab1e1 = 1 } $f1mesfamp2 = neW 8enchmak $f1med1ffeence = f1med1ff{$f1mesfamp2, $f1mesfamp1} p1nf "1he 1oop fook ", f1mesf{$f1med1ffeence} 1he 1oop fook 5 Wa11c1ock sees { 5.65 us x 0.00 sys = 5.65 CPu} Tie - usrepeuue epereuu u npeopasoeauue qoprafoe epereuu Moynt Time nosnonxer npeopasontnart noxantnoe npemx nnn npemx no Ipnnnnucxomy mepnnany n cexynt, orcunrtnaemte or nacrynnennx +noxn (nx Unix n ontmnncrna pyrnx onepannonntx cncrem nauano +noxn orcunrtnaercx or 01.01.1970). Hanpnmep, n cneymmem ]parmenre xoa c nomomtm nomoynx Tim::Local ntuncnxercx xonnuecrno cexyn or 01.01.1970 o 01.01.2000: use 11me::Loca1 p1nf f1me1oca1{0, 0, 0, 1, 1, 2000} 94931200 Carp - cooeuun o ouukax c ykasauuer foku eusoea Komant warn n die coomamr rontxo o rexymem mecre nosnnxnonennx omnxn- Komant moynx Carp oprannsonant rax, uro n coomennn o omnxe yxastnaercx rouxa Crp.242 ntsona ]ynxnnn. Tem camtm cosannte c nx nomomtm moynn yyr necrn cex xax ncrpoennte ]ynxnnn, coomax o omnxe nontsonarenx, ntsnanmero nonporpammy c nenepntmn napamerpamn, a ne o omnxe cosanmero ee nporpammncra. pyrnmn cno- namn, nporpammncrt, ncnontsymmne nanncannte namn moynn, yyr nnert ne nomep crpouxn nnyrpn name nonporpammt, a nomep crpouxn n cnoem ncxonom xoe, uro o- nee naxno nx nx paort. Bor npnmep ncnontsonannx xoman ns moynx Carp: use Cap cap "1h1s 1s a Wan1ng!" coak "1h1s 1s an eo!" confess "5o 1ong!" (Hepnax xomana ntnonr npeynpexammee coomenne n npoonxaer ntnonnenne xo- a. Bropax xomana ntnonr coomenne o omnxe n npexpamaer ntnonnenne nporpam- mt. Tpertx neuaraer coomenne o omnxe n crex ntsonon ]ynxnn, nocne uero npexpa- maer ntnonnenne nporpammt.) locale -- ucnonusoeauue nokanuuux uacfpoek kornukfepa Moynt locale +ro na camom ene nparma, xoropax paspemaer uyncrnnrentntm x no- xantntm nacrpoxam nonporpammam ns moynx POSIX 1 ncnontsonart +ry nn]opmannm. Hparma nnnxer na raxne momenrt, xax ntop rouxn nnn sanxro npn ntnoe uncen c nna- namme rouxo, cranaprnt ]opmar art n r. . urot orxnmunrt nnnxnne noxantntx nacrpoex, ncnontsyre xomany no locale. B cneymmem npnmepe maccnn coprnpyercx n coornercrnnn c noxantntmn nacrpoxamn: use 1oca1e 0sofed = sof 0unsofed File - onepauuu c qanaru Moynt File oecneunnaer noepxxy paort c ]anamn. Hanpnmep, nomoynt File::Copy coepxnr ne orcyrcrnymmne n cranaprno nnnorexe Perl ]ynxnnn: copy (nx xonnponannx ]anon) n move (nx nepememennx ]ana n nont xaranor). B cne- ymmem npnmepe ]an Iile.txt xonnpyercx n Iile2.txt, a ror nepememaercx n xaranor, pac- nonoxennt na yponent ntme rexymero: use I11e::Copy copy { copy { copy { copy {"f11e.fxf", "f11e2.fxf"} "f11e.fxf", "f11e2.fxf"} "f11e.fxf", "f11e2.fxf"} "f11e.fxf", "f11e2.fxf"} move move move move {" {" {" {"f11e f11e f11e f11e2. 2. 2. 2.fxf fxf fxf fxf", ".."} ", ".."} ", ".."} ", ".."} Net - pocfyn k cefu Hufepuef Moynt Net coepxnr nonporpammt nx paort c certm n yanenntmn xomntmrepamn. B cneymmem npnmepe moynt Net::Ping ncnontsyercx nx nponepxn coennennx c ya- nenntm xomntmrepom. Cnauana cosaercx oexr pingobect, xoropt meroom ping y-
1 Ha camom ene, .moi+ nonporpammam n ]ynxnnxm Perl, uyncrnnrentntm x noxantntm nacrpoxam (n uacrnocrn, +ro orno- cnrcx x onepannxm coprnponxn, perynxpntm ntpaxennxm n r. .). B Windows noxantnte nacrpoxn saamrcx c nomomtm ]ynxnnn setlocale. B Unix noxant otuno ycranannnnaercx na cncremnom yponne, no moxno saart ee n n nporpamme. Hpu- +e:. peo.
Crp.243 er ornpannxrt recronte naxert yxasannomy xomntmrepy Hpn +rom moxno ncnontsonart pasnnunte nporoxont, nanpnmep TCP, ICMP nnn UDP. Btson meroa new, cosammero oexr, nmeer ]opmar: $p1ngobecf = NeW::P1ng->neW{|npo1oxon |, apeun-ouauun |, uucno-bau1oa]]]} Bce napamerpt xnnxmrcx neoxsarentntmn: nporoxon moxer npnnnmart snauennx tcp, udp nnn icmp (no ymonuannm ncnont- syercx udp); npemx oxnannx saaercx n cexynax; uncno-ar saaer pasmep naxera, noctnaemoro yanennomy xomntmrepy (maxcnmym panen 102). Btson meroa, ntnonnxmmero ornpanxy naxera yanennomy xomntmrepy, nmeer neoxsa- rentnt napamerp, saammn npemx oxnannx ornera: $p1ngobecf->p1ng{uun-xounuk1epa |, apeun-ouauun]} Ho oxonuannn paort oexr saxptnaercx c nomomtm meroa close. cneymmem npn- mepe emoncrpnpymrcx nosmoxnocrn moynx Net::Ping: use Nef::P1ng $p1ngobecf = Nef::P1ng->neW{1cmp} 1f {$p1ngobecf->p1ng{youseve.com}} { p1nf "Cou1d each hosf." } $p1ngobecf->c1ose{} Cou1d each hosf. Sae - esonacuoe eunonueuue kopa Moynt SaIe nosnonxer ntnonnxrt xo n esonacnom pexnme sa cuer cosannx ocooro pasena, ]ynxnnonnpymmero nesanncnmo or ocrantno uacrn nporpammt. Bt moxere yxasart, xaxne ]ynxnnn paspemeno ntstnart n +rom pasene, c nomomtm meroa permit. Hocxontxy n name npemx cexpernocrn yenxercx ontmoe nnnmanne, moynt SaIe nectma paspoccx n nxnmuaer mnoxecrno ncrpoenntx meroon. B cneymmem npnmepe mt cosaem nont pasen nx ntnonnennx xoa, paspemaem ncnontsonart n nem xomany print, a sa- rem ntnonnnm nexoropt xo, ncnontsyx mero reval moynx SaIe: use 5afe $safecompafmenf = neW 5afe $safecompafmenf->pem1f{p1nf} $esu1f = $safecompafmenf->eva1{"p1nf \"he11o!\""} he11o! Tk - cpepcfea paofu c unuofeko Tk Bsanmoecrnne mexy nnrepnperaropom Perl n rpa]nuecxo nnnorexo Tk xnnxercx ouent nonynxpno remo, no+romy n name xnnre mt noxaxem necxontxo npnmepon roro, xax ]ynxnnn Tk ntstnamrcx ns Perl. Ecnn nt nmeere ontr paort c Tcl/Tk, ontmax uacrt xoa npnnonmtx npnmepon yer nx nac ouennno. (Ecnn ner, ro oxymenrannx Perl/Tk nomoxer nam pasopartcx.) Fasont nponecc ouent npocr: moynt Tk noxnmua- ercx c nomomtm xomant use Tk, cosaercx rnannoe oxno, sarem cosamrcx n ynaxont- namrcx n nne oexron neoxonmte nnrep]ecnte +nemenrt Tk. Hpn nx cosannn yxa- Crp.244 stnamrcx neoxonmte napamerpt. Hocne nnnnnannsannn +nemenron ntstnaercx ]ynx- nnx Mainoop. Ona nepeaer xonrpont na nnrep]ecntmn oexramn moynm Tk. B pe- syntrare noxnnxercx oxno c nnrep]ecntmn +nemenramn. B necxontxnx nocneymmnx pasenax yyr npnneent npnmept paort c moynem Tk. urot pasopartcx c nnmn, unrarenm norpeyercx nexoropt ontr nporpammnponannx nnnorexn Tk. Tk: kuonku u fekcfoeue uufepqecuue snereufu Haunem paccmorpenne npnmepon ncnontsonannx ]ynxnn Tk n Perl c nporpammt, xoropax cosaer oxno n nomemaer n nero xnonxy n rexcront +nemenr. Kora nt menxaere no xnonxe, nporpamma ntnonr rexcr Hello! n rexcronom +nemenre. Pesyntrar noxasan na pnc. 13.1. use 1k $fopW1ndoW = Ma1nW1ndoW->neW{} $fopW1ndoW->Labe1{-fexf => 8uffon and fexf W1dgef examp1e}->pack{} $fopW1ndoW->8uffon{-fexf => "C11ck Me!", -command => \d1sp1ay }->pack{-s1de => "1eff"} $fexf1 = $fopW1ndoW->1exf{-W1dfh => 40, -he1ghf => 2}->pack{} $fexf1->b1nd{<Doub1e-1>, \d1sp1ay} sub d1sp1ay { $fexf1->1nsef{end, "he11o!"} } Ma1nLoop uc. 13.1. uc. 13.1. uc. 13.1. uc. 13.1. O1obpaeuue xuonxu 1k u 1exc1oaoro neueu1a Tk: kuonku c saeucuro u uesaeucuro qukcauue annt npnmep noxastnaer, xax ntnecrn xnonxn c sanncnmo (radiobuttons) nesanncnmo (checkbuttons) ]nxcanne, a raxxe onpeennrt, xaxne nmenno xnonxn ntpant nontsona- renem. Pesyntrar noxasan na pnc. 13.2. use 1k $fopW1ndoW = Ma1nW1ndoW->neW{} $fopW1ndoW->Labe1{-fexf => kad1o- and checkbuffon W1dgef examp1e }->pack{} $fopW1ndoW->kad1obuffon{-fexf => "kad1o 1", -va1ue => "1", -command => sub { $fexf1->de1efe{1.0, end} $fexf1->1nsef{end, "ou c11cked ad1o 1"} } }->pack{} $fopW1ndoW->kad1obuffon{-fexf => "kad1o 2", -va1ue => "0", -command => sub { $fexf1->de1efe{1.0, end } $fexf1->1nsef{end, "ou c11cked ad1o 2"} } }->pack{} $fopW1ndoW->Checkbuffon{-fexf => "Check 1", -command => sub { $fexf1->de1efe{1.0, end} $fexf1->1nsef{end, "ou c11cked check 1"} } }->pack{} $fopW1ndoW->Checkbuffon{-fexf => "Check 2", -command => sub { $fexf1->de1efe{1.0 , end} $fexf1->1nsef{end, "ou c11cked check 2"} } }->pack{} $fexf1 = $fopW1ndoW->1exf{-W1dfh => 40, -he1ghf => 2}->pack{} Ma1nLoop
uc. 13.2. uc. 13.2. uc. 13.2. uc. 13.2. uonxu c aaaucuuou uxcaueu u xuonxu c ueaaaucuuou uxcaueu bubnuo1exu 1k Crp.245 Tk:uufepqecuu snereuf cnucok B +rom npnmepe ntnonrcx cnncox. Kora nontsonarent ntnpaer +nemenr cnncxa naxt no nemy menxnyn, ero ntop oropaxaercx n rexcronom +nemenre. Pesyntrar noxasan na pnc. 13.3. use 1k $fopW1ndoW = Ma1nW1ndoW->neW{} $fopW1ndoW->Labe1{-fexf => L1sfbox W1dgef examp1e }->pack{} $11sfbox1 = $fopW1ndoW->L1sfbox{"-W1dfh" => 25, "-he1ghf" => 5 }->pack{} $11sfbox1->1nsef{end, "App1es", "8ananas", "Oanges", "Peas", "P1neapp1es"} $11sfbox1->b1nd{<Doub1e-1>. \geffu1f} $fexf1 = $fopW1ndoW->1exf{"-W1dfh" => 40, "-he1ghf" => 2 }->pack{} sub geffu1f { $fu1f = $11sfbox1->gef{acf1ve} $fexf1->1nsef{end, "$fu1f"} } Ma1nLoop
package C1ass3 Crp.308 use C1ass1 use C1ass2 0l5A = qW/C1ass1 C1ass2/ sub 1n1f { my $se1f = sh1ff C1ass2::1n1f{$se1f, 0} C1ass2::1n1f{$se1f, 0} C1ass2::1n1f{$se1f, 0} C1ass2::1n1f{$se1f, 0} C1ass1::1n1f{$se1f, 0} C1ass1::1n1f{$se1f, 0} C1ass1::1n1f{$se1f, 0} C1ass1::1n1f{$se1f, 0} $se1f->{C1assName} = Cad8ox efun $se1f } efun 1 ecfpykfopu Ecnn oexr yanxercx ns namxrn cncremo anromarnuecxo copxn mycopa, ntstnaercx ecrpyxrop oexra (ecnn on cymecrnyer). B xauecrne napamerpa Perl nepeaer ecrpyx- ropy ynnuroxaemt oexr, n +ror napamerp ne onxen menxrtcx n pesyntrare ero pao- rt. Hntmn cnonamn, nentsx nsmenxrt snauenne nepnoro +nemenra maccnna _ (ro ecrt snauenne $_0]) nnyrpn ecrpyxropa, onaxo cam oexr, na xoropt cctnaercx snauenne $_0], menxrt +oruo. Hanpnmep, ecnn nt nonropno cnxxere oexr n xnacc c nomomtm ]ynxnnn bless, ro nmecro ynnuroxennx oexra cncrema anromarnuecxo copxn mycopa ntsoner ecrpyxrop nonropno (ecnn, xoneuno, oexr no-npexnemy nonexnr ynnuroxe- nnm, nt moxere cnacrn ero, npncnonn oexr-cctnxy rnoantno nepemenno): package C1ass0 my $counfe = 0 sub neW { my $se1f = { } b1ess $se1f efun $se1f } sub DL51kO { my se1f = $|0] 1f {$counfe++ < 4} { b1ess $se1f b1ess $se1f b1ess $se1f b1ess $se1f p1nf l am a11ve {$counfe}...\n } e1se { p1nf 1hafs 1f!\n } } efun 1
use C1ass0 $obecf = C1ass0->neW{} ex1f # ace obex1u byy1 yuuu1oeuu l am a11ve {1}.,. l am a11ve {2}... l am a11ve {3}... 1hafs 1f! ecrpyxropt Perl ne oecneunnamr anromarnuecxoro npoxoa no epeny nacneonannx, a nmenno, axe ecnn y ponrentcxnx xnaccon namero oexra cymecrnymr ecrpyxropt, onn ne yyr ntstnartcx. Ecnn nt xornre, urot npn ntsone ecrpyxropa nponcxonn ntson ncex ecrpyxropon ponrentcxnx xnaccon, nt onxnt cenart +ro camn. B ornnune or ecrpyxropon naxera END, ecrpyxropt oexron DEST +oevm ntstnart- cx nontsonarenem n xnnom nne. Hopxox ntsonon ecrpyxropon saaercx camnm nontsonare- nem n ne oxsan cneonart nopxxy, n xoropom nnnnnannsnpymrcx nonx oexra. Hpnmep: Crp.309 package C1ass0 # baaoauu xnacc sub neW { my $se1f = { } b1ess $se1f efun $se1f } sub DL51kO { my $se1f = $|0] p1nf C1ass0\n } efun 1
package C1ass3 use C1ass1 use C1ass2 0l5A = qW/C1ass1 C1ass2/ sub DL51kO { my $se1f = $|0] p1nf C1ass3\n C1ass2::DL51kO{$se1f} C1ass2::DL51kO{$se1f} C1ass2::DL51kO{$se1f} C1ass2::DL51kO{$se1f} C1ass1::DL51kO{$se1f} } C1ass1::DL51kO{$se1f} } C1ass1::DL51kO{$se1f} } C1ass1::DL51kO{$se1f} } efun 1
use C1ass3 $obecf = C1ass3->neW{} $obecf = 0 # ccunxa ua obex1 no1epnua, obex1 bye1 yuuu1oeu p1nf 1hafs a11!\n C1ass3 C1ass2 C1ass0 C1ass1 C1ass0 1hafs a11! Hukancynnuun erecfo uacnepoeauun Ecnn nt ncnontsyere mnoxecrnennoe nacneonanne, ne ncxnmueno, uro nt mo-r samennrt ero mnoxecrnenno uurancv.ue. A nmenno, nmecro roro urot nacneonart or pon- rentcxnx xnaccon, nt pasmemaere oexrt ponrentcxnx xnaccon n xauecrne none an- ntx namero oexra. B raxom cnyuae nt coxpanxere nonnt xonrpont na ncemn nonxmn anntx n ncemn ponrentcxnmn meroamn nesanncnmo or roro, nepexptnamrcx nx nmena Crp.310 nnn ner n n xaxom nopxxe ponrentcxne xnacct nepeuncnxmrcx n cnncxe nacneonannx. B xauecrne nnart, onaxo, nt repxere nosmoxnocrt nacneonannx or ponrentcxnx xnac- con. Hanpnmep, ecnn nt xornre ntsnart xaxo-nno mero ponrentcxoro xnacca ro onx- nt nanncart orentnym nonporpammy (mero), n xoropo ntstnaere nyxnt nam mero nx oexra, xnnxmmerocx onnm ns none anntx nnxancynnpymmero oexra. Censueauue nepereuuux Perl nosnonxer npnnxstnart nepemennte x xnaccam, n pesyntrare uero nsmenenne coep- xnmoro nepemenno conponoxaercx ntsonom meroon xnacca. 3ra nosmoxnocrt nnepnte noxnnnact n Perl nepcnn 5 n orcyrcrnonana n pannnx nepcnxx (panno xax n camn xnacct nmecre c oexrno-opnenrnponanntm noxoom). urot cnxsart nepemennym n xnacc, ncnontsyercx ]ynxnnx tie: f1e nepeueuuan, uun-xnacca, cnucox Hepntm napamerpom xnnxercx cnxstnaemax nepemennax. B xauecrne nroporo yxastnaercx nmx xnacca (rexcronax crpoxa), xoropt coepxnr merot, oecneunnammne ocryn x ne- pemenno. B xauecrne rpertero (neoxsarentnoro) napamerpa ner cnncox snauenn, xo- ropt moxno nepeart nonporpamme, npenpamamme nepemennym n oexr coornercr- nymmero xnacca (cm. nnxe), xax ononnnrentnte napamerpt. Hocne roro xax nepemennax n xnacc cnxsant (nx +roro xnacc onxen coornercrnonart on- peenenntm rpeonannxm cm. cneymmne pasent), n eno ncrynaer marnx: npn no- ntrxe npounrart snauenne nepemenno nnn npncnonrt e nonoe snauenne, cxptrtm or nontsonarenx cnocoom ntstnamrcx coornercrnymmne merot xnacca. Onn ntstnamrcx nexnno, noono xoncrpyxropam n ecrpyxropam naxeron BEGIN n END. Coornercrnen- no, merot nmemr ]nxcnponannte nmena, cocrannennte ns sarnanntx yxn, n ne onxnt ncnontsonartcx nanpxmym. uynxnnx tie nosnpamaer n xauecrne snauennx oexr, ro ecrt cctnxy, nomeuennym (c no- momtm ]ynxnnn bless), xax oexr coornercrnymmero xnacca. nx cosannx raxoro o- exra ncnontsyercx onn ns cnennantntx meroon xnacca TIESAA, TIEAA nnn TIEHASH (n sanncnmocrn or rnna nepemenno). Paora +rnx meroon paccmarpnna- ercx nnxe n coornercrnymmnx pasenax. Heoxonmo nouepxnyrt, uro oexr ne rontxo moxer, no, cxopee ncero, n onxen trt nesanncnmtm or cnxstnaemo nepemenno, ro ecrt ne nao n xauecrne oexra nosnpa- mart cctnxy na cnxstnaemym nepemennym. Hpn ncex antnemnx onepannxx co cnxsan- no nepemenno yer ncnontsonartcx nmenno cosannt namn oexr, a raxxe annte, coxpanennte n oexre, a nonce ne cnxsannax c xnaccom nepemennax. Ho+romy nao nosa- ornrtcx, urot n momenr cnxstnannx xnacca n nepemenno annte nnyrpn nopoxaemo- ro npn +rom oexra tnn nponnnnnannsnponant coornercrnymmnm opasom, urot cnn- xponnsnponart snauenne nepemenno n annte, coepxamnecx nnyrpn oexra. Bt moxere coxpannrt oexr, nosnpamaemt ]ynxnne tie, urot nanpxmym ntstnart merot xnacca, no no ontme uacrn +roro enart ne npnxonrcx, nexnno ntstnaemte merot xnacca, xax npannno, camn ntnonnxmr nce neoxonmte onepannn. Ecnn nt sa- tnn sanomnnrt cctnxy-oexr n momenr ntsona tie, ro ncera moxere ee nonyunrt no- nropno c nomomtm ]ynxnnn tied, y xoropo nxontm napamerpom xnnxercx cnxsannax ne- pemennax, a ntxontm pesyntrarom oexr-cctnxa: Crp.311 $obex1 = f1ed nepeueuuan Ecnn aprymenr ]ynxnnn tied ne xnnxercx cnxsanno nepemenno, nosnpamaercx neonpee- nennoe snauenne, ro ecrt c rouxn spennx nornxn Perl, snauenne .ori. Haxonen, nt moxere paspymnrt cnxst nepemenno n xnacca, ntsnan ]ynxnnm untie: unf1e nepeueuuan Fyer nn n pesyntrare paort ]ynxnnn untie paspymen oexr, cnxsannt c nepemenno, sanncnr or roro, coxpannnact nn re-nno na nero cctnxa. Ecnn ner, ncrynaer n ecrnne cncrema anromarnuecxoro copa mycopa. Ecnn n xaxo-ro nepemenno ocranoct snauenne oexra-cctnxn, on npoonxnr cnoe cymecrnonanne, no cnxst mexy nnm n nepemenno yer paspymena, ro ecrt npn urennn nnn sanncn snauenn nepemenno merot oexra ontme ne yyr ntstnartcx. Hocuasua. Hoo+oov.u +oov. Tie (a u+euuo, naremi Tie..Scalar, Tie..StdScalar, Tie..Arrav, Tie..StdArrav, Tie..Hash, Tie..StdHash, Tie..efHash, Tie..SubstrHash u Tie..Handle) +oruo ucno.isoeami rar oasoeie r.acci npu cosoauuu r.accoe, cesieae+ix c nepe+euui+u moeo u.u uuoeo muna. Censueauue ckannpuux nepereuuux Ecnn cnxsart cxanxpnym nepemennym n xnacc, ro, n uacrnocrn, snauennx, coxpanxemte n nepemenno, moryr xoppexrnponartcx meroamn xnacca xax npn ncnontsonannn rexymero snauennx nepemenno, rax n npn npncnoennn e nonoro snauennx. Hanpnmep, moxno cos- art xnacc Doubler, cnxsannt co cxanxpno nepemenno raxnm opasom, uro npn urennn snauennx nepemenno yer nosnpamartcx ynoennax (no cpannennm c ncrnnntm snaue- nnem) nennunna, a npn sanncn nporpamma yer nponepxrt, nonoxnrentno nn +ro snaue- nne. Cosannem raxoro xnacca mt n samemcx. urot cnxsart cxanxpnym nepemennym n xnacc, nocnenn onxen coepxart cne- nnantnte merot c ]nxcnponanntmn nmenamn n aprymenramn: 1lL5CALAk xnacc, cnucox-auaueuuu IL1Ch ccunxa 51OkL ccunxa, auaueuue DL51kO ccunxa Mero TIESAA cnxstnaer xnacc n cxanxpnym nepemennym. Hepntm napamerpom ntcrynaer nmx xnacca, cneom ner cnncox ononnnrentntx snauenn (nosmoxno, orcyr- crnymmn), xoropt nontsonarent xouer nepeart nponeype cnxstnannx. On ntstnaer- cx ]ynxnne tie onocpeonano, n no+romy n uncno ero napamerpon ne nxonr nepemennax, xoropym cnxstnamr c xnaccom. Mero onxen nosnpamart oexr xnacca a nmenno, cctnxy, cnxsannym c xnaccom c nomomtm ]ynxnnn bless. 3ror oexr yer ncnontso- nartcx npn ncex onepannxx co cnxsanno nepemenno. (Kax cneyer ns npnnonmoro nnxe npnmepa, oexr xnnxercx nesanncnmtm or nepemenno n moxer ornnuartcx or cctnxn na cnxsannym nepemennym.) Mero FETH ntstnaercx npn nontrxe npounrart snauenne nepemenno. B xauecrne napamerpa emy nepeaercx oexr, cnxsannt c nepemenno. B xauecrne snauennx onxen nosnpamartcx pesyntrar urennx nepemenno (nosmoxno, orxoppexrnponannt). Mero STE ntstnaercx npn nontrxe npncnonrt nepemenno nonoe snauenne. B xauecrne nepnoro napamerpa emy nepeaercx oexr, cnxsannt c nepemenno. Broptm napamerpom xnnxercx snauenne, xoropoe nontsonarent xouer npncnonrt nepemenno. Honesno, ecnn n xa- Crp.312 uecrne pesyntrara mero nosnpamaer snauenne, xoropoe (nosmoxno) tno t nonyueno npn nocneymmem urennn coepxnmoro nepemenno. Mero DEST ntstnaercx n cnyuaxx, xora cxanxpnax nepemennax, cnxsannax c xnaccom, ynnuroxaercx nponeypo anromarnuecxo copxn mycopa (nanpnmep, n pesyntrare ntxoa sa npeent onacrn nnnmocrn nepemenno). B xauecrne napamerpa nepeaercx oexr, cnx- sannt c nepemenno. Bosnpamaemax nennunna snauennx ne nmeer. Hoono ecrpyxropam naxeron n oexron, annt mero no ontme uacrn nnuero ne ntnonnxer net n Perl ntenenne n ocnooxenne ntenenno namxrn nponcxonr anromarnuecxn. Hocuasua. Haremi Tie..Scalar u Tie..StdScalar +oruo ucno.isoeami rar oasoeie, npu cosoauuu r.accoe, cesieae+ix co cra.pa+u. Hocne nonyuenntx pasxcnenn moxno nocmorpert na peannsannm xnacca Double: package Doub1e $dafa =0 # rnobanuuan nepeueuuan naxe1a sub 1lL5CALAk { my $c1ass = sh1ff $dafa = sh1ff efun b1ess \$dafa, $c1ass } sub IL1Ch { my $se1f = sh1ff efun 2"$dafa } sub 51OkL { my $se1f = sh1ff $dafa = sh1ff 1f {$dafa < 0} { $dafa = 0 } efun 2"$dafa } sub DL51kO { } efun 1 Tenept mt onxnt cnxsart cxanxp n xnacc Doubler, nx +roro ncnontsyem ]ynxnnm tie: use Doub1e f1e $mydafa, "Doub1e" $mydafa = 5 $mydafa = 5 $mydafa = 5 $mydafa = 5 p1nf p1nf p1nf p1nf \ \\ \$dafa eva1 $dafa eva1 $dafa eva1 $dafa eva1uafes fo $m uafes fo $m uafes fo $m uafes fo $my yy ydafa dafa dafa dafa \$dafa eva1uafes fo 10 Kax n cneonano oxnart, ornpannn n nepemennym uncno 5, na ntxoe mt nonyunnn uncno 10. Ormernm, uro npnneennt ntme xo anex or onrnmantnoro - n xaxt momenr mt moxem cnxsart c xnaccom rontxo ony cxanxpnym nepemennym, nocxontxy n xauecrne xpannnnma nonx anntx oexra ntcrynaer crarnuecxax rnoantnax nepemennax. Hcnontsyx nnamnue- cxn pasmemaemte anonnmnte cxanxpt, (oparnre nnnmanne, xax mt ncnontsyem rexnonornm anrooxnnnennx cctnox), moxno nsannrtcx or yxasannoro neocrarxa: package Doub1e: sub 1lL5CALAk { my $c1ass - sh1ff my $se1f ${$se1f} = sh1ff efun b1ess $se1f, $c1ass } sub IL1Ch { my $se1f = sh1ff efun 2"${$se1f} } sub 51OkL { my $se1f = sh1ff my $femp = sh1ff 1f {$femp < 0} {$femp = 0 } Crp.313 ${$se1f} = $femp efun 2"$femp } sub DL51kO { } efun 1 Censueauue raccueoe Bt moxere cnxstnart c xnaccom ne rontxo cxanxpt, no n maccnnt. nx +roro xnacc on- xen coepxart cneymmne merot: 1lLAkkA xnacc, cnucox-auaueuuu IL1Ch ccunxa, uuexc 51OkL ccunxa, uuexc, auaueuue DL51kO ccunxa IL1Ch5lL ccunxa 51OkL5lL ccunxa, uucno Mero TIEAA cnxstnaer xnacc n nepemennym-maccnn. Hepntm napamerpom ntcry- naer nmx xnacca, cneom ner cnncox ononnnrentntx snauenn (nosmoxno, orcyrcr- nymmn), xoropt nontsonarent xouer nepeart nponeype cnxstnannx, Ecnn nontsona- rent oparnncx x ]ynxnnn tie, +ror mero ntstnaercx Perl nexnno, (no+romy n uncno ero napamerpon n ne nxonr maccnn, xoropt cnxstnaercx c xnaccom). Mero onxen nosnpa- mart oexr xnacca, a nmenno cctnxy, cnxsannym c xnaccom nocpecrnom ]ynxnnn bless. 3ror oexr yer ncnontsonartcx npn ncex onepannxx co cnxsanno nepemenno. Kax n n cnyuae cnxstnannx cxanxpon, oexr xnnxercx nesanncnmtm or nepemenno n moxer or- nnuartcx or cctnxn na cnxsannym nepemennym. Mero FETH ntstnaercx npn nontrxe npounrart snauenne +nemenra maccnna. B xauecrne nepnoro napamerpa emy nepeaercx oexr, cnxsannt c maccnnom. B xauecrne nroporo nnexc maccnna, yxasannt npn onepannn urennx. B xauecrne snauennx onxen nosnpamart- cx pesyntrar urennx +nemenra maccnna (nosmoxno, orxoppexrnponannt). Mero STE ntstnaercx npn nontrxe npncnonrt +nemenry maccnna nonoe snauenne. B xa- uecrne nepnoro napamerpa emy nepeaercx oexr, cnxsannt c maccnnom. B xauecrne nropo- ro nnexc maccnna, yxasannt npn onepannn urennx. Tpertnm napamerpom xnnxercx sna- uenne, xoropoe nontsonarent xouer npncnonrt +nemenry maccnna. Honesno, ecnn n xauecrne pesyntrara mero nosnpamaer snauenne, xoropoe (nosmoxno) tno t nonyueno npn nocne- ymmem urennn coepxnmoro +roro +nemenra maccnna. Mero DEST ntstnaercx n rex cnyuaxx, xora maccnn, cnxsannt c xnaccom, ynnuro- xaercx nponeypo anromarnuecxoro copa mycopa (nanpnmep, ns-sa ntxoa sa npeent o- nacrn nnnmocrn maccnna). B xauecrne napamerpa nepeaercx oexr, cnxsannt c maccnnom. Bosnpamaemax nennunna snauennx ne nmeer. Hoono ecrpyxropam naxeron n oexron, n ontmnncrne cnyuaen annt mero ne coepxnr xoman Perl. Mero FETHSIE nosnpamaer rexymym nnny maccnna. On ntstnaercx, xora nontsona- rent ncnontsyer xoncrpyxnnm scalar(u+-+accuea) nnn $#u+-+accuea. B xauecrne napa- merpa nepeaercx oexr, cnxsannt c maccnnom. B xauecrne snauennx mero onxen nep- nyrt uncno rexymee snauenne nnnt maccnna. Mero STESIE ycranannnnaer nonym nnny maccnna. Hanpnmep, on ntstnaercx, xora nontsonarent ncnontsyer xoncrpyxnnm nna $u+-+accueauuoerc] co snauennem nnexca, ntxoxmnm sa npeent rexyme nnnt maccnna. Onaxo on moxer ntstnartcx n nesanncn- mo. Hepntm napamerpom xnnxercx oexr, cnxsannt c maccnnom, nroptm nnna maccnna, Crp.314 xoropym nao ycranonnrt. Ecnn nonax nnna ontme rexyme, noxnnxmmnecx +nemenrt onxnt nonyunrt snauenne undef. Ecnn mentme, +nemenrt sa npeenamn nepxne rpann- nt onxnt trt yanent. Kpome nepeuncnenntx meroon xnacc moxer coepxart neoxsarentnte merot c nmenamn ETEND, SHIFT, UNSHIFT, PP, PUSH, SPIE, EA. Onn ntstnamrcx n cnyuae npn- menennx x cnxsanno nepemenno coornercrnymmnx ]ynxnn paort c maccnnamn. Onncanne ]opmara n ecrnn +rnx ]ynxnn moxno narn n oxymenrannn, conponoxamme Perl. Hocuasua. Haremi Tie..Arrav u Tie..StdArrav +oruo ucno.isoeami rar oasoeie npu cosoauuu r.accoe, cesieae+ix c +accuea+u. B :acmuocmu, ommvoa +oruo uac.eooeami +emooi EX1EAD, SHIF1, UA- SHIF1, POP, PUSH, SPLICE, CLEAR, eino.umuue oecmeu, romopie u+umupvmm paoomv c ua- cmouu+u +accuea+u, a marre uamu oorv+eumaum no qop+amv omux +emoooe. Hocne nonyuenntx pasxcnenn paccmorpnm n xauecrne npnmepa xnacc Darray xoropt y- nannaer snauennx +nemenron maccnna npn nx urennn, xorx sanomnnaer nx es ncxaxenn: package Daay sub 1lLAkkA { my $c1ass = sh1ff my $se1f = |] 0{$se1f} = 0 b1ess $se1f, $c1ass efun $se1f } sub IL1Ch { my $se1f = sh1ff my $1ndex = sh1ff efun 2"${$se1f}|$1ndex] } sub 51OkL { my $se1f = sh1ff my $1ndex = sh1ff ${$se1f}|$1ndex] = sh1ff efun 2" ${$se1f}|$1ndex] } sub IL1Ch5lL { my $se1f = sh1ff efun {$#{$se1f}+1} } sub 51OkL5lL { my $se1f = sh1ff $#{$se1f} = sh1ff {0}-1 } sub DL51kO { } efun 1 Bor pesyntrar paort namero npnmepa - nsnneuennte ns maccnna snauennx ynannamrcx: use Daay f1e 0aay, Daay, {1, 2, 3} p1nf o1n {, , 0aay} 2, 4, 6 Censueauue xsue urot cnxstnart xnacct n x+mn, xnacc onxen coepxart cneymmne merot: 1lLhA5h xnacc, cnucox-auaueuuu IL1Ch ccunxa, xnku 51OkL ccunxa, xnku, auaueuue DL51kO ccunxa DLLL1L ccunxa, xnku CLLAk ccunxa Ll515 ccunxa, xnku Crp.315 Ilk51L ccunxa NL1L ccunxa, nocneuuu-xnku 3rn merot no ontme uacrn paoramr rouno rax xe, xax n merot, onncannte n npe- tymem pasene (c yuerom sament uncnonoro nnexca na rexcronym crpoxy-xnmu). Knacc moxer raxxe coepxart ononnnrentnte (neoxsarentnte) merot, xoropte nt- stnamrcx Perl n cnyuae, xora x cnxsannomy x+my npnmenxmr coornercrnymmne cran- aprnte ]ynxnnn Perl. Honnoe onncanne ]opmara n ecrnn ncex +rnx ]ynxnn moxno narn n conponoxamme Perl oxymenrannn. Hocuasua 1. Haremi Tie..Hash u Tie..StdHash +oruo ucno.isoeami rar oasoeie npu cosoauuu r.accoe, cesieae+ix c xou-mao.ua+u. B :acmuocmu, ommvoa +oruo uac.eooeami eomoeie +emooi, eino.- umuue oecmeu, romopie u+umupvmm paoomv c uacmouu+u xou-mao.ua+u. B oorv+eumauu no na- rema+ Tie..Hash u Tie..StdHash +oruo uamu marre noopoouoe onucauue qop+ama +emoooe, ucno.i- sve+ix npu cesieauuu r.acca u xou-mao.ui, u eino.ue+ix u+u oecmeu. Hocuasua 2. Kpo+e naremoe Tie..Hash u Tie..StdHash e cocmae Perl exoom naremi Tie..efHash (uc- no.isoeauue cci.or e ra:ecmee r.m:e xou-mao.ui), Tie..SubstrHash (cesieauue r.accoe u xou-mao.u qurcupoeauuoeo pas+epa u c qurcupoeauuo o.uuo r.m:a), Tie..Handle (cesieauue oecrpunmopoe qa- .oe u r.accoe). Ec.u ei xomume pacuupumi ceo uucmpv+eumapu, ucno.isve+i npu npoepa++upoeauuu ua Perl, uacmome.iuo coeemvm c uu+u osuaro+umic. Hcnonusoeauue knacca Perl UNVERSL Bce xnacct Perl nexnno nacneymr or omero asonoro xnacca UNIVESA. (Hmx +roro xnacca nopasymenaercx Perl n xonne maccnna ISA.) Haunnax c nepcnn Perl 5.00, xnacc UNIVESA coepxnr ncrpoennte merot: isa, can, VESIN. Mero isa nponepxer, xnnxercx nn oexr oexrom xnacca, ntnonmtm (uepes nenouxy na- cneonannx) ns pyroro xnacca. C +ro nentm on ncnontsyer nenouxy nmen, naunnammymcx or maccnna ISA xnacca, x xoropomy ornocnrcx rexymn oexr. Hanpnmep, nor rax mt mo- xem nponepnrt, uro npaponrent oexra xnacca Math::omplex - xnacc UNIVESA: use Mafh::Comp1ex $comp1exnumbe = Mafh::Comp1ex->neW{1, 2} 1f {$comp1exnumbe 1f {$comp1exnumbe 1f {$comp1exnumbe 1f {$comp1exnumbe- -- ->1sa{uNlvLk5AL}} { >1sa{uNlvLk5AL}} { >1sa{uNlvLk5AL}} { >1sa{uNlvLk5AL}} { p1nf O } e1se { p1nf Nof O } O Touno rax xe moxno nponepnrt, uro Math::Complex nacneyer or xnacca Exporter (no- cxontxy Exporter nepeuncnen n maccnne ISA xnacca Math::Complex): 1f {$comp1exnumbe->1sa{Lxpofe}} { p1nf O } e1se { p1nf Nof O } O C pyro cropont, nx xnacca Math::BigFloat mt nonyunm npxmo npornnononoxnt pesyntrar: 1f {$comp1exnumbe->1sa{Mafh::81gI1oaf}} { p1nf O } e1se { p1nf Nof O } Nof O Crp.316 Oparnre nnnmanne, uro xorx mero isa n ne xnnxercx ncrpoenntm n Perl, mt nc- nontsonann ero es nmnoprnponannx n yxasannx nmenn naxera UNIERSAL n xauecrne npe]nxca (nocxontxy mero isa pacnonoxen nmenno n +rom naxere) npocro noromy, uro ynacneonann ero or xnacca UNIERSAL uepes xnacc Math::Complex. Mero isa moxer ncnontsonartcx raxxe n nx roro, urot nponepxrt, na xaxo rnn an- ntx cctnaercx cctnxa. On paoraer, n rom uncne n rora, xora rnn anntx, xoropt mt nponepxem, ne xnnxercx xnaccom: use uNlvLk5AL 1sa $ef = |1, 2, 3] 1f {1sa{$ef, "AkkA"} { p1nf O } e1se { p1nf Nof O } O Oparnre nnnmanne, uro n +rom cnyuae nam npnmnoct nmnoprnponart ]ynxnnm isa n xn- nom nne. Hocuasua. Bcmpoeuua qvuru Perl ref more +orem ucno.isoeamic o. onpeoe.euu muna oauuix, ua romopi vrasieaem cci.ra. Tar, e npeoiovue+ npu+epe ref($ref) eosepauaem cmporv AA, nora- sieamuvm, :mo cci.ra vrasieaem ua +accue. J.e+eumapui+u muna+u oauuix e.mmc E, SCA- LA, AA, HASH, CODE, GLOB. Ec.u apev+eum qvuruu ue cci.ra, eosepauaemc sua:e- uue uoxo. Cvuecmeeuuo, :mo o. cci.or, cen.euuix c r.acco+ c no+ouim qvuruu bless, e ra:ecmee pesv.imama eosepauaemc u+ r.acca, a ue mun, ucno.isoeauui o. xpaueuu oauuix. Mero can xnacca UNIERSAL nosnonxer ocymecrnnxrt nponepxy roro, nmeer nn xnacc nnn oexr mero c yxasanntm nmenem (nmx meroa saano n nne rexcrono crpoxn). Ec- nn raxoro meroa ner, nosnpamaercx snauenne noat. Ecnn mero naen, nosnpamaercx cctnxa na mero. Hpnmep: $dafaca11 = $obecf->can{"gefdafa"} 1f {$dafaca11} ... Mero VESIN xnacca UNIERSAL nosnonxer ntxcnnrt, onpeenena nn n rene xnacca rnoantnax nepemennax VESIN (Perl ncnontsyer snauenne +ro nepemenno nx npo- nepxn nepcn naxeron). Bor xax mt saaem nepcnm naxera: package C1ass1 $ $$ $vLk5lON vLk5lON vLk5lON vLk5lON = 1.01 = 1.01 = 1.01 = 1.01 sub neW { my $se1f = { } b1ess $se1f efun $se1f } efun 1 Tenept c nomomtm meroa VESIN moxno nponepnrt nepcnm naxera lass1: use C1ass1 $obecf = C1ass1->neW{} p1nf p1nf p1nf p1nf $ $$ $obecf obecf obecf obecf- -- -> >> >vLk5lON vLk5lON vLk5lON vLk5lON 1.01 Mero moxer ntstnartcx (n, xax npannno, ntstnaercx), xax mero xnacca: use C1ass1 p1nf C1ass1 p1nf C1ass1 p1nf C1ass1 p1nf C1ass1- -- ->vLk5lON >vLk5lON >vLk5lON >vLk5lON 1.01 Crp.317 B npnneenntx ntme npnmepax mt ncnontsonann mero VESIN es napamerpon. V me- roa moxno saart neoxsarentnt napamerp, sacrannxmmn ero nponepxrt, ne mentme nn rexymax nepcnx naxera saanno (ecnn nepcnx naxera ycrapena, ntnonnxercx xomana die): use C1ass1 p pp p1nf C1ass1 1nf C1ass1 1nf C1ass1 1nf C1ass1- -- ->vLk5lON{1.02} >vLk5lON{1.02} >vLk5lON{1.02} >vLk5lON{1.02} C1ass1 ves1on 1.02 equ1ed-fh1s 1s on1y ves1on 1.0 Crp.318 Fnana 17
O1napka cueuapuen PerI. Pykonopc1no no c1unm nporpauuuponauun
Kopo1ko Bepoxrno, nt cnocont nanncart sameuarentnt, npospaunt xo, xoropt cpasy yer paorart esorxasno. Ho nx mnornx nporpammncron omnxn neoremnemax uacrt rnopuecrna. Bam, nosmoxno, saxouercx nsrnxnyrt na +ry rnany, urot nomout nm, no- cxontxy peut noer o ornaunxe Perl. Hnrepnperarop Perl, sanymennt c xnmuom -d, nepexonr n pexnm ornaunxa. Ornaunx +ro nnrepaxrnnnax oonouxa, nosnonxmmax nnonrt xomant ornaxn, nccneonart xo, ycranannnnart rouxn npeptnannx, nsmenxrt snauennx nepemenntx n r. . Ecnn or- naunx Perl na nam nxyc neocrarouno momen, cymecrnyer mnoro pyrnx ornaunxon, xax xommepuecxnx, rax n nexommepuecxnx. Hponeptre apxnn CPAN n ntepnre nanonee no- xoxmn. Taxxe yurnre, uro ecnn nt paoraere c peaxropom GNU Emacs nnn XEmacs, ro moxere ncnontsonart ero nx nsanmoecrnnx c ornaunxom Perl, oecneunnax nonnocrtm nnrerpnponannym oonouxy nx paspaorxn nporpammnoro oecneuennx na Perl. Hocuasua. Om.ao:ur Perl opueumupoeau ua nocmpo:ui eieoo. Jmo sua:um, :mo e onpeoe.euuix c.v- :ax ou eieooum oo.iue cmpor mercma, :e+ +orem no+ecmumic ua orpaue ro+nimmepa. B pesv.imame +oevm eosuurami npoo.e+i. B ra:ecmee +epi, ucnpae.mue no.oreuue, +oruo npeo.orumi eeooumi ro+auoi om.ao:ura c npequrco+ , mo ecmi :epes raua.. B omo+ c.v:ae eieoo npoxooum :epes npo+e- rvmo:ui qu.imp (pager), noseo.muu npoc+ampueami cmpauuv sa cmpauue. Rpurep ceauca ofnapku Paccmorpnm npnmep ceanca paort c ornaunxom. Hpenonoxnm, uro n ]ane debug.pl xpannrcx cnenapn: $va1ab1e1 = 5 $va1ab1e2 = 10 $va1ab1e1 += 5 p1nf "\$va1ab1e1 = $va1ab1e1\n" p1nf "\$va1ab1e2 = $va1ab1e2\n" urot sarpysnrt cnenapn n ornaunx, nneem xomany: xpe1 -d debug.p1 Ornaunx sarpyxaercx n ntnonr npnrnamenne nx nnoa xomant DB<1> uncno n yr- nontx cxoxax noxastnaer nomep ornaouno xomant: Load1ng D8 ouf1nes fom pe15db.p1 ves1on 1.0401 Lmacs suppof ava11ab1e. Crp.319 Lnfe g o h h fo he1p. Ma1n::{debug.p1:1}: $va1ab1e1 = 5 D DD D8 88 8<1> <1> <1> <1> Hocne npnrnamennx nnenre cnmnon mnnyca (-). 3ra xomana ntneer ncxont rexcr npo- rpammt: D8<1> D8<1> D8<1> D8<1> - -- - 1==> $va1ab1e1 = 5 2: $va1ab1e2 = 10 3: $va1ab1e1 += 5 4: p1nf "\$va1ab1e1 = $va1ab1e1\n" 5: p1nf "\$va1ab1e2 = $va1ab1e2\n" 6 Oparnre nnnmanne na cnmnon > n crpoxe xoa c nomepom onn. On ormeuaer nonoxe- nne vrasame. ornaunxa rexymym ntnonnxemym crpouxy. urot ntnonnnrt ne- cxontxo crpox xoa n ocranonnrtcx, mt ycranannnnaem rouxy npeptnannx (breakpoint) na crpoxe 4 (xomana b 4). Taxnm opasom, ntnonnenne nporpammt ocranonnrcx, xora ornaunx oer o rouxn npeptnannx. Mt raxxe ncnontsyem xomany c nx ntnonne- nnx xoa nporpammt or nonoxennx yxasarenx o rouxn npeptnannx: D8<1> b 4 D8<1> b 4 D8<1> b 4 D8<1> b 4 D8<2> D8<2> D8<2> D8<2> c cc c ma1n::{debug.p1:4}: p1nf "\$va1ab1e1 = $va1ab1e1\n" Tenept nocmorpnm na xo. Vxasarent ornaunxa naxonrcx n crpoxe oparnre nnn- manne na cnmnon b, xoropt osnauaer rouxy npeptnannx: D8<2> D8<2> D8<2> D8<2> - -- - 1: $va1ab1e1 = 5 2: $va1ab1e2 = 10 3: $va1ab1e1 += 5 4==>b p1nf "\$va1ab1e1 = $va1ab1e1\n" 5: p1nf "\$va1ab1e2 = $va1ab1e2\n" 6 Kpome ntnonnennx nnnort o rouxn npeptnannx, moxno ntnonnxrt xo nomarono, nc- nontsyx xomany s. B namem npnmepe mt ynnnm, uro yxasarent ornaunxa nepemec- rnncx na cneymmym crpouxy: D8<2> s D8<2> s D8<2> s D8<2> s ma1n::{debug.p1:5}: p1nf "\$va1ab1e2 = $va1ab1e2\n" D8<2> pyrax nonesnax rexnnxa nponepxa snauenn nepemenntx n ntpaxenn. B pexnme na- nmennx sa nepemenno nnn ntpaxennem ornaunx coomaer, xora nponcxonr uro-ro, nsmenxmmee snauenne nepemenno nnn ntpaxennx. B cneymmem npnmepe xomana ycranannnnaer pexnm nanmennx nx nepemenno $variable1 samertre, xax ornaunx oc- ranannnnaer paory nporpammt n aer nam snart, uro on ncrpernn crpouxy xoa, nsmenxm- mym $variable1: D8<1> W $va1ab1e1 D8<1> W $va1ab1e1 D8<1> W $va1ab1e1 D8<1> W $va1ab1e1 D8<2> D8<2> D8<2> D8<2> c cc c Wafchpo1nf 0: $va1ab1e1 changed: o1d va1ue: undef neW va1ue: 5 Paorax c ornaunxom, nt moxere enart ropaso onee nnrepecnte nemn, nanpnmep, ns- menxrt snauennx nepemenntx, ntuncnxrt ntpaxennx n axe ntnonnxrt xomant Perl ne- Crp.320 pe ouepentm marom n nporpamme. Kpome pexnma ncnontsonannx ornaunxa, Perl npenaraer px xoncrpyxrnnntx npeno- xenn no nonoy cmu. npoepa++upoeauu. Mt nosnaxomnmcx n +ro rnane c nexoropt- mn ns nnx, a noxa nepeem x paseny Henocpecrnennte pemennx.
Henocpepc1neuume pemeuun Repexeaf ouuok epereuu eunonueuun Hepe rem xax npncrynnrt x ornaxe xoa, oparnre nnnmanne, uro o nexoropo crenenn moxno nepexnartnart omnxn no npemx ntnonnennx nporpammt. nx +roro cnyxar cne- nnantnte nepemennte: $ (omnxa, nosnnxmax n ouepnem nponecce), $! (omnxa no- cnenero ntsona cncremno ]ynxnnn), $ (pacmnpennoe coomenne o omnxe), $ (omnxa npn nocnenem ntnonnennn ]ynxnnn eval). uro xacaercx nepexnara omnox no npemx ntnonnennx nporpammt, ro y Perl ner cnennantntx xoman rnna try-catch, cyme- crnymmnx, nanpnmep, n xstxax C, Delphi, Python. (Horennnantno onacnt xo nome- maercx nnyrpt noxa try. Hpn noxnnennn omnxn ynpannenne nepeaercx noxy catch.) Onaxo noone raxoro noxa moxno cxoncrpynponart c nomomtm xomant eval. Paccmorpnm npnmep. Honporpamma try yer ntnonnxrt xo, nepeannt e n xauecrne napamerpa. urot nepeart e nox xoa, saxnmuennt n ]nrypnte cxoxn, mt saaem nporornn nonporpammt rax, urot ona nonnmana n xauecrne napamerpa cctnxy na ano- nnmnym nonporpammy. urot nepexnarnrt npeptnanne no omnxe, mt ntnonnxem nt- son nonporpammt nnyrpn xomant eval (n +rom cnyuae omnxa ne npnnonr x sanepme- nnm nporpammt). Ecnn nnyrpn eval nponcxonr omnxa, coomenne o ne sanocnrcx n nepemennym $. 3ro nosnonxer onpeennrt ]axr omnxn n ntnecrn coomenne o ee npnunne (n namem cnyuae nontrxa enennx na nont): sub fy {} { my $code = sh1ff eva1 { $code } 1f {$0} { p1nf $0 } } fy fy fy fy { {{ { $opeand1 = 1 $opeand2 = 0 esu1f = $opeand1 / $opeand2 } l11ega1 d1v1s1on by eo af fy.p1 11ne 9. Moxno raxxe saart cocrnennt opaorunx omnox. nx +roro nao nepexnarnrt cnr- nan __AN__ nonporpammo opaorunxom. Kax n nce opaorunxn cnrnanon, ona sa- nocnrcx n x+m-rannny SIG: 1oca1 $5lG{ WAkN } $5lG{ WAkN } $5lG{ WAkN } $5lG{ WAkN } = sub {p1nf "Lo!\n"} B cnyuae nosnnxnonennx omnxn ntstnaercx +ra nonporpamma. Ha +rom ocyxenne o- paorxn nporpammntx omnox saxonueno. Hoeu:ecra omnxa nporpammt +ro concem pyrax rema: nam nao nocnontsonartcx ornaunxom. Crp.321 3anyck ofnapuka Kax sanycrnrt cnenapn Perl n ornaunxe nx +roro nao npn crapre nnrepnperaropa nc- nontsonart xnmu -d: xpe1 -d debug.p1 Kora saan +ror xnmu, Perl sarpyxaer nam cnenapn n pexnme ornaxn. Hocuasua. Ec.u ei ucno.isveme peru+ om.aoru, uo ue vrasieaeme qa., e romopo+ pacno.oreu om- .arueae+i ceuapu, npuoemc eeecmu eeo epv:uvm c r.aeuamvpi. Huui same+, noc.e saeepuamueeo EAD, uumepnpemamop nepeoem e peru+ om.aoru. Bmecre c xnmuom -d nt moxere ncnontsonart xnmu -D, ycranannnnammn napamerpt pe- xnma ornaxn (onn nepeuncnent n ran. 17.1). Hapamerpt ornaunxa yxastnamrcx n nne yxn (nanpnmep, -Df) nnn uncna (nanpnmep, -D256). Bt moxere oennxrt necxontxo napamerpon ornaxn nx +roro nno nepeuncnxmr cpasy necxontxo yxn (nanpnmep, - Dts), nno saamr uncno, xnnxmmeecx cymmo orentntx uncnontx nennunn (nanpnmep, - D10 pannocnntno -Dts). urot nnrepnperarop cmor ncnontsonart napamerpt ornaxn, on onxen trt cxomnnnnponan c xnmuom -DDEBUGGING (ycranannnnaercx anromarnue- cxn, ecnn npn xomnnnxnnn ncnontsonan xnmu -g). 1abnua 17.1. 1abnua 17.1. 1abnua 17.1. 1abnua 17.1. hapaue1pu peuua o1naxu ucno ucno ucno ucno yxaa yxaa yxaa yxaa 3uau 3uau 3uau 3uaue ee euue uue uue uue 1 p Obpaba1uaa1u oubxu cuu1axcuuecxoro paabopa 2 s 8uaou1u coc1onuue c1exa auaoaoa nonporpauu 4 1 aapeu1u xou1exc1uo-aaaucuuyk obpabo1xy c1exa f aapeu1u 1paccupoaxy aunonueuun ceuapun 16 o aapeu1u npoaepxy neperpyaxu ue1ooa 32 c hoepuaa1u npeobpaaoaauue c1pox a uucna, u uaobopo1 64 hoepuaa1u npenpoeccop neua1u 12 m aapeu1u aueneuue bnoxoa naun1u 256 f aapeu1u obpabo1xy opua1oa 512 aapeu1u cuu1axcuuecxuu paabop u aunonueuue perynnpuux aupaeuuu 1024 x aapeu1u auao aunoa epeauea cuu1axcuuecxoro paabopa 204 u hoepuaa1u npoaepxy ueueuux auuux 4096 L hpoaepxa nonaneuun bnoxoa naun1u, xo1opue ue ucnonuayk1cn uu ceuapueu, uu o1nauuxou u ue axon1 a obnac1u caobouux bnoxoa 192 h aapeu1u aunu xeu 1634 aapeu1u onepa1uauoe pearupoaauue o1nauuxa 3276 D aapeu1u peuu ouuc1xu ocfynuue koraupu ofnapuka urot ysnart, xaxne ecrt xomant y ornaunxa, ncnontsyre xomany h (coxpamenne or help). B orner na npnrnamenne ornaunxa nnecrn xomany nt moxere yxasart ony ns xoman ntnoa nocxasxn: h |h h h h xouaua Hepnax ]opma xomant h ntnonr na +xpan xparxym cnpanxy no ncem xomanam ornaun- xa. Kax npannno, +ra xparxax cnpanxa cnnmxom nnnna, urot ymecrnrtcx na +xpane. Ecnn n nauane xomant yer croxrt cnmnon , ntaua na +xpan yer npoxonrt uepes nnyr- pennn ]nntrp ornaunxa, nosnonxmmn npocmarpnnart cnpanount rexcr crpannna sa Crp.322 crpannne. Hocuasua. Cu+eo. eepmura.iuo :epmi (), rar vre oi.o crasauo e ua:a.e omo e.aei, eosoecmevem ua .moo mercm, eieoou+i om.ao:uro+ ua orpau, a ue mo.iro ua pesv.imam paoomi ro+auoi h. To ecmi ec.u npu eino.ueuuu o:epeouo ro+auoi om.ao:ura ei euoume, :mo uuqop+au crpi.aci sa eepx- uu+ rpae+ orpaua u nepeo e.asa+u pacno.oreu mo.iro roue uvruoeo ea+ mercma, npocmo noemopume omv ro+auov, nocmaeue e ee ua:a.e cu+eo. [. Komana h h nosnonnr ynnert ntxnmxy ns xparxo cnpanxn no xomanam ornaunxa, ntnonmo no xomane h. 3ro eme onee xparxn rexcr, or]opmarnponannt n ne xo- nonxn. Ona cnnmxom naxonnuna, urot trt nn]opmarnnno nx uenonexa, ne nmemmero nnxaxo nn]opmannn o xomanax ornaunxa. 3aro ona nosnonxer ynnert nonnt cnncox nmen xoman, ne npnerax x nocrpannunomy npocmorpy nn]opmannn. Tenept, ncnontsyx xomany h n ]opmare h ro+auoa, nt nonyunre pasnepnyrym cnpanxy no xaxo xoman- e n orentnocrn. Hanonee cymecrnennte n uacro ncnontsyemte xomant ornaunxa pasxcnxmrcx n nocneymmnx pasenax +ro rnant. Rpocrofp ucxopuoro kopa Hocne roro xax ncxont rexcr namero cnenapnx yer sarpyxen n namxrt ornaunxa, nam moxer nonaonrtcx ynnert +ror xo, urot ocnexnrt ero n namxrn. nx +roro ncnontsyer- cx ona ns xoman, ynpannxmmnx ntnoom nncrnnra (l xnnxercx coxpamennem or list, w or window). l ntnecrn cneymmn ]parmenr ncxonoro xoa. Ecnn nt naxonrect n camom xonne cnenapnx, ntnonrcx nocnenxx crpouxa cnenapnx. l minincr naunnax co crpoxn c nomepom min, ntnecrn incr1 crpox ncxonoro xoa. l min-max ntnecrn crpoxn c nomepamn or min o max. l cmpora ntnecrn crpoxy c yxasanntm nomepom. l noonpoepa++a ntnecrn nepnt ]parmenr ns crpox ncxonoro xoa, ornocxmnxcx x yxasanno nonporpamme. - ntnecrn npetymn ]parmenr ncxonoro xoa cnenapnx. w ntnecrn na +xpan crpoxn ncxonoro xoa, pacnonoxennte noxpyr crpoxn, na xoropo ycranonnen yxasarent ornaunxa (npetymax crpoxa, rexymax crpoxa n cneymmax crpoxa). w cmpora ntnecrn na +xpan crpoxn ncxonoro xoa, pacnonoxennte noxpyr yxasanno crpoxn. . nepemecrnrt yxasarent ornaunxa x nocnene ntnonnenno nm crpouxe cnenapnx n ntnecrn na +xpan +ry crpouxy. B cneymmem npnmepe mt ntnonm na +xpan nepnte rpn crpoxn cnenapnx: D8 D8 D8 D8<1> <1> <1> <1> 1 11 1 1 1 1 1- -- -3 33 3 1==> $va1ab1e1 = 5 2: $va1ab1e2 = 10 3: $va1ab1e1 += 5 Rouaroeoe eunonueuue urot nponnrartcx no xoy c nomomtm ornaunxa, nt moxere cenart onn mar name Crp.323 nporpammt, ntnonnnn ony crpouxy xoa. nx +roro ncnontsyercx xomana s (coxpa- menne or step). s ntnonnnrt cneymmym crpoxy cnenapnx. s eipareuue ntnonnnrt yxasannoe ntpaxenne, xax ecnn t yxasannte xomant Perl mnn ncne sa rexyme crpoxo, no nepeo cneymme. (Cneymmax crpoxa tna t ntnon- nena, ecnn ncnontsonart xomany s es napamerpon.) Ecnn crpoxa cnenapnx nnn yxasannoe namn ntpaxenne nxnmuaer ntsont ]ynxnn, crpo- xn, cocrannxmmne reno ]ynxnnn, raxxe yyr ntnonnxrtcx no maram. (urot ntnonnnrt ntson ]ynxnnn xax ennoe nenoe, ncnontsyre xomany n.) Oparnre nnnmanne, uro nycrax crpoxa, nneennax nocne xomant s nnn n, npnnonr x nonropy xomant, ro ecrt ecnn nt ntnonnnnn ouepenym crpoxy cnenapnx c nomomtm xomant s es napa- merpon, ro naxarne xnannmn Enter npnneer x ntnonnennm cneymme crpoxn cnena- pnx. B +rom npnmepe mt ntnonnxem no maram rpn xomant neuarn: D8<1> - 1==> p1nf "he11o\n" 2: p1nf "fom\n" 3: p1nf "Pe1!\n" 4 D8<1> s D8<1> s D8<1> s D8<1> s he11o ma1n::{d.p1:2}: p1nf "fom\n" D8<1> s D8<1> s D8<1> s D8<1> s ma1n::{d.p1:3}: p1nf "Pe1!\n" D8 D8 D8 D8<1> <1> <1> <1> s ss s Pe1! Rouaroeoe eunonueuue es saxopa e nopnporparru Komana n (coxpamenne or next) sanpemaer nomaronoe ntnonnenne nonporpamm, nt- stnaemtx n nponecce ntnonnennx ouepeno crpoxn cnenapnx nnn n nponecce ntuncne- nnx ntpaxennx. uopmar xomant n n ee ecrnnx ananornunt paccmorpenno n npe- tymem pasene xomane s sa rem ncxnmuennem, uro ntsont nonporpamm ntnonnx- mrcx xax ennoe nenoe, ne npnnox x nomarono rpaccnponxe rena nonporpammt: n n aupaeuue Bt moxere ncnontsonart naxarne na xnannmy Enter, urot nonropnrt nocnenmm xo- many s nnn n. Ycfauoeka foek npepueauun Kora ornaunx oxonr o ycranonnenno rouxn npeptnannx, on npnocranannnnaer paory cnenapnx n nt moxere nponepnrt, uro nponcxonr n nporpamme. Ornaunx Perl oecneunnaer onontno ontmym rnxocrt no uacrn ycranonxn rouex npeptnannx. Komana b (coxpame- nne or break), ycranannnnammax rouxn npeptnannx, ntrnxnr cneymmnm opasom: b ycranannnnaer rouxy npeptnannx n rexyme crpoxe. b cmpora ycranannnnaer rouxy npeptnannx n yxasanno crpoxe. Crp.324 b noonpoepa++a ycranannnnaer rouxy npeptnannx n nepno crpoxe yxasanno no- nporpammt. b postpone noonpoepa++a ycranannnnaer rouxy npeptnannx n nepno crpoxe yxasan- no nonporpammt, no rontxo nocne ee xomnnnxnnn. b load u+-qa.a saaer npeptnanne ntnonnennx cnenapnx, xax rontxo yxasannt ]an yer sarpyxen xomano use nnn require. b compile noonpoepa++a saaer npeptnanne ntnonnennx cnenapnx, xax rontxo y- er orxomnnnnponana yxasannax nonporpamma. Komant b, b cmpora, b noonpoepa++a n b postpone noonpoepa++a nosnonxmr yxastnart n xauecrne neoxsarentnoro napamerpa ycnonne (nanpnmep, $variable 0). Vcno- nne npecrannxer coo ntpaxenne Perl. Ecnn npn ocrnxennn yxasanno crpoxn, no o ee ntnonnennx ntuncnenne +roro ntpaxennx coornercrnyer ycnonnm ucmuua, ro ntnonnenne cnenapnx npeptnaercx, ecnn xe nponepxa nosnpamaer snauenne .ori ro ono npoonxaer- cx antme. Hocxontxy n xauecrne ycnonnx eccmtcnenno saanart ]nxcnponannoe uncno (ono nno ncera ncrnnno, nno n cnyuae ecnn +ro nont, ncera noxno), ro ornaunx Perl rapanrnponanno cnocoen ornnunrt xomany b cmpora or xomant b vc.oeue. B cneymmem npnmepe mt ycranannnnaem rouxy npeptnannx na uernepro crpoxe ncxonoro xoa n ntnonnxem cnenapn nennxom o roro momenra, noxa ne ocrnrnem +ro crpoxn (cm. raxxe onncanne xomant c n pasene 3anycx nporpammt o cneymme rouxn ocranon- xn anee n +ro rnane): D8<1> - 1==> p1nf "he11o\n" 2: p1nf "fom\n" 3: p1nf "Pe1!\n" 4: p1nf "he11o aga1n.\n" 5 D8<1> D8<1> D8<1> D8<1> b 4 b 4 b 4 b 4 D8<2> D8<2> D8<2> D8<2> C CC C he11o fom Pe1! ma1n::{d.p1:4}: p1nf "he11o aga1n.\n" D8<2> Ypaneuue foek npepueauun urot yannrt rouxn npeptnannx, nt moxere ncnontsonart cneymmne xomant orna- unxa (coxpamenne or delete). d yanxer rouxy npeptnannx, ycranonnennym n rexyme crpoxe (ecnn ona ram ecrt). d cmpora yanxer rouxy npeptnannx n crpoxe c yxasanntm nomepom (ecnn ona ram ecrt). D yanxer nce ycranonnennte rouxn npeptnannx. 3anyck nporparru po cnepyke foku ocfauoeku Komana c (coxpamenne or continue) ntnonnxer ouepeno ]parmenr cnenapnx: c ntnonnxrt cnenapn o rex nop, noxa ne ncrpernrcx cneymmax rouxa npeptnannx. Crp.325 c cmpora ntnonnxrt cnenapn o rex nop, noxa ne ncrpernrcx cneymmax rouxa npe- ptnannx nnn ne yer ocrnrnyra yxasannax crpoxa. c noonpoepa++a ntnonnxrt cnenapn o rex nop, noxa ne ncrpernrcx cneymmax rou- xa npeptnannx nnn ne yer ntsnana yxasannax nonporpamma. Ecnn n nponecce ntnonnennx xomant c tn ocrnrnyr xonen cnenapnx, nt ynnnre coomenne: Debugged pogam fem1nafed. use q fo qu1f o k fo esfaf, use 0 1nh1b1fex1f fo avo1d sfopp1ng affe pogam fem1naf1on, h q, h k o h O fo gef add1f1ona1 1nfo. Ecnn renept nnecrn xomany (coxpamenne or estart), ornaunx nepnercx x nauany cne- napnx, ouncrnn nce nepemennte, crex ntsonon nonporpamm n r. ., no coxpannn ycranonnen- nte rouxn npeptnannx. Tem camtm nonyunre eme onn manc pasopartcx, uro xe nponcxo- nr n name nporpamme. Ecnn xe nnecrn xomany q, ornaunx saxonunr cnom paory. Reafu eupaeuun urot ntnecrn na +xpan xomntmrepa snauenne xaxoro-nno ntpaxennx (nanpnmep, sna- uenne nepemenno), ncnontsyercx xomana p (coxpamenne or print). p aupaeuue B cneymmem npnmepe mt ntnonm c nomomtm xomant p snauenne nepemenno $variable1: D8 D8 D8 D8> p $ > p $ > p $ > p $va1ab1e va1ab1e va1ab1e va1ab1e1 11 1 5 Buucneuue eupaeuun urot ntuncnnrt ntpaxenne Perl, ocrarouno nnecrn ero n orner na ouepenoe npnrna- menne ornaunxa. B xauecrne ntpaxenn ntcrynamr nmte xomant Perl. Ecnn xomana ouennntm opasom ne nmemaercx n ony crpouxy, nt moxere npoonxnrt ee na cne- ymme, nnex nocnennm cnmnonom oparnym xocym uepry (). Ornaunx ntneer n xa- uecrne npnrnamennx rexcr cont: n yer xart npoonxennx. Hpnmep (neuart rexcra rpn pasa c nomomtm oneparopa nnxna): D8 D8 D8 D8<1> <1> <1> <1> fo fo fo fo {1..3} { {1..3} { {1..3} { {1..3} { \ \\ \ conf: p1nf "he11o fom Pe1! conf: p1nf "he11o fom Pe1! conf: p1nf "he11o fom Pe1! conf: p1nf "he11o fom Pe1!\ \\ \n" n" n" n" \ \\ \ conf: conf: conf: conf: } }} } he11o fom Pe1! he11o fom Pe1! he11o fom Pe1! Hsreueuue suaeuu nepereuuux Bt moxere nsmennrt snauenne nepemenno, npncnonn e nonoe snauenne (cm. npe- tymn pasen). Hpnmep: D8<1> p $va1ab1e1 5 D8 D8 D8 D8<2> $ <2> $ <2> $ <2> $va1ab1e va1ab1e va1ab1e va1ab1e1=10 1=10 1=10 1=10 Crp.326 D8<3> p $va1ab1e1 10 Ycfauoeka rnoanuuux ycnoeu C nomomtm xomant (coxpamenne or Watch) moxno yxasart rnoantnte ycnonnx, nponepxmmne nsmenennx snauenn nepemenntx: eipareuue npeptnaer ntnonnenne cnenapnx, ecnn n nponecce paort nsmenxer- cx saannoe ntpaxenne. yanxer nce ycranonnennte panee ycnonnx no rnoantno nponepxe snauenn ntpa- xenn. Camt npocro cnyua +ro xora n xauecrne ntpaxennx yxasana nepemennax. Tora paora cnenapnx npeptnaercx, xax rontxo nsmenxercx snauenne nepemenno. (3amertre, uro oneparop npncnoennx, npncnannammn nepemenno ro xe camoe snauenne, xoropoe n ne yxe naxonrcx, ne npeptnaer paort cnenapnx.) Hpnmep: ma1n::{debug.p1}: $va1ab1e1 = 5 D8<1> W $va1ab1e1 D8<2> c Wafchpo1nf 0: $va1ab1e1 changed: o1d va1ue: undef neW va1ue: 5 Onaxo xomana nosnonxer saanart n xauecrne aprymenra ne rontxo nepemennte, no n nente ntpaxennx. B +rom cnyuae npeptnanne nopmantno paort cnenapnx nosnnxaer, ecnn nsmennrcx coornercrnymmee ntpaxenne xax ennoe nenoe. Komana ocrarou- no coopasnrentna, urot ntuncnxrt snauenne ntpaxennx n ntnonnxrt nponepxy, rontxo xora menxmrcx nxoxmne n ntpaxenne xomnonenrt. Heoxonmo ormernrt, uro ecnn nt yxastnaere xomane n xauecrne aprymenra ntpaxenne, a ne npocro nmx nepemenno, nce nepemennte, nxoxmne n ntpaxenne, yxe onxnt nmert onpeenennoe snauenne. Ec- nn ona nnn necxontxo nepemenntx nmemr snauenne undef, nt nonyunre onontno nnn- nt cnncox omnox, nosnnxammnx nnyrpn ornaunxa (on net roxe npecrannxer coo cnenapn Perl!). Hpnuem raxax narnocrnxa yer ntnonrtcx npn xaxom nsmenennn ne- pemenntx, nxoxmnx n ntpaxenne, noxa nce onn ne nonyuar onpeenennoe snauenne. Ycfauoeka ofnapouux pecfeu ecrnne +ro xomant Perl nnn ornaunxa, xoropte ntnonnxmrcx xaxt pas nepe ntnoom npnrnamennx ornaunxa nnn cpasy nocne ntnoa npnrnamennx. Onn oxastnamr- cx nonesntmn, ecnn, nanpnmep, nt xornre snart snauenne nexoroporo ntpaxennx nocne xaxoro mara npn nomaronom ntnonnennn cnenapnx. Bt moxere ncnontsonart cneym- mne xomant ornaunxa, urot ynpannxrt ero ecrnnxmn: < oecmeue nepe xaxtm ntnoom npnrnamennx ornaunxa ntnonnnrt yxasannte xomant Perl. << oecmeue oannrt nonte xomant Perl x xomanam, yxe ycranonnenntm xomano < oecmeue. < yannrt nce xomant Perl, ycranonnennte xomanamn < oecmeue n << oecmeue. Crp.327 > oecmeue xaxt pas noc.e nnoa xomant ornaunxa n naxarnx na xnannmy En- ter ntnonnnrt yxasannte xomant Perl. >> oecmeue oannrt nonte xomant Perl x xomanam, yxe ycranonnenntm xoman- o > oecmeue. yannrt nce xomant Perl, ycranonnennte xomanamn > oecmeue n >> oecmeue. oecmeue xaxt pas nepe rem, xax ntnecrn npnrnamenne ornaunxa na nno xo- mant, ntnonnnrt yxasannte xomant om.ao:ura. oecmeue oannrt nonte xomant ornaunxa x xomanam, ycranonnenntm xo- mano oecmeue. yannrt nce nmemmnecx xomant ornaunxa, ycranonnennte xomanamn oe- cmeue n oecmeue. a oecmeue nx rexyme crpoxn saart ntnonnenne ecrnn (xoman Perl). A nmenno, xaxt pas, xora ornaunx yer oxonrt o rexyme crpoxn, on: 1) nponepnr nannune rouxn npeptnannx (pasen Vcranonxa rouex npeptnannx), 2) nponepnr nannune rnoantnoro ycnonnx (pasen Vcranonxa rnoantntx ycnonn), 3) ntneer annym crpoxy (ecnn +ro neoxonmo), ) ntnonnnr yxasannoe ecrnne, 5) ntneer npnrnamenne, ecnn +ro neoxonmo (nanpnmep, n pexnme nomarono paort), ) ntnonnnr xomant Perl, pacnonoxennte n +ro crpoxe. a cmpora oecmeue ro xe, uro n n npetymem cnyuae, no nx crpoxn c yxasanntm nomepom. A yannrt nce ycranonnennte na rexymn momenr ecrnnx. Hpnmep nepe ntnoom ouepenoro npnrnamennx ornaunx neuaraer rexymee snaue- nne nepemenno $variable1: D8<1> - 1==> $va1ab1e1 = 5 2: $va1ab1e1 += 5 3: $va1ab1e1 += 5 D8<1> < p1nf " D8<1> < p1nf " D8<1> < p1nf " D8<1> < p1nf "\ \\ \$va1ab1e1 $va1ab1e1 $va1ab1e1 $va1ab1e1 = = = = $va1ab1e1 $va1ab1e1 $va1ab1e1 $va1ab1e1\ \\ \n" n" n" n" D8<2> s ma1n::{debug.p1:2} $va1ab1e1 += 5 $va1ab1e1 = 5 $va1ab1e1 = 5 $va1ab1e1 = 5 $va1ab1e1 = 5 D8<2> s ma1n::{debug.p1:3} $va1ab1e1 += 5 $ $$ $va1ab1e va1ab1e va1ab1e va1ab1e1 1 1 1 = 10 10 10 10 Buxop us ofnapuka urot ntrn ns ornaunxa, ncnontsyre xomany q (coxpamenne or uit). Pykoeopcfeo no cfunk nporparrupoeauun ua Perl V paspaorunxon Perl nmeercx mnoro npenoxenn no crnnm nporpammnponannx nx +ro- ro xstxa. Mnorne ncero nnmt nonpoc nxyca. Vunrtnare +ror ]axr, cornamaxct nnn ner c npnneenntm nnxe cnncxom cpasy xe no mepe ero npourennx. Crp.328 Fnox, cocroxmn ns xomant, ymemammecx n ony crpoxy, onxen sannmart ony crpoxy (nxnmuax ]nrypnte cxoxn). Btpannnnare coornercrnymmne pyr pyry +nemenrt no neprnxann. Bcera nponepxre xo, nosnpamaemt npn ntsone cncremno ]ynxnnn nnn ntnonnennn xomant, saxnmuenno n oparnte anocrpo]t. Btnpare nenrn]nxaropt, necymne cmtcnonym narpysxy, xora nt nepnerect x nnm uepes nexoropoe npemx, yer npome. Paccmorpnre nosmoxnocrt ncera ncnontsonart nparmy use strict. He npnmenxre upesmepno ntuypnte xoncrpyxnnn, rnnnunte nx nporpammncron na C, urot ntrn ns noxa oneparopon crporo n nauane nnn n xonne nnxna. Perl npeocrannxer nam saxonnt cnoco noxnnyrt nnxn n cepenne ero rena. He ncnontsyre rouxy c sanxro nx noxon, cocroxmnx ns ono xomant n sann- mammnx ony crpouxy. He ncnontsyre npoenon nepe rouxo c sanxro nnn mexy nmenem ]ynxnnn n xpyr- ntmn cxoxamn. Ecnn +ro nomoraer crpyxrypnponannm xoa, ncnontsyre nycrte crpoxn, urot pase- nxrt orentnte ]parmenrt nporpammt. Ecnn rpeyercx pasnrt nnnnym crpouxy, enare +ro nocne oneparopa (sa ncxnmue- nnem oneparopon and n or). To, uro nt nmeere npano onycrnrt xpyrnte cxoxn, eme ne osnauaer, uro nt onxnt +ro enart. Ecnn nt comnenaerect, moxno nnn nentsx onycrnrt xpyrnte cxoxn, ncnontsyre nx. enare nporpammy nacrontxo npnrono x mnoroxparnomy ncnontsonannm xoa, na- cxontxo +ro nosmoxno. Paccmorpnre nosmoxnocrt cenart ns nee moynt nnn xnacc. Homemare orxptnammym ]nrypnym cxoxy na ro xe crpoxe, uro n xnmuenoe cnono, ecnn +ro moxno cenart. Ecnn ner, ntpannnnare nx no neprnxann. 3axptnammax ]nrypnax cxoxa noxa nx cocranno xomant onxna trt ntponnena no ornomennm x xnmuenomy cnony xomant. Hcnontsyre nauantnt cnmnon nouepxnnannx, urot noxasart, uro xaxax-ro nepemennax nnn nonporpamma xnnxmrcx npnnarntmn nx naxera. Hcnontsyre npoen nocne xaxo sanxro, noxpyr cnoxntx nnexcon, noxpyr ont- mnncrna oneparopon, a raxxe nepe orxptnamme ]nrypno cxoxo noxon xoman, o- pasymmnx cocrannym xomany. Hcnontsyre ncrpoennte oxymenrt nmecro mnorouncnenntx xoman print, xora rpeyercx ntnecrn rexcr, sannmammn necxontxo crpouex. Hcnontsyre crpounte yxnt nx nmen ]ynxnn n meroon. Bcera ncnontsyre ]nar -w. Hpn ncnontsonannn orcrynon nx ntpannnnannx +nemenron xoa ]opmarnpyre xo n uertpe xononxn. Ecnn nt ncnontsyere xoncrpyxnnn, xoropte moryr oxasartcx ne peannsonanntmn na xaxom-ro xomntmrepe, ntnonnxre raxne xoncrpyxnnn nnyrpn xomant eval n oxsarent- no nponepxre, paoramr nn onn. Crp.329 Hac1u IV
Cospauue cueuapuen CGI
Fnana 18
CGI-nporpauuuponauue
Kopo1ko 3ra rnana naunnaer pasen, nocnxmennt nporpammnponannm c ncnontsonannem CGI (Common Gateway InterIace). CGI-nporpammnponanne ouent nonynxpnoe cpen npo- rpammncron npnmenenne Perl (n, no mnennm nexoroptx, enncrnennax npnunna cymecr- nonannx +roro xstxa). CGI-nporpammnponanne ocnontnaercx na cnenapnxx CGI, xoropte, c rouxn spennx xstxa, xnnxmrcx otuntmn nporpammamn na Perl, no c pacmnpennem .cgi. Cnenapnn ycranannnnamrcx na Web-cepnepe, n n pesyntrare na Web-crpannnax noxnnxmr- cx xnonxn, cnncxn c npoxpyrxo, menm n mnorne pyrne +nemenrt ynpannennx. Fnaroapx CGI nontsonarent moxer nsanmoecrnonart c Web-crpannnamn, nonyuax ocryn x asam anntx, sanycxax nporpammt, nrpax n nrpt n axe o]opmnxx saxast. nx coren rtcxu nporpammncron Perl ocnona nnrepaxrnnntx Web-crpannn. B +ro rnane x conpamct pacxptrt xnmuente momenrt nporpammnponannx cnenapnen CGI. noxaxy na CGI-cnenapnx. Hepnt, cgi1.cgi, cosaer Web-crpannny c o.e+euma+u vnpae.euu HTML (Hypertext Markup Language xstx rnneprexcrono pasmerxn) xnonxamn, cnncxamn, ncnntnammne menm n r. . Hontsonarent nnonr annte n naxnma- er xnonxy Submit. 3arem c nomomtm nroporo cnenapnx, cgi2.cgi, mt unraem nneennte nm annte n nosnpamaem nontsonarenm xonnm. B +ro, panno xax n n rpex nocneymmnx rnanax, x yy npenonarart, uro y nac ecrt ISP (Internet Service Provider xomnannx, npeocrannxmmax ocryn n Hnrepner), cno pas- en na cepnepe, a raxxe nosmoxnocrt pasmemart na nem crpannnt. (Otuno +ro enaercx nno c nomomtm nporpammt, ncnontsymme nporoxon FTP, nno c nomomtm cnennant- no crpannnt na cepnepe nponaepa, npeocrannxmme nosmoxnocrt nepenocnrt ]a- nt). Taxxe nam norpeyercx paspemenne nponaepa na sanycx CGI-cnenapnen eno n rom, uro nnora ns coopaxenn samnrt nn]opmannn +ro sanpemeno. Hpenonarax, uro ne rontxo nt moxere sanycxart CGI-cnenapnn, ne satnare raxxe ycranannnnart coor- nercrnymmne npana ocryna nx nnx nomnnre o samnre cnonx ]anon n cncremt n ne- Crp.330 nom. B uacrnocrn, nx onepannonntx cncrem cemecrna Unix nx ycranonxn npan ocryna cneyer ncnontsonart xomany chmod nanpnmep: chmod 644 script.cgi. Cenan +ro, neoxonmo raxxe paspemnrt ntnonnenne cnenapnx, nanpnmep, c nomomtm xomant chmod +x script.cgi. (nx nonyuennx nonno nn]opmannn o nponecce pasmemennx crpa- nnn nmeer cmtcn oparnrtcx x namemy nponaepy.) Hcnonusoeauue CG.p Hrax, xax cosaercx CGI-cnenapn Teopernuecxn +ro ouent npocro: nporpamma CGI, xax n nmax pyrax nporpamma na Perl, ntnonnxer otunte xomant Perl, xora ona ntstnaercx paysepom (ro ecrt xora paysepy n xauecrne URL saaercx CGI-cnenapn). Bce, uro nt na- npannxere n cranaprnt ntno, nepeaercx paysepy. Tax, ecnn CGI-cnenapn ntnonnxer xomany print "Hello!", +ror rexcr yer nosnpamen paysepy, n na crpannne noxnnrcx na- nnct Hello!. Ho +ro pynmenrapnt cnoco. Tpeyercx nn npounrart annte, nneennte nontsonarenem c nomomtm +nemenron ynpannennx, pacnonoxenntx na crpannne Hnn nt sa- xornre cosart +rn +nemenrt ynpannennx ns cnenapnx urot cenart nce +ro n mnoroe py- roe, ncnontsyercx npnnarammncx x Perl naxer CGI.pm. (B cneymme rnane mt yem nc- nontsonart pyro nonynxpnt naxer cgi-lib.pl.) C ono cropont, +ro cranaprnt cno- co paort c CGI cpecrnamn Perl, c pyro ornnunoe nneenne n CGI.pm. Hrax, nnrepnperarop Perl coepxnr, cpen pyrnx moyne, cranaprnt moynt CGI.pm. Ho+romy ecnn y nac ycranonnen Perl, ro, cxopee ncero, ecrt n CGI.pm. Haunnax c nxro nep- cnn Perl CGI.pm cran oexrno-opnenrnponanntm, xorx ynpomennt ]ynxnnonantno- opnenrnponannt nnrep]ec nce eme cymecrnyer. B namnx npnmepax mt yem ncnontso- nart oexrno-opnenrnponannoe nporpammnponanne. Cosanax c nomomtm CGI.pm oexrt CGI, mt yem ntstnart pasnnunte merot +roro oexra. Cymecrnymr merot, coornercr- nymmne npaxrnuecxn ncem ocnonntm reram HTML, n npn nx ntsone cosaercx nyxnt rer c yxasanntmn arpnyramn. Bce onn moryr nonyuart u+euoeauuie napa+empi (sa nc- xnmuennem meroon, rpeymmnx onn aprymenr); nntmn cnonamn, rpeyercx yxasart ne rontxo snauenne arpnyra HTML, no n ero nmx. B cneymmem npnmepe oexr CGI cosaer Web-crpannny nocpecrnom ncrpoenntx meroon. Oparnre nnnmanne na nmenonannte na- pamerpt meroa textarea, saammne nmx onacrn peaxrnponannx rexcra (textarea), snaue- nne no ymonuannm n pasmept: use CGl $co = neW CGl p1nf $co->heade, $co->sfafhfm1{-f1f1e=>CGl Lxamp1e}, $co->cenfe{$co->h1{We1come fo CGl!}}, $co->fexfaea { -name => fexfaea, -defau1f => No op1n1on, -oWs => 10, -co1umns => 60 }, $co->endhfm1 Ecnn nosmoxnocrn oexrno-opnenrnponannoro nnrep]eca ne rpeymrcx, naxer CGI.pm raxxe noepxnnaer npocro ]ynxnnonantno-opnenrnponannt nnrep]ec. Mt pac- cmorpnm npnmep npnmenennx ]ynxnnonantno-opnenrnponannoro nnrep]eca CGI.pm n xonne rnant. Crp.331 Cospauue u ucnonusoeauue snereufoe ynpaeneuun TML Hsyuart nporpammnponanne nyume ncero na npnmepax. Horomy n +ro rnane, xax ormeua- noct panee, npnnoxrcx na CGI-cnenapnx: onn cosaer Web-crpannny c +nemenramn ynpannennx nonxmn nnoa rexcra, nepexnmuarenxmn, xnonxamn, nxnmuax Submit, a nropo unraer annte, nneennte nontsonarenem na +ro crpannne. Oa cnenapnx na- pnannn c neontmnmn ononnennxmn na remy oneparopa print, xoropt cocrnenno n cosaer crpannny. Hepnt cnenapn xpannrcx n ]ane cgi1.cgi, n n cnpanountx nenxx nonnocrtm npn- nonrcx n nncrnnre 1.1. Kora nontsonarent orxptnaer cnenapn n paysepe (nepexox no ero apecy nanpnmep, http://www.host.ru/cgi-bin/cgi1.cgi), cnenapn nosnpamaer crpannny c +nemenramn ynpannennx HTML n rexcrom. B annom cnyuae +ro crpannna an- xert. Ha pnc. 1.1-1.3 ona noxasana n oxne nporpammt Internet Explorer. Kax nnno ns pnc. 1.1, crpannna coepxnr npnnercrnne n coomenne o rom, uro nocern- renn, ne xenammne sanonnxrt anxery, moryr nepern no cctnxe na cepnep CPAN (Com- prehensive Perl Archive Network nceoemnmmn apxnn, nocnxmennt xstxy Perl). Hpoxpyunnax crpannny c anxero nnns, nt ynnnre sanpoc nmenn nontsonarenx c rexcro- ntm nonem n nonpoc o ero mnennn c onacrtm peaxrnponannx rexcra (mnorocrpounoe rexcronoe none).
uc. 1.1. uc. 1.1. uc. 1.1. uc. 1.1. 1exc1, uapxupoaauuuu cnucox u runepccunxa Hpocmarpnnax anxery antme, nt ynnnre eme necxontxo +nemenron ynpannennx, noxasanntx na pnc. 1.3, xnonxn c sanncnmo n nesanncnmo ]nxcanne, cnncxn, a raxxe xnonxa nornepxennx n ouncrxn anxert. B +ro rnane mt paccmorpnm, xax cosart nce +rn +nemenrt ynpannennx na npnmepe npenoxenntx cnenapnen. Kora nontsonarent naxnmaer na xnonxy Submit, pacnonoxen- nym n xonne anxert, paysep conpaer annte, nneennte na crpannne, n nepeaer nx pyromy CGI-cnenapnm, cgi2.cgi. B cnpanountx nenxx on npnneen n nncrnnre 1.2 a pe- syntrart ero ntnonnennx - na pnc. 1., re nt moxere nanmart cnoxy nneenno nontsonarenem nn]opmannn.
Kopo1ko B npetyme rnane paccxastnanoct o CGI-nporpammnponannn (Common Gateway InterIace) na ase meroon cranaprnoro moynx CGI.pm. He menee nonynxpen cpen nporpammncron naxer cgi-lib.pl. Hocxontxy mnorne CGI-cnenapnn na Perl nanncant c ero nomomtm, n +ro rnane pac- cxastnaercx nmenno o nem. Anropcxne npana na +ror naxer npnnanexar ero cosarenm Crnneny E. Fpennepy (Steven E. Brenner), na omamne crpannne xoroporo (http://cgi-lib.stanford.edu) moxno nonyunrt xonnm cgi-lib.pl. Bam paspemaercx paorart c cgi-lib.pl n axe nsmenxrt ero o rex nop, noxa namn ecrnnx ne yyr ymemnxrt onncannte n nauane ]ana anropcxne npana. Ocoax nponeypa ycranonxn ne rpeyercx ]an cgi-lib.pl xonnpyercx n xaranor, re xpanxrcx CGI-cnenapnn, n c nomomtm xomant require noxnmuaercx x nnm: equ1e cg1-11b.p1 B +ro rnane cosamrcx na cnenapnx, renepnpymmne re xe crpannnt, uro n n npetyme rnane, no nmecro CGI.pm na ce pas yer ncnontsonan naxer cgi-lib.pl. B npetyme rnane cnenapnn nastnannct cgi1.cgi n cgi2.cgi, a n +ro peut noer o lib1.cgi n lib2.cgi, c rem uro- t nsexart nyrannnt. Kora nontsonarent orxptnaer crpannny n paysepe (rpeyercx yxa- sart apec cnenapnx, nanpnmep http://www.host.ru/cgi-bin/lib1.cgi), lib1.cgi nosnpamaer crpa- nnny, coepxamym +nemenrt ynpannennx HTML n rexcr. B annom cnyuae +ro crpannuxa c anxero. Ha pnc. 19.1-19.3 ona noxasana n oxne nporpammt Internet Explorer. Kax nnno ns pnc. 19.1, crpannna coepxnr npnnercrnne n coomenne o rom, uro nocern- renn, ne xenammne sanonnxrt anxery, moryr nepern no cctnxe na cepnep CPAN (Com- prehensive Perl Archive Network nceoemnmmn apxnn, nocnxmennt xstxy Perl). Hpoxpyunnax crpannny c anxero nnns, nt ynnnre sanpoc nmenn nontsonarenx c rexcrontm nonem n nonpoc o ero mnennn c onacrtm peaxrnponannx rexcra (mnorocrpounoe rexcronoe none).
Hpocmarpnnax anxery antme, nt ynnnre eme necxontxo +nemenron ynpannennx, noxasanntx na pncynxe 19.3, xnonxn c sanncnmo n nesanncnmo ]nxcanne, cnncxn, a raxxe xnonxa, nornepxennx n ouncrxn anxert. Bce +rn +nemenrt npenasnauent nx nnoa ononnnrentno nn]opmannn. Kora nontsonarent naxnmaer na xnonxy Submit, pacnonoxennym n xonne anxert, pay- sep conpaer annte, nneennte na crpannne, n nepeaer nx pyromy CGI-cnenapnm, cgi2.cgi. B cnpanountx nenxx on npnneen n nncrnnre 19.2, a pesyntrart ero ntnonnennx na pnc. 19., re nt moxere nanmart cnoxy nneenno nontsonarenem nn]opmannn.