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

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

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

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ next (Π°Π½Π°Π»ΠΎΠ³ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° continue Π² языкС C) примСняСтся, ΠΊΠΎΠ³Π΄Π° трСбуСтся ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² Ρ‚Π΅Π»Π΅ Ρ†ΠΈΠΊΠ»Π° ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, Π½Π°Ρ‡Π°Π² с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ условия Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Ρ†ΠΈΠΊΠ»Π°. Π’ΠΎΡ‚ Ρ‚Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ послСдний ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ² next:


$i = 0; while ($i < 10) { # ΠΏΠΎΠΊΠ° счСтчик Π½Π΅ достигнСт 10 $random = rand; # ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ случайноС число if ($random > 0.5) { # числа большС 0.5 next; # ΠŸΠ ΠžΠŸΠ£Π‘ΠšΠΠ•Πœ дСйствия Π² Ρ‚Π΅Π»Π΅ Ρ†ΠΈΠΊΠ»Π° } print "\n", $random; # Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ число Π½Π° консоль $i++; # ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ счСтчик ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ # сюда ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΏΠΎ next }


ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ redo ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² Ρ‚Π΅Π»Π΅ Ρ†ΠΈΠΊΠ»Π° Π±Π΅Π· ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ условия Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Ρ†ΠΈΠΊΠ»Π°. Π’ΠΎΡ‚ Ρ‚Π°ΠΊΠΈΠΌ станСт послСдний ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ redo:


$i = 0; while ($i < 10) { # ΠΏΠΎΠΊΠ° счСтчик Π½Π΅ достигнСт 10 # сюда ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΏΠΎ redo $random = rand; # ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ случайноС число if ($random > 0.5) { # числа большС 0.5 redo; # Π‘ΠΠžΠ’Π ΠΠΠ§Π˜ΠΠΠ•Πœ дСйствия Π² Ρ‚Π΅Π»Π΅ Ρ†ΠΈΠΊΠ»Π° } print "\n", $random; # Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ число Π½Π° консоль $i++; # ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ счСтчик ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ }


Π’ΠΎ всСх рассмотрСнных Ρ†ΠΈΠΊΠ»Π°Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ continue. Π’ Π½Π΅ΠΌ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ дСйствия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ†ΠΈΠΊΠ»Π°, Π² Ρ‚ΠΎΠΌ числС ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ ΠΊ Π½ΠΎΠ²ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ next. ДСйствия Π² Π±Π»ΠΎΠΊΠ΅ continue Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°Ρ… ΠΏΠΎ last ΠΈ redo. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ странным, Π½ΠΎ Π³ΠΎΠ»Ρ‹ΠΉ Π±Π»ΠΎΠΊ рассматриваСтся Π² Perl ΠΊΠ°ΠΊ Ρ†ΠΈΠΊΠ», Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉΡΡ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. Π’ Ρ‚Π°ΠΊΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Ρ€Π°Π·Π° continue ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ last, next ΠΈ redo. Π‘ ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ управлСния Ρ†ΠΈΠΊΠ»ΠΎΠΌ ΠΈ Π±Π»ΠΎΠΊΠ° continue Ρ†ΠΈΠΊΠ»ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ структуру Π² ΠΎΠ±Ρ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ:


# ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Ρ†ΠΈΠΊΠ»Π°: while, until ΠΈΠ»ΠΈ for { # сюда происходит ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΏΠΎ redo # дСйствиС 1, выполняСмоС Π² Ρ†ΠΈΠΊΠ»Π΅ if (условиС Π²Ρ‹Ρ…ΠΎΠ΄Π°) { last; # Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° } # дСйствиС 2, выполняСмоС Π² Ρ†ΠΈΠΊΠ»Π΅ if (условиС продолТСния) { next; # Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° } # дСйствиС 3, выполняСмоС Π² Ρ†ΠΈΠΊΠ»Π΅ if (условиС возобновлСния) { redo; # Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Π΅Π»Π° Ρ†ΠΈΠΊΠ»Π° сначала } # дСйствиС N, выполняСмоС Π² Ρ†ΠΈΠΊΠ»Π΅ # сюда происходит ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΏΠΎ next } continue { # дСйствиС, выполняСмоС ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΎΠ²ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ Ρ†ΠΈΠΊΠ»Π° } # сюда происходит ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΏΠΎ last


Π¦ΠΈΠΊΠ»Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Ρ‹ ΠΎΠ΄ΠΈΠ½ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Когда трСбуСтся ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ», ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌ ставится ΠΌΠ΅Ρ‚ΠΊΠ°. ΠœΠ΅Ρ‚ΠΊΠ° - это ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, состоящий ΠΈΠ· латинских Π±ΡƒΠΊΠ², Π·Π½Π°ΠΊΠΎΠ² подчСркивания ΠΈ Ρ†ΠΈΡ„Ρ€ ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉΡΡ с Π±ΡƒΠΊΠ²Ρ‹, послС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ стоит Π·Π½Π°ΠΊ двоСточия. Боблюдая Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΡΡ‚ΠΈΠ»ΡŒ программирования, слСдуСт Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΠΈ Π·Π°Π³Π»Π°Π²Π½Ρ‹ΠΌΠΈ Π±ΡƒΠΊΠ²Π°ΠΌΠΈ. Π’ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ управлСния Ρ†ΠΈΠΊΠ»ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΊΠ° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ:


CYCLE_1: while (условиС продолТСния Ρ†ΠΈΠΊΠ»Π° 1) { CYCLE_2: while (условиС продолТСния Ρ†ΠΈΠΊΠ»Π° 2) { if (условиС Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· всСх Ρ†ΠΈΠΊΠ»ΠΎΠ²) { last CYCLE_1; } CYCLE3: while (условиС продолТСния Ρ†ΠΈΠΊΠ»Π° 3) { if (условия прСрывания 2-Π³ΠΎ Ρ†ΠΈΠΊΠ»Π°) { next CYCLE_2; } } # сюда ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΏΠΎ next CYCLE_2 } } # сюда ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΏΠΎ last CYCLE_1


ΠœΠ΅Ρ‚ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π΅Π΄ Π»ΡŽΠ±Ρ‹ΠΌ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π±Π»ΠΎΠΊΠ° ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² управлСния Ρ†ΠΈΠΊΠ»ΠΎΠΌ с ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ структуру, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ switch Π² языкС C. НапримСр, Ρ‚Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ присваиваниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $say Π² зависимости ΠΎΡ‚ условия:


SWITCH: { unless (defined $t) { # Ссли $t Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ $t = 25; redo SWITCH; # Π·Π°Π΄Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ } if ($t < 10) { $say = 'Ρ…ΠΎΠ»ΠΎΠ΄Π½ΠΎ'; last SWITCH; } if ($t < 18) { $say = 'ΠΏΡ€ΠΎΡ…Π»Π°Π΄Π½ΠΎ'; last SWITCH; } if ($t < 27) { $say = 'Ρ‚Π΅ΠΏΠ»ΠΎ'; last SWITCH; } $say = 'ΠΆΠ°Ρ€ΠΊΠΎ'; } print "БСгодня $say\n";


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

1ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ прСдлоТСния, ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ стоит ΠΌΠ΅Ρ‚ΠΊΠ°:

goto ΠœΠ•Π’ΠšΠ;


2ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ ΠΌΠ΅Ρ‚ΠΊΠ΅, имя ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ вычислСния выраТСния:

goto Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅;


3Π—Π°ΠΌΠ΅Π½Π° Π²Ρ‹Π·ΠΎΠ²Π° ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΡƒΡŽΡΡ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ (примСняСтся Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ°ΠΌΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Perl):

goto &ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°;


ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ goto заслуТСнно порицаСтся Ρ‚Π΅ΠΎΡ€Π΅Ρ‚ΠΈΠΊΠ°ΠΌΠΈ ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°ΠΌΠΈ программирования, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ сильно Π·Π°ΠΏΡƒΡ‚Ρ‹Π²Π°Π΅Ρ‚ Π»ΠΎΠ³ΠΈΠΊΡƒ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ стиля программирования рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ нСобходимости. Π₯отя goto ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ для Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ†ΠΈΠΊΠ»Π°, Π½ΠΎ для этого Π»ΡƒΡ‡ΡˆΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ last.

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ выполнСния дСйствий Π² простом ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Π—Π° Π»ΡŽΠ±Ρ‹ΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚ΠΎΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ²:


Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ if Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ unless Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ while Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ until Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ foreach список


ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π·Π°Π΄Π°Π΅Ρ‚ условиС выполнСния (Π² случаС if ΠΈΠ»ΠΈ unless) ΠΈΠ»ΠΈ повторСния (Π² случаС while, until ΠΈΠ»ΠΈ foreach) выраТСния. Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° вычисляСтся Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, хотя ΠΈ стоит Π² ΠΊΠΎΠ½Ρ†Π΅ конструкции. Π₯отя ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° условныС ΠΈ цикличСскиС ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ конструкции, Π½ΠΎ ΠΎΠ½ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ простыС прСдлоТСния ΠΈ поэтому Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΡƒΡŽ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π²Ρ‹Π±ΠΎΡ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ с использованиСм условных ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ²:


SWITCH: { $t = -36, redo SWITCH unless defined $t; $say = 'Ρ…ΠΎΠ»ΠΎΠ΄Π½ΠΎ', last SWITCH if $t < 10; $say = 'ΠΏΡ€ΠΎΡ…Π»Π°Π΄Π½ΠΎ', last SWITCH if $t < 18; $say = 'Ρ‚Π΅ΠΏΠ»ΠΎ', last SWITCH if $t < 27; $say = 'ΠΆΠ°Ρ€ΠΊΠΎ'; }


Иногда ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠ΅ дСйствия с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ цикличСских ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


++$count, --$sum while (rand < 0.1); $random = rand until $random > 0.7;


ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π»Π΅Π³Ρ‡Π΅ для понимания, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π°ΠΊΡ†Π΅Π½Ρ‚ пСрСносится Π½Π° основноС дСйствиС, стоящСС Π² Π½Π°Ρ‡Π°Π»Π΅ прСдлоТСния. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ запись упрощаСтся, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±Π»ΠΎΠΊ, Π° условноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки.

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


$result = do { $x=rand; $a=0; } # Π² $result Π±ΡƒΠ΄Π΅Ρ‚ присвоСн 0


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


SWITCH: { (defined $t) || do { $t = 15; redo SWITCH; }; ($t < 10) && do { $say = 'Ρ…ΠΎΠ»ΠΎΠ΄Π½ΠΎ'; last SWITCH; }; ($t < 18) && do { $say = 'ΠΏΡ€ΠΎΡ…Π»Π°Π΄Π½ΠΎ'; last SWITCH; }; ($t < 27) && do { $say = 'Ρ‚Π΅ΠΏΠ»ΠΎ'; last SWITCH; }; $say = 'ΠΆΠ°Ρ€ΠΊΠΎ'; }


Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ do, ΠΊΠ°ΠΊ ΠΈ любоС Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ. НапримСр, с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ цикличСскоС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ дСйствий:


do { $sum += rand; } until ($sum > 25);


Но ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ эта конструкция - Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π° Π½Π΅ Ρ†ΠΈΠΊΠ», Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ управлСния Ρ†ΠΈΠΊΠ»ΠΎΠΌ Π² Π½Π΅ΠΉ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚.

Иногда трСбуСтся динамичСски Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ строкового выраТСния ΠΈΠ»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ, изолируя Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ошибки выполнСния. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ конструкция eval, которая примСняСтся Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π΄Π²ΡƒΡ… Ρ„ΠΎΡ€ΠΌ:


eval Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ # Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ Π½Π° Perl eval Π±Π»ΠΎΠΊ # Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊ, пСрСхватывая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ошибки


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


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


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