Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования PerlΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 53

Автор ΠœΠΈΡ…Π°ΠΈΠ» Π¨ΠΎΡ…ΠΈΡ€Π΅Π²

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ протСстированныС ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ CGI Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ всС дСйствия ΠΏΠΎ созданию ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½Ρ‹Ρ… web-страниц. Они ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ ΠΎΡ‚ программиста трудности ΠΈ тонкости ΠΏΡ€ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌ. Web-страницы ΠΌΠΎΠΆΠ½ΠΎ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ Π±Π΅Π· использования Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ Π½Π° языкС HTML. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° CGI Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ интСрфСйс со всСми Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ классами ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ HTTP-запросов Π² CGI-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ….

Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΠΌ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ΠΌ CGI стали сСрвСрныС Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π² шаблон HTML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ исполняСмыС Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹, написанныС Π½Π° встроСнном языкС программирования - C#, Java, PHP, Perl, Visual Basic ΠΈΠ»ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… языках шаблонов. На Perl написано Π½Π΅ΠΌΠ°Π»ΠΎ систСм для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с шаблонами (templating system): ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Π½Π΅ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ подстановку, Π΄ΠΎ ΠΈΠ·ΠΎΡ‰Ρ€Π΅Π½Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ программирования (application framework) для web-сСрвСра. Perl Π² ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… систСмах примСняСтся для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ шаблонов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, HTML::Template, Text::Template, Template Toolkit) ΠΈ динамичСской Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π° основС шаблонов. Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… систСмах (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Apache::ASP, AxKit, Embperl, Mason, Apache::XPP) Perl примСняСтся ΠΊΠ°ΠΊ встроСнный язык, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для программирования дСйствий Π² ΡˆΠ°Π±Π»ΠΎΠ½Π°Ρ…. ВсС эти систСмы ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ с сайта CPAN ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. (ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± установкС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Ρ€Π΅Ρ‡ΡŒ шла Π² Π»Π΅ΠΊΡ†ΠΈΠΈ 13.) Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с этими систСмами ΠΏΠΎΠ΄ ОБ MS Windows ΠΏΡ€ΠΎΡ‰Π΅ всСго Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ с сайта perl.apache.org дистрибутив Perl, Π² состав ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ сСрвСр Apache с mod_perl ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· пСрСчислСнных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. КаТдая ΠΈΠ· систСм Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ интСрСсными возмоТностями, Π½ΠΎ ΠΌΡ‹ остановимся ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Π½Π° Ρ‚ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ…, которая Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, Ρ‡Ρ‚ΠΎ ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… распространСнных систСмах программирования Π½Π° основС шаблонов: ASP, JSP ΠΈ PHP.

БистСма Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ web-сайтов Apache::ASP ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ кросс-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹Π΅ срСдства, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ Π² систСмС программирования ActiveState PerlScript для web-сСрвСра Microsoft IIS. Π’ этом ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ ΡΠΎΡ‡Π΅Ρ‚Π°ΡŽΡ‚ΡΡ СстСствСнноС прСдставлСниС HTML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ³Π°Ρ‚Ρ‹Π΅ возмоТности языка программирования. Π’ шаблонС HTML-страницы ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅Π³Π°ΠΌΠΈ <% ΠΈ %> Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС Perl, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ запроса Π½Π° страницу. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния этих Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ страницу, которая отсылаСтся ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ. Если ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с гостСвой ΠΊΠ½ΠΈΠ³ΠΎΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ классы ΠΈΠ· состава Apache::ASP, Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:


<html> <head> <!-- шапка HTML-страницы --> <meta http-equiv="content-type" content="text/html; charset=windows-1251"> <title>ГостСвая ΠΊΠ½ΠΈΠ³Π°</title> </head> <body> <!-- Ρ‚Π΅Π»ΠΎ HTML-страницы --> <h3>Π—Π΄Π΅ΡΡŒ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ свой ΠΎΡ‚Π·Ρ‹Π²</h3> <form method="POST"> <!-- Π½Π°Ρ‡Π°Π»ΠΎ HTML-Ρ„ΠΎΡ€ΠΌΡ‹ --> <br/>Имя: <!-- 1-Π΅ ΠΏΠΎΠ»Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ --> <input name="nick" type="text" size="8" value="<%=$Request->Form('nick')%>"/> <br/>Π­-ΠΏΠΎΡ‡Ρ‚Π°: <!-- 2-Π΅ ΠΏΠΎΠ»Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ --> <input name="email" type="text" size="32" value="<%=$Request->Form('email')%>"/> <br/>ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ:<br/> <!-- 3-Π΅ ΠΏΠΎΠ»Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ --> <textarea name="comments" rows="5" cols="50"> <%=$Request->Form('comments')%> </textarea><br/> <input type="submit" value="ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ"/> <!-- ΠΊΠ½ΠΎΠΏΠΊΠ° --> </form> <!-- ΠΊΠΎΠ½Π΅Ρ† HTML-Ρ„ΠΎΡ€ΠΌΡ‹ --> <hr/> <% if($Request->Form('nick')) { %> <a href="mailto:<%=$Request->Form('email')%>"> <%=$Request->Form('nick')%> </a> ΠΏΠΈΡˆΠ΅Ρ‚:<br/> <%=$Request->Form('comments')%><br/> <hr/> <% } %> </body> </html>


ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ значСниям ΠΏΠΎΠ»Π΅ΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ происходит с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Form ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° $Request, хранящСго ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ HTTP-запроса. БистСма Apache::ASP прСдоставляСт программисту ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ срСдств для динамичСского создания страниц, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ срСдства Ρ€Π°Π±ΠΎΡ‚Ρ‹ с клиСнтскими сСансами. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ возмоТности встроСнного Π² ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ языка Perl, напишСм шаблон ASP, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ web-интСрфСйс ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Perl Π² Π½Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для извлСчСния ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΌΠΎΠ»Π»ΡŽΡΠΊΠ°Ρ…, производящих ΠΆΠ΅ΠΌΡ‡ΡƒΠΆΠΈΠ½Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ для формирования Π² Ρ†ΠΈΠΊΠ»Π΅ строк Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½Π° основании Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² запроса. Π€Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Perl, встроСнныС Π² тСкст шаблона, Π²Ρ‹Π΄Π΅Π»Π΅Π½Ρ‹ ΠΆΠΈΡ€Π½Ρ‹ΠΌ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ:


<% # Π½Π°Ρ‡Π°Π»ΠΎ встроСнного Perl use DBI; # ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ DBI my $table = "mollusc"; # ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ ΠΊ Π‘Π” my $dbh = # Ρ‡Π΅Ρ€Π΅Π· Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ DBD::SQLite DBI->connect("dbi:SQLite:dbname=$table","","") or die; my $sth = # Π³ΠΎΡ‚ΠΎΠ²ΠΈΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ строк Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ $dbh->prepare("SELECT id,name,latin,area FROM $table") or die $dbh->errstr; $sth->execute() or die $sth->errstr(); # ΠΈ выполняСм запрос %> <html> <!-- Π½Π°Ρ‡Π°Π»ΠΎ шаблона --> <head><meta http-equiv="content-type" content="text/html; charset=windows-1251"> <title>ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡ Ρ€Π°ΠΊΠΎΠ²ΠΈΠ½</title></head> <body> <h3 style="color:blue;">ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡ Ρ€Π°ΠΊΠΎΠ²ΠΈΠ½</h3> <table border="1" cellpadding="1" cellspacing="0"> <!-- Π² Ρ†ΠΈΠΊΠ»Π΅ заполняСм строки Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠ· Π‘Π” --> <% while (my $row = $sth->fetchrow_hashref) { %> <tr> <td rowspan="2"><img src="<%=$row->{id}%>.jpg"/></td> <td><b><%=$row->{name}%></b> <br/><i><%=$row->{latin}%></i></td> </tr> <tr><td><%=$row->{area}%></td></tr> <% } %> </table> <% $dbh->disconnect; %> <!-- отсоСдиняСмся ΠΎΡ‚ Π‘Π” --> <body> <html> <!-- ΠΊΠΎΠ½Π΅Ρ† шаблона -->


HTML-страница, сформированная Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π½Π° рис. 18.2. ΠŸΡ€ΠΈ нСобходимости нСслоТно Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ поиск ΠΏΠΎ любой ΠΈΠ· ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

Рис. 18.2.  Web-интСрфСйс ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…

Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ°Ρ унификация рСсурсов сСти Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ базируСтся Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ XML - Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΠ³ΠΎ языка Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ (eXtensible Markup Language), стандартизованного консорциумом W3C. XML описываСт ΠΏΡ€Π°Π²ΠΈΠ»Π° создания ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… языков Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… XML-прилоТСниями (XML application). К настоящСму Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ созданы сотни ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… языков Π½Π° основС синтаксиса XML. Π‘Ρ€Π΅Π΄ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнных языков ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ CML (описаниС химичСских Π΄Π°Π½Π½Ρ‹Ρ…), GML (описаниС гСографичСских Π΄Π°Π½Π½Ρ‹Ρ…), Jabber (ΠΎΠ±ΠΌΠ΅Π½ сообщСниями), MathML (описаниС матСматичСских Ρ„ΠΎΡ€ΠΌΡƒΠ»), RDF (описаниС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… рСсурсов), SMIL (описаниС ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Π΄ΠΈΠΉΠ½Ρ‹Ρ… ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΠΉ), RSS (Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ содСрТимого сайтов), SVG (ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠ°Ρ вСкторная Π³Ρ€Π°Ρ„ΠΈΠΊΠ°), WDDX (ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ), WebDAV (web-ΠΏΠ°ΠΏΠΊΠΈ), XML/EDI (ΠΎΠ±ΠΌΠ΅Π½ бизнСс-Π΄Π°Π½Π½Ρ‹ΠΌΠΈ), XML-RPC (ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€), XUL (описаниС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса). ИспользованиС Π΅Π΄ΠΈΠ½ΠΎΠΉ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ XML для ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… языков Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ позволяСт ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌΠΈ срСдствами. Π―Π·Ρ‹ΠΊΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ Π½Π° основС XML ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ прСимущСствСнно для описания Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… областях Π·Π½Π°Π½ΠΈΠΉ. Π’ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ XML Π΄Π°Π½Π½Ρ‹Π΅ прСдставлСны Π² тСкстовом Π²ΠΈΠ΄Π΅, Ρ‡Π°Ρ‰Π΅ всСго с использованиСм ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ UTF-8, поэтому ΠΎΠ½ΠΈ Π±Π΅Π· Ρ‚Ρ€ΡƒΠ΄Π° ΠΏΠ΅Ρ€Π΅ΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΏΠΎ сСти ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ Π½Π° всСх ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…. Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΡ‹ΠΉ язык стилСй XSL (eXtensible Style Language) создан для ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ прСобразования XML Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ прСдставлСния XML-Π΄Π°Π½Π½Ρ‹Ρ… Π² Π²ΠΈΠ΄Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ HTML ΠΈΠ»ΠΈ RTF.

Π’ Perl имССтся Π±ΠΎΠ³Π°Ρ‚Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ срСдств для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ языками Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ Π½Π° основС XML: это ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅ инструмСнты, ΠΈ спСциализированныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… XML-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Использованию XML-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° языкС Perl посвящСна ΠΊΠ½ΠΈΠ³Π° [19] ΠΈ Π΅Π΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ [45], Π° Π² ΠΊΠ½ΠΈΠ³Π΅ [30] рассматриваСтся Ρ€Π°Π±ΠΎΡ‚Π° с Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠΉ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ SVG. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° познакомимся с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ SVG, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠΉ для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ создания ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Ρ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ XML. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ прСдставлСниС ΠΎΠ± этом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ΠΈ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ возмоТности этой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, напишСм CGI-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, динамичСски Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ SVG. Она Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° простой Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ распрСдСлСниС Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ посСщаСмости сайта ΠΏΠΎ основным Π΄ΠΎΠΌΠ΅Π½Π°ΠΌ:


use CGI qw/:standard/; # ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ CGI use SVG; # ΠΈ SVG my $p = CGI->new; # создадим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ CGI ΠΈ Π·Π°Π΄Π°Π΄ΠΈΠΌ print $p->header(-type=>'image/svg+xml'); # Ρ‚ΠΈΠΏ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° # создадим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ SVG Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 400 Π½Π° 300 пиксСлСй my $svg= SVG->new(width=>400, height=>300); # размСстим синий тСкст, начиная с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ 32,32 $svg->text(x=>32,y=>32, style=>"font-size:15;fill:blue" )->cdata('ΠŸΠΎΡΠ΅Ρ‰Π°Π΅ΠΌΠΎΡΡ‚ΡŒ сайта: распрСдСлСниС ΠΏΠΎ Π΄ΠΎΠΌΠ΅Π½Π°ΠΌ'); # Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для размСщСния 4-Ρ… полос Π³Ρ€Π°Ρ„ΠΈΠΊΠ° bar(20, 50, 'red', 55, '.RU'); bar(20, 80, 'blue', 24, '.COM'); bar(20, 110, 'green', 12, '.ORG'); bar(20, 140, 'black', 9, 'ΠΏΡ€ΠΎΡ‡ΠΈΠ΅'); # размСстим тСкст с вСрсиями ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… срСдств: $svg->text(x=>12,y=>200, )->cdata("Perl $] + ". # вСрсия Perl "SVG.pm $SVG::VERSION + ". # вСрсия модуля SVG "CGI.pm $CGI::VERSION"); # вСрсия модуля CGI my $out = $svg->xmlify(); # ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ тСкст XML print $out; # ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠΌ Π΅Π³ΠΎ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρƒ sub bar { # ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π²ΠΎΠ΄Π° ΠΎΠ΄Π½ΠΎΠΉ строки Π³Ρ€Π°Ρ„ΠΈΠΊΠ°, # ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹, Ρ†Π²Π΅Ρ‚, % ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ my ($x, $y, $color, $procent, $caption) = @_; # Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Ρƒ $svg->rectangle( x => $x, y => $y, height => 30, width => $procent*10, style => "opacity:1; fill:$color; fill-opacity:0.4" ); # ΠΈ ΠΏΠΎΡΡΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ тСкст ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° $svg->text( x=>$x+5,y=>$y+20,style=>"font-size:15;fill:$color" )->cdata("$caption $procent %"); }


SVG-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, сформированный Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, - это тСкстовый Ρ„Π°ΠΉΠ» Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ XML, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: