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

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

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

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ здСсь ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹Π΅ символы ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° Π½ΠΎΠ²ΡƒΡŽ строку, многострочныС Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для записи тСкста, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ для Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… строках. Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹Π΅ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ символа. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ "пустыС строки", ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π΄Π²Π° апострофа ΠΈΠ»ΠΈ Π΄Π²Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π΅Π»Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ ('' ΠΈΠ»ΠΈ "").

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ способы записи строковых Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ² Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны Π² Π»Π΅ΠΊΡ†ΠΈΠΈ 7, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΠ·Π»Π°Π³Π°ΡŽΡ‚ΡΡ возмоТности строковых Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со строками.

Как извСстно, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ - это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ для хранСния Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ± ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°. Π’ Perl ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π΄Π²Π΅ основныС разновидности Π΄Π°Π½Π½Ρ‹Ρ…: строки ΠΈ числа, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ скалярными Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. К скалярам Ρ‚Π°ΠΊΠΆΠ΅ относятся ссылки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны Π² Π»Π΅ΠΊΡ†ΠΈΠΈ 11.

Для хранСния скалярных Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ скалярныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, каТдая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠŸΠ΅Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ставится символ $, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΠΉ ΡΠΊΠ°Π»ΡΡ€Π½ΡƒΡŽ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ ($ - это стилизованноС "s", Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ scalar). Π”Π°Π»Π΅Π΅, Π² Π»Π΅ΠΊΡ†ΠΈΠΈ 5, Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСн Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… - массивы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат мноТСствСнныС значСния, логичСски связанныС вмСстС. Π’ массивах ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ хранится нСсколько скалярных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΈ ΠΈΠΌΠ΅Π½Π° массивов ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΡΡŽΡ‚ΡΡ символом @ (@ - это стилизованноС "a", Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ array). ΠŸΠΎΠ½Π°Ρ‡Π°Π»Ρƒ эти "Π·Π°Π±Π°Π²Π½Ρ‹Π΅ символы" (funny characters, ΡˆΡƒΡ‚Π»ΠΈΠ²ΠΎ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ "ΠΎΠΊΠΊΡƒΠ»ΡŒΡ‚Π½Ρ‹ΠΌΠΈ Π·Π½Π°ΠΊΠ°ΠΌΠΈ" - sigils) ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… каТутся Π½Π΅ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ ΠΈ Π΄Π°ΠΆΠ΅ лишними. Но ΠΏΠΎΠ·ΠΆΠ΅ Π²Π°ΠΌ раскроСтся Π³Π»ΡƒΠ±ΠΎΠΊΠΈΠΉ смысл ΠΈ удобство этих символов, ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌΠΈ прСфиксами. На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ своим Π²ΠΈΠ΄ΠΎΠΌ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‚, ΠΊΠ°ΠΊΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ содСрТит пСрСмСнная - Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎΠ΅ ΠΈΠ»ΠΈ мноТСствСнноС. Бкаляры ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π² Perl лингвистичСскоС понятиС СдинствСнного числа, Π° массивы - мноТСствСнного числа. Π’ΠΎΠΎΠ±Ρ‰Π΅, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π²ΠΎΠΏΠ»ΠΎΡ‰Π°ΡŽΡ‚ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ идСю ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ…, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ… Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Ρ€ΠΎΠ»ΡŒ Π³Π»Π°Π³ΠΎΠ»ΠΎΠ².

Для имСнования ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² Perl ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€Π°Π²ΠΈΠ»Π°, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках:

[x]. Π² ΠΈΠΌΠ΅Π½ΠΈ допускаСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ латинскиС Π±ΡƒΠΊΠ²Ρ‹, символы подчСркивания, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊ Π±ΡƒΠΊΠ²Π°ΠΌ, ΠΈ Ρ†ΠΈΡ„Ρ€Ρ‹;

[x]. имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с Π±ΡƒΠΊΠ²Ρ‹ (Π΄Π»ΠΈΠ½Π° ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ практичСски Π½Π΅ ограничиваСтся).

Π’ Perl ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… принято Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ строчными Π±ΡƒΠΊΠ²Π°ΠΌΠΈ, ΠΏΡ€ΠΈ нСобходимости раздСляя слова Π² ΠΈΠΌΠ΅Π½ΠΈ символом подчСркивания, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


$website $catch22 $user_name $input_record_counter $this_is_an_example_of_a_very_long_variable_name


Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹Ρ… языков ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ трСбуСтся ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ, опрСдСляя, ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… допустимо Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² Π½Π΅ΠΉ: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, boolean, character, string, byte, short, integer, long, real, float ΠΈΠ»ΠΈ double. Π’ Perl ΠΌΠΎΠΆΠ½ΠΎ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² любом мСстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Π΅Π· объявлСния. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, Π½Π°Π΄ΠΎ просто ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ Π΅Π΅ имя Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это происходит ΠΏΡ€ΠΈ присваивании Π΅ΠΉ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния.


$background_color = 0xFFF; $version_number = 5.8; $www_site = "www.perl.com"; $email_address = ' [email protected]';


Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π΅ присвоСно, Π² Π½Π΅ΠΉ хранится ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ undef. ΠΠ΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΡΡ‚ΡŒ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ defined(), Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅ΠΉ истинноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ. Одна ΠΈ Ρ‚Π° ΠΆΠ΅ пСрСмСнная ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ любого ΠΈΠ· основных Ρ‚ΠΈΠΏΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, строку ΠΈΠ»ΠΈ число (Ρ†Π΅Π»ΠΎΠ΅ ΠΈΠ»ΠΈ Π΄Ρ€ΠΎΠ±Π½ΠΎΠ΅):


$variable; $variable = 'Π‘Ρ‚Ρ€ΠΎΠΊΠ°'; $variable = 25; $variable = 3.141592653;


Π’ ΠΈΠΌΠ΅Π½Π°Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π·Π°Π³Π»Π°Π²Π½Ρ‹Π΅ ΠΈ строчныС Π±ΡƒΠΊΠ²Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ, поэтому ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π½ΠΈΠΆΠ΅ ΠΈΠΌΠ΅Π½Π° относятся ΠΊ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ:


$language $Language $LanguagE $LaNgUaGe


ΠΠ΅ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚Π°. ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… опрСдСляСтся Ρ€Π°ΠΌΠΊΠ°ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… Π΅Π΄ΠΈΠ½ΠΈΡ†: Π±Π»ΠΎΠΊΠΎΠ², ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ рассказано Π² лСкциях 12 ΠΈ 13. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π½ΡƒΠΆΠ½ΠΎ ΠΈΡ… ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ явно. Для объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова:

[x]. my - ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ с лСксичСской ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ видимости;

[x]. our - Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ с лСксичСской ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ видимости;

[x]. local - Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ скрытиС Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

Π’ ΠΎΠ΄Π½ΠΎΠΌ объявлСнии ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ нСсколько ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. ΠžΠ±ΡŠΡΠ²Π»ΡΠ΅ΠΌΡ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ рСкомСндуСтся сразу ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ значСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


local $_ = 25 my ($buffer = '', $count = 0, $end_of_file = 0) our $version = 2.5, $author = 'Mike Shock'


Различия ΠΌΠ΅ΠΆΠ΄Ρƒ этими Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрСны Π² лСкциях, посвящСнных ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ ΠΈ модулям. А ΠΏΠΎΠΊΠ°, памятуя ΠΎΠ± ΠΎΠ±Ρ‰ΠΈΡ… ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ… Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ стиля программирования ΠΈ трСбованиях ΠΊ надСТности ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, постараСмся свСсти ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ использованиС Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Для этого достаточно Π²Π·ΡΡ‚ΡŒ Π·Π° ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ прСимущСствСнно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ лСксичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅ΠΌΡ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова my. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… с лСксичСской Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ Ρ‚Π°ΠΊΠΆΠ΅ сокращаСт расход памяти, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ автоматичСски ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· области видимости.

ЗначСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠ°ΠΊ ΠΈ escape-ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Ссли ΠΎΠ½ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π² строковый Π»ΠΈΡ‚Π΅Ρ€Π°Π», Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ. Π­Ρ‚ΠΈΠΌ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π½Π° Perl для ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ формирования строк, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ вычислСнныС значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. НапримСр, Ρ‚Π°ΠΊ:


"ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½ΠΎ $n строк" "Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ вСрсия Perl = $" "Письмо для $name ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ ΠΏΠΎ адрСсу $email"


Благодаря Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌΡƒ прСфиксу $, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΌΡ‹ Π² строковых Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°Ρ…. ΠŸΡ€ΠΈ интСрполяции Π² качСствС ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ рассматриваСтся максимальная ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ символов, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π² случаях, ΠΊΠΎΠ³Π΄Π° послС ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² строкС Π½Π΅Ρ‚ Π·Π½Π°ΠΊΠΎΠ² прСпинания ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ². НапримСр, ΠΏΡ€ΠΈ вставкС Π² строку ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $delimiter ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:


"One$delimiterTwo"


Π±ΡƒΠ΄Π΅Ρ‚ подставлСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $delimiterTwo. Π§Ρ‚ΠΎΠ±Ρ‹ явно ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚ΡŒ имя вставляСмой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΡ‚ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… символов, Π½ΡƒΠΆΠ½ΠΎ имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ послС прСфикса Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки, Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:


"One${delimiter}Two"


Если Π² строковый Π»ΠΈΡ‚Π΅Ρ€Π°Π» Π½ΡƒΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ символ Π΄ΠΎΠ»Π»Π°Ρ€Π°, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ прСфиксом ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π»ΠΈΡ‚Π΅Ρ€Π°Π» Π² ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ апострофы ΠΈΠ»ΠΈ "ΡΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ" символ Π΄ΠΎΠ»Π»Π°Ρ€Π° (ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅), поставив ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΠΊΠΎΡΡƒΡŽ Ρ‡Π΅Ρ€Ρ‚Ρƒ:


'пСрСмСнная $var Π½Π΅ интСрполируСтся' "пСрСмСнная \$var Π½Π΅ интСрполируСтся"


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


$year = 1987


ΠŸΡ€ΠΈ использовании Π΅Π΅ Π² числовом контСкстС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² арифмСтичСском Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ для слоТСния с Π΄Ρ€ΡƒΠ³ΠΈΠΌ числом) Π±ΡƒΠ΄Π΅Ρ‚ использовано числовоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠŸΡ€ΠΈ использовании этой ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² строковом контСкстС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ Π²Ρ‹Π²ΠΎΠ΄Π°) Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ прСдставлСния числа ΠΊ строкС. Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€: Ссли ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π΅ присвоСно Π½ΠΈΠΊΠ°ΠΊΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ Π² числовом контСкстС Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ 0, Π° ΠΏΡ€ΠΈ использовании Π΅Π΅ Π² строковом контСкстС - пустая строка (''). К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв программисту Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ приходится Π·Π°Π΄ΡƒΠΌΡ‹Π²Π°Ρ‚ΡŒΡΡ ΠΎ контСкстах, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ perl выполняСт ΠΊΠ°ΠΊ Ρ€Π°Π· Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π» Π² Π²ΠΈΠ΄Ρƒ Π°Π²Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (Π² ΠΏΠΎΠ»Π½ΠΎΠΌ соотвСтствии с ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π²ΡˆΠΈΠΌΡΡ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠΌ DWIM). Но Π·Π½Π°Π½ΠΈΠ΅ контСкста ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с тонкостями использования синтаксичСских конструкций языка Perl. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… лСкциях ΠΌΡ‹ познакомимся с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ контСкстами, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, списочным ΠΈ логичСским.

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