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

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

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

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ Π±Π»ΠΎΠΊ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² конструкции eval, ΠΊΠ°ΠΊ ΠΈ Π² конструкции do, становится Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Он компилируСтся ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈ выполняСтся Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ошибки Π΅Π³ΠΎ выполнСния Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ приводят ΠΊ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠΌΡƒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Ρƒ ошибки ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΈΠ· ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ [email protected], Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ eval Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ послСднСго прСдлоТСния Π² Π±Π»ΠΎΠΊΠ΅. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ eval:


$result = eval { # Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊ $x = 0; $y = 5; $z = $y / $x; # здСсь Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° 0 }; # Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅ΠΌ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ с запятой unless ( [email protected]) { # ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π½Π° ошибки print "Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ вычислСно: $result"; } else { print "Ошибка вычислСния: [email protected]"; }


Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° Perl, ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π², ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€Π°Π³ΠΌΡ‹ - указания компилятору ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΉ систСмС Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ дСйствия ΠΈΠ»ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. ΠŸΡ€Π°Π³ΠΌΡ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΈ компиляции ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ, ΠΈΡ… довольно ΠΌΠ½ΠΎΠ³ΠΎ, ΠΈ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈΡ… описаниС ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. ΠžΡ‡Π΅Π½ΡŒ рСкомСндуСтся Π² Π½Π°Ρ‡Π°Π»ΠΎ любой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΏΡ€Π°Π³ΠΌΡ‹, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ Π·Π° Π±ΠΎΠ»Π΅Π΅ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΏΡ€Π°Π²ΠΈΠ» ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ:


use strict; # ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ нСбСзопасных конструкций use warnings; # Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ прСдупрСТдСния компилятора use diagnostics; # Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ диагностику ошибок


Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ диагностика компилятора ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΡ… ошибок ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€Π°Π³ΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Π² любом мСстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова use ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ нСобходимости с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова no, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


use integer; # Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ цСлочислСнныС вычислСния print 10 / 3; # Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: 3 no integer; # ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ цСлочислСнныС вычислСния print 10 / 3; # Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: 3.33333333333333


Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€Π°Π³ΠΌΡ‹ use constant ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ константы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π·Π°Π³Π»Π°Π²Π½Ρ‹ΠΌΠΈ Π±ΡƒΠΊΠ²Π°ΠΌΠΈ. Π­Ρ‚ΠΎ дСлаСтся Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:


use constant PI => 3.141592653; # число ΠΏΠΈ


Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€Π°Π³ΠΌΡ‹ use locale Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ дСйствиС Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… систСмных установок для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ со строками Π½Π° русском языкС:


use locale;


По Ρ…ΠΎΠ΄Ρƒ изучСния ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π»Π΅ΠΊΡ†ΠΈΠΉ Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΏΡ€Π°Π³ΠΌΡ‹, Π° Π² Π»Π΅ΠΊΡ†ΠΈΠΈ 13 Π±ΡƒΠ΄Π΅Ρ‚ описано ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ use для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» этой Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π²ΡˆΠΈΠΉΡΡ Π² Π»Π΅ΠΊΡ†ΠΈΠΈ 1 ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ TMTOWTDI: Π² Perl часто сущСствуСт нСсколько синонимичных конструкций, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Π°Π²Ρ‚ΠΎΡ€Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ свой замысСл Π² ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½ΠΎΠΌ для Π½Π΅Π³ΠΎ стилС. Perl - Π΄Π΅ΠΌΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‡Π½Ρ‹ΠΉ язык, ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΈΡˆΠ΅Ρ‚ Π½Π° Π½Π΅ΠΌ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π΅ΠΌΡƒ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Π΅Π΅: Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉ программист ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ простыС срСдства, писавший Ρ€Π°Π½Π΅Π΅ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ языкС Π½Π°ΠΉΠ΄Π΅Ρ‚ для сСбя Π·Π½Π°ΠΊΠΎΠΌΡ‹Π΅ конструкции, Π° ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΉ Perl-Ρ…Π°ΠΊΠ΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ³Π»ΡƒΠ±ΠΈΡ‚ΡŒΡΡ Π² синтаксичСскиС Π΄Π΅Π±Ρ€ΠΈ. Π—Π° ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π³ΠΎΠ΄Ρ‹ использования Perl Ρ†Π΅Π»ΠΎΠΉ Π°Ρ€ΠΌΠΈΠ΅ΠΉ программистов Π² Π½Π΅ΠΌ слоТились устойчивыС выраТСния (idioms, ΠΈΠ΄ΠΈΠΎΠΌΡ‹), ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ пословицам ΠΈ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΊΠ°ΠΌ Π² СстСствСнных языках. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ привСсти Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ…:


# 1. Π’Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ бСсконСчный Ρ†ΠΈΠΊΠ» for (;;) # читаСтся "forever" - "всСгда" { } # Ρ‚Π΅Π»ΠΎ бСсконСчного Ρ†ΠΈΠΊΠ»Π° # 2. ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ open FILE or die; # "ΠΎΡ‚ΠΊΡ€ΠΎΠΉ Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ ΡƒΠΌΡ€ΠΈ!" # 3. Π§ΠΈΡ‚Π°Ρ‚ΡŒ строки ΠΈΠ· Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ ΠΈΡ…, # ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π±ΡƒΡ„Π΅Ρ€Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ while (<>) { print; } # 4. ΠŸΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ # Ρ‚ΠΎΠ»ΡŒΠΊΠΎ, Ссли Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ $variable ||= $default_value;


Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π»Π΅ΠΊΡ†ΠΈΠΉ Π±ΡƒΠ΄ΡƒΡ‚ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Ρ‚ΡŒΡΡ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ идиоматичСскиС выраТСния, ΠΏΡ€ΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ спСцифичСский ΠΊΠΎΠ»ΠΎΡ€ΠΈΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ Π½Π° языкС Perl.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΡ€ Π²ΠΎΠ»Π΅Π½ ΠΎΡ„ΠΎΡ€ΠΌΠ»ΡΡ‚ΡŒ свои ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΌ для Π½Π΅Π³ΠΎ стилС. Perl Π½Π΅ навязываСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. ΠžΠ±Ρ‰Π΅ΠΏΡ€ΠΈΠ½ΡΡ‚Ρ‹Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΡΡ‚ΠΈΠ»ΡŽ оформлСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Ρ‹ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ стандартной Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:


perldoc perlstyle


Π’ соотвСтствии c ΡƒΡΡ‚ΠΎΡΠ²ΡˆΠΈΠΌΠΈΡΡ традициями, типичная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° языкС Perl скорСС всСго Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:


# Π²Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ use strict; # Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ... use warnings; # ... диагностики # use Env; # ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½ΡƒΠΆΠ½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ (см. Π»Π΅ΠΊΡ†ΠΈΡŽ 13) # package main; # объявлСниС ΠΏΠ°ΠΊΠ΅Ρ‚Π° (см. Π»Π΅ΠΊΡ†ΠΈΡŽ 13) my $message = 'ΠŸΡ€ΠΈΠ²Π΅Ρ‚!'; # объявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ print $message; # запись Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ # описаниС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² ΠΎΡ‚Ρ‡Π΅Ρ‚Π° (см. Π»Π΅ΠΊΡ†ΠΈΡŽ 10) # описаниС ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (см. Π»Π΅ΠΊΡ†ΠΈΡŽ 12) __END__ # Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ†Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹


Π’ этой Π»Π΅ΠΊΡ†ΠΈΠΈ рассмотрСны синтаксичСскиС ΠΏΡ€Π°Π²ΠΈΠ»Π° составлСния ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС Perl, ΠΈΠ·ΡƒΡ‡ΠΈΠ² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠœΠ½ΠΎΠ³ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΠ΅ синтаксичСских конструкций позволяСт Π°Π²Ρ‚ΠΎΡ€Ρƒ, исходя ΠΈΠ· своих ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠΉ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ ΠΈΠ· конструкций-синонимов для выраТСния особСнностСй Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π·Π°Π΄Π°Ρ‡ΠΈ. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎ синтаксисС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ, снабТСнныС многочислСнными ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² Perl-ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ Π²Ρ‹Π²ΠΎΠ΄Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ:


perldoc perlsyn


ЛСкция 5. Бписки ΠΈ массивы

Π’ этой Π»Π΅ΠΊΡ†ΠΈΠΈ рассмотрСны списки - ΠΎΠ΄ΠΈΠ½ ΠΈΠ· основных Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π² Perl. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π²ΠΈΠ΄Π΅ списков ΠΈ массивов - ΠΎΡ‡Π΅Π½ΡŒ СстСствСнно для Perl-программистов. А Π±ΠΎΠ³Π°Ρ‚Ρ‹Π΅ срСдства Ρ€Π°Π±ΠΎΡ‚Ρ‹ со списками, массивами ΠΈ срСзами массивов, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π² этой Π»Π΅ΠΊΡ†ΠΈΠΈ, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ ΡˆΠΈΡ€ΠΎΠΊΠΈΠ΅ возмоТности ΠΏΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ….

ЦСль Π»Π΅ΠΊΡ†ΠΈΠΈ: ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ со списками ΠΈ массивами, ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ возмоТности Ρ€Π°Π±ΠΎΡ‚Ρ‹ со списочными Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² Perl, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ встроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² списочном ΠΈ скалярном контСкстах.

Помимо ΡƒΠΆΠ΅ ΠΈΠ·ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… скалярных Π΄Π°Π½Π½Ρ‹Ρ…, Π² Perl ΡˆΠΈΡ€ΠΎΠΊΠΎ примСняСтся Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… - списки. Если скаляры ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°, Ρ‚ΠΎ списки, ΠΊΠ°ΠΊ ΠΈ Π² ΠΆΠΈΠ·Π½ΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½Π°Π±ΠΎΡ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Ρ… ΠΈΠ»ΠΈ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Ρ€Π°Π·Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ для Ρ€Π΅ΡˆΠ°Π΅ΠΌΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, "список Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊΠΎΠ²", "ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²", "опись Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ²" ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅). Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя, всСгда ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ элСмСнту списка ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ…Ρ€Π°Π½ΡΡ‰ΡƒΡŽΡΡ Π² Π½Π΅ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π½ΡƒΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈ нСобходимости повторяя дСйствия для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта массива.

Π˜Ρ‚Π°ΠΊ, список - это упорядочСнная ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… скалярных Π΄Π°Π½Π½Ρ‹Ρ… Π² Π²ΠΈΠ΄Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Бпособом прСдставлСния значСния списка Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ являСтся списочный Π»ΠΈΡ‚Π΅Ρ€Π°Π», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ записываСтся Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… запятыми ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ списочных Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ²:


(256, 512, 1024, 2048, 4096) # список ΠΈΠ· 5 чисСл ('John', 'Paul', 'George', 'Ringo') # список ΠΈΠ· 4 строк ("Perl", 5.8) # список ΠΈΠ· строковых ΠΈ числовых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ


Для записи списка тСкстовых строк, состоящих ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ слова, прСдусмотрСна ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° списочного Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ послС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова qw (сокращСниС ΠΎΡ‚ quoted words - "слова Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…") Π² скобках Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ строки, Π½Π΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ΠΈ раздСляСмыС ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ символами. Π’ качСствС скобок ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ символы: (), {}, //, \\, [] , <> ΠΈ Π΄Π°ΠΆΠ΅ просто ΠΏΠ°Ρ€Π½Ρ‹Π΅ символы, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ !! ΠΈΠ»ΠΈ ##. НапримСр:


qw(это ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ) # вмСсто ('это', 'ΠΎΡ‡Π΅Π½ΡŒ', 'ΡƒΠ΄ΠΎΠ±Π½ΠΎ') qw/John Paul George Ringo/ # список слов, располоТСнный Π½Π° 2 строках


Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ списочного Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ строки ΠΈ числа, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ скалярныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ выраТСния. ΠŸΡƒΡΡ‚ΠΎΠΉ список Π½Π΅ содСрТит элСмСнтов ΠΈ прСдставляСтся списочным Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠΌ Π±Π΅Π· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (ΠΎΠ΄Π½ΠΈΠΌΠΈ ΠΊΡ€ΡƒΠ³Π»Ρ‹ΠΌΠΈ скобками).


('One', $x, $x+$y-$z, 2*5) # список Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ² ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ () # пустой список


Бписочный Π»ΠΈΡ‚Π΅Ρ€Π°Π» ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, которая записываСтся Π² Π²ΠΈΠ΄Π΅ Π΄Π²ΡƒΡ… скалярных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ:


Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅_Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ .. ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅_Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅


Π’ списочном контСкстС эта опСрация Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ список начинаСтся со значСния Π»Π΅Π²ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π² Ρ†ΠΈΠΊΠ»Π΅ увСличиваСтся Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ достигнуто Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:


5 .. 10 # Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ список (5, 6, 7, 8, 9, 10) 5.3 .. 7.1 # Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ список (5.3, 6.3), Ρ‚. ΠΊ. 7.3 > 7.1 7 .. 5 # Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ пустой список (), Ρ‚. ΠΊ. 5 < 7 $m .. $n # Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ значСниями ΠΎΡ‚ $m Π΄ΠΎ $n


Если опСрация Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° примСняСтся ΠΊ строкам, Ρ‚ΠΎ значСния списка Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π°Π²Ρ‚ΠΎΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°. Π‘ Π΅Π΅ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ списочныС Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹:


(-2 .. 2) # список чисСл (-2, -1, 0, 1, 2) (25, 53, 77 .. 79) # список (25, 53, 77, 78, 79) ('A'..'Z','a'..'z') # список Π·Π°Π³Π»Π°Π²Π½Ρ‹Ρ… ΠΈ строчных Π±ΡƒΠΊΠ² ($start .. $finish) # список Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΡ‚ $start Π΄ΠΎ $finish