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

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

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

Аналогичного Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΡΡ‚ΠΈΠ³Π½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΈ использовании Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… строковых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ Π΄Π°Π»Π΅Π΅ Π² этой Π»Π΅ΠΊΡ†ΠΈΠΈ.

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ Π²ΠΈΠ΄ΠΎΠΌ нСпосрСдствСнной записи Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ тСкстовой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ встроСнныС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ (here-documents). Π­Ρ‚Π° конструкция, заимствованная ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ языка Unix, прСдставляСт ΠΈΠ· сСбя встроСнный Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ тСкст. ВстроСнный Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ начинаСтся символами <<, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² указываСтся ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒ, ΠΎΡ‚ΠΌΠ΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ½Π΅Ρ† Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. ВсС строки, начиная со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ, Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ содСрТимоС этого Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ встрСтится строка, состоящая Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ограничитСля. ΠžΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ½Π΅Ρ† встроСнного Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ строкС с самого Π΅Π΅ Π½Π°Ρ‡Π°Π»Π°.


$here_document = <<END_OF_DOC; Π—Π΄Π΅ΡΡŒ располагаСтся тСкст встроСнного Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ записываСтся с Π½Π°Ρ‡Π°Π»Π° Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ строкС. END_OF_DOC


Если ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒ с ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ, Ρ‚ΠΎ Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, Π° Ссли ΠΎΠ½ записан ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Π΅ΠΉ, Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π°Π³ΠΌΠΎΠΉ use locale Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΡƒΡ‡Π΅Ρ‚ Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… установок:


use locale; $here_document = <<'ΠšΠžΠΠ•Π¦ Π”ΠžΠšΠ£ΠœΠ•ΠΠ’Π'; ЭВО НЕ ΠšΠžΠΠ•Π¦ Π”ΠžΠšΠ£ΠœΠ•ΠΠ’Π ΠšΠžΠΠ•Π¦ Π”ΠžΠšΠ£ΠœΠ•ΠΠ’Π


Π’ΠΎ встроСнных Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ… производится интСрполяция ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒ here-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π½Π΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ апострофы. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ встроСнныС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ часто ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ для комбинирования ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ тСкста со значСниями ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠ°ΠΊ это сдСлано Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:


$here_document = <<"END_OF_DOCUMENT"; # присваиваниС строкС Π£Π²Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΉ $guests[$n]! ΠŸΡ€ΠΈΠ³Π»Π°ΡˆΠ°Π΅ΠΌ Вас Π½Π° ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΊΠ½ΠΈΠ³ΠΈ "$title", которая состоится $date Π² $time. ΠžΡ€Π³ΠΊΠΎΠΌΠΈΡ‚Π΅Ρ‚. END_OF_DOCUMENT print $here_document, '-' x 65, "\n";


НапримСр, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ here-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π»Π΅Π³ΠΊΠΎ ΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ HTML-страницу, вставляя Π² Π½Π΅Π΅ Π½ΡƒΠΆΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ:


$web_page = <<HTML; # ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ here-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=$encoding"/> <meta name="author" content="$author"/> <title>$title</title> </head> <body> <h3 style="text-align: center;">$header</h3> <div align="justify">$article{$number}</div>

<a href="$hyperlink">Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ Ρ€Π°Π·Π΄Π΅Π»Ρƒ $topic</a>

<hr/><small>Copyright Β© $year, $author.</small> </body> </html> HTML


Π­Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· способов динамичСского создания Π½Π° web-сСрвСрС гипСртСкстовых страниц Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° запрос ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠΉ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… лСкциях ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΈΡΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ:

[x]. chomp(), ΡƒΠ΄Π°Π»ΡΡŽΡ‰Π°Ρ Π² ΠΊΠΎΠ½Ρ†Π΅ строки символ-Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ записСй;

[x]. chop(), ΠΎΡ‚ΡΠ΅ΠΊΠ°ΡŽΡ‰Π°Ρ любой послСдний символ строки;

[x]. join(), ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰Π°Ρ элСмСнты массива Π² ΠΎΠ΄Π½Ρƒ строку;

[x]. split(), Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‰Π°Ρ строку Π½Π° список подстрок.

Π’ этой Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΌΡ‹ познакомимся с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ встроСнными функциями для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с тСкстом. Π₯отя Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π΄Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки, использованиС скобок ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ссли Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ нСоднозначности опрСдСлСния Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Часто трСбуСтся Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, содСрТит Π»ΠΈ строка Ρ‚Ρƒ ΠΈΠ»ΠΈ ΠΈΠ½ΡƒΡŽ подстроку. Ѐункция index() выполняСт поиск подстроки Π² строкС, начиная с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ смСщСния, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠΉ подстроки. Ѐункция rindex() ΠΈΡ‰Π΅Ρ‚ подстроку ΠΎΡ‚ ΠΊΠΎΠ½Ρ†Π° строки ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ послСднСй подстроки Π² строкС ΠΏΠ΅Ρ€Π΅Π΄ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ смСщСниСм. Π‘ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‚ΠΎΠ³Π΄Π° поиск производится Π²ΠΎ всСй строкС. НомСра ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ подстроки ΠΈ смСщСния Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с нуля. Если подстрока Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π°, возвращаСтся -1. НапримСр:


$pos = index($string, $sub_string, $offset); # с Π½Π°Ρ‡Π°Π»Π° $last_pos = rindex($string, $sub_string, $offset); # с ΠΊΠΎΠ½Ρ†Π° print "Π΅ΡΡ‚ΡŒ ΠΏΡ€Π°Π²Π΄Π°!" if(index($life, 'ΠΏΡ€Π°Π²Π΄Π°') != -1);


Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅ Π±ΡƒΠ΄Π΅Ρ‚ рассказано ΠΎ рСгулярных выраТСниях, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π³ΠΈΠ±ΠΊΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ поиском подстроки, задавая ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ соотвСтствия ΠΈ располоТСниС подстрок ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Ρ‹ тСкста - Ρ‚Π°ΠΊΠΆΠ΅ вСсьма распространСнная опСрация. Ѐункция length() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π»ΠΈΠ½Ρƒ Π² символах значСния строки ΠΈΠ»ΠΈ выраТСния, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅Π³ΠΎ строку ΠΈΠ»ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊ строкС:


$string_length = length($string); # строка Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $n *= 2 until(length($n)>10); # Π΄Π»ΠΈΠ½Π° числа print 'ВСкст слишком Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ' if length($s1 . $s2) > $limit;


Ѐункция substr(), Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°Ρ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ подстроки ΠΈΠ· строки, всСгда Π±Ρ‹Π»Π° ΠΎΡ‡Π΅Π½ΡŒ популярной Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ языков (ΠΊΡ€ΠΎΠΌΠ΅ Perl, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ это дСйствиС Ρ‡Π°Ρ‰Π΅ выполняСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ). Она ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠ· строки подстроку Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹, начиная с ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ смСщСния. Если смСщСниС ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅, Ρ‚ΠΎ ΠΎΠ½ΠΎ отсчитываСтся ΠΎΡ‚ ΠΊΠΎΠ½Ρ†Π° строки. Если Π΄Π»ΠΈΠ½Π° подстроки Π½Π΅ Π·Π°Π΄Π°Π½Π°, Ρ‚ΠΎ копируСтся строка послС смСщСния Π΄ΠΎ самого ΠΊΠΎΠ½Ρ†Π°:


$sub = substr($string, # ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² $sub ΠΈΠ· $string, $offset, # отступив $offset символов, $length); # подстроку Π΄Π»ΠΈΠ½ΠΎΠΉ $length $e = substr($s, rindex($s,'.')); # ΠΎΡ‚ послСднСй '.' Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° $last_char = substr($string, -1, 1); # послСдний символ


ΠΠ΅ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ substr() Π² Perl состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ для измСнСния строки, ΠΎΡ‚Π½ΠΎΡΡΡΡŒ ΠΊ Π³Ρ€ΡƒΠΏΠΏΠ΅ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… лСвосторонних Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡ‚ΡŒΡΡ Π² Π»Π΅Π²ΠΎΠΉ части ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания. Π’ этом случаС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, стоящСС Π² ΠΏΡ€Π°Π²ΠΎΠΉ части присваивания, замСняСт подстроку, которая извлСкаСтся ΠΈΠ· строки Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ substr(), стоящСй слСва ΠΎΡ‚ Π·Π½Π°ΠΊΠ° присваивания. НапримСр, Π²ΠΎΡ‚ Ρ‚Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ подстроку Π΄Π»ΠΈΠ½ΠΎΠΉ Π² Π΄Π²Π° символа, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΡƒΡŽΡΡ с символа с индСксом 5, Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠΉ строкой:


$string = 'Perl 5 нравится программистам.'; $new_string = '6 Ρ‚ΠΎΠΆΠ΅ ΠΏΠΎ'; substr($string, 5, 2) = $new_string; # Π² $string Π±ΡƒΠ΄Π΅Ρ‚: 'Perl 6 Ρ‚ΠΎΠΆΠ΅ понравится программистам.'


ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ послСдниС 5 символов строки, Π·Π°ΠΌΠ΅Π½ΠΈΠ² ΠΈΡ… пустой строкой:


substr($string, -5) = ''; # ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ послСдниС 5 символов


БочСтая ΡƒΠΆΠ΅ извСстныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ манипуляции с тСкстовой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ. НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ слова Π² строкС, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ функциями split(), reverse() ΠΈ join() Π² списочном контСкстС:


$reverse_words = join(' ', reverse(split(' ', $text)));


Π’ Perl Π΅ΡΡ‚ΡŒ Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для прСобразования Π±ΡƒΠΊΠ² ΠΈΠ· Π·Π°Π³Π»Π°Π²Π½Ρ‹Ρ… Π² строчныС ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. Для ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ прСобразования русских Π±ΡƒΠΊΠ² Π½ΡƒΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… установок ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€Π°Π³ΠΌΡ‹ use locale. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ тСкст ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΌΡƒ рСгистру (lower case) ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ lc(), которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ тСкстового выраТСния, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΊ строчным Π±ΡƒΠΊΠ²Π°ΠΌ:


use locale; # ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ установки $lower_case = lc($text); # ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊ малСньким Π±ΡƒΠΊΠ²Π°ΠΌ


Ѐункция lcfirst() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ строкового выраТСния, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΌΡƒ рСгистру, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


$first_char_lower = lcfirst($text); # 'Perl' станСт 'perl'


К Π²Π΅Ρ€Ρ…Π½Π΅ΠΌΡƒ рСгистру (upper case) ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ тСкст ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ uc(), которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ символьного выраТСния, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΊ Π·Π°Π³Π»Π°Π²Π½Ρ‹ΠΌ Π±ΡƒΠΊΠ²Π°ΠΌ.


use locale; $upper_case = uc($text); # ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊ большим Π±ΡƒΠΊΠ²Π°ΠΌ


Ѐункция ucfirst() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ строкового выраТСния, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ ΠΊ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌΡƒ рСгистру. Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ имя собствСнноС с Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡƒΠΊΠ²Ρ‹:


$capitalized = ucfirst($name); # 'Π»Π°Ρ€Ρ€ΠΈ' станСт 'Π›Π°Ρ€Ρ€ΠΈ'


ВстроСнная функция crypt() выполняСт ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ строки, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΉ Π΅ΠΉ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² качСствС "Π·Π°Ρ‚Ρ€Π°Π²ΠΊΠΈ" (salt) для ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ:


# Π½Π΅Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½Π°Ρ строка ΠΈΠ· $plain ΡˆΠΈΡ„Ρ€ΡƒΠ΅Ρ‚ΡΡ Π² $crypted $crypted = crypt($plain, $salt);


Π­Ρ‚Π° функция Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠ°Ρ€Π½ΠΎΠΉ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Ρ‡Π°Ρ‰Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для сравнСния ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ тСкста с ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ строкой, ΠΊΠ°ΠΊ это дСлаСтся Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:


if (crypt($plain, $salt) eq $crypted) { # ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ тСкст совпал с Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ }


Ѐункция quotemeta() Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π² символьном Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ мСтасимволы (ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ) ΠΈΠ»ΠΈ escape-ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку, Π³Π΄Π΅ Ρƒ всСх ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… символов ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½ΠΎ ΠΈΡ… особоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: для этого ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΈΠ· Π½ΠΈΡ… ставится символ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ косой Ρ‡Π΅Ρ€Ρ‚Ρ‹ '\'.


$string_with_meta = '\n \032 \x00 text \t \v "'; $quoted = quotemeta($string_with_meta); # Π² $quoted Π±ΡƒΠ΄Π΅Ρ‚ '\\n\ \\032\ \\x00\ text\ \\t\ \\v\ \"'


Π’ Perl имССтся нСсколько Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ прСобразования строкового прСдставлСния числа Π² числовоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Ѐункция hex() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ дСсятичноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ выраТСния, прСдставлСнного ΠΊΠ°ΠΊ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚ΠΈΡ€ΠΈΡ‡Π½ΠΎΠ΅ число Π² Π²ΠΈΠ΄Π΅ строки: