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

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

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

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


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


Если списочный Π»ΠΈΡ‚Π΅Ρ€Π°Π» состоит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΠΈΠΌΠ΅Π½ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚ΠΎΡΡ‚ΡŒ Π² Π»Π΅Π²ΠΎΠΉ части ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания, Π² ΠΏΡ€Π°Π²ΠΎΠΉ части ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ список присваиваСмых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, стоящим слСва ΠΎΡ‚ Π·Π½Π°ΠΊΠ° "Ρ€Π°Π²Π½ΠΎ", ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ значСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… элСмСнтов списка ΠΈΠ· ΠΏΡ€Π°Π²ΠΎΠΉ части ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.


($a, $b, $c) = (10 .. 12); # $a = 10; $b = 11; $c = 12; ($day, $month, $year) = (18, 12, 1987); # дСнь роТдСния Perl ($m, $n) = ($n, $m); # ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ мСстами значСния $n ΠΈ $m


Если Π² спискС слСва ΠΎΡ‚ Π·Π½Π°ΠΊΠ° присваивания ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… большС, Ρ‡Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² спискС Π² ΠΏΡ€Π°Π²ΠΎΠΉ части, Ρ‚ΠΎ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ значСния:


($hh, $mm, $ss, $ms) = (10, 20, 30); # $ms Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ


Если Π² Π»Π΅Π²ΠΎΠΉ части присваивания ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… мСньшС, Ρ‡Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΠΏΡ€Π°Π²ΠΎΠΉ, Ρ‚ΠΎ лишниС значСния Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ.


($hh, $mm, $ss) = (10, 20, 30, 400); # 400 ΠΎΡ‚Π±Ρ€ΠΎΡˆΠ΅Π½ΠΎ


Если Π² Π»Π΅Π²ΠΎΠΉ части присваивания стоит Π½Π΅ список, Π° скалярная пСрСмСнная, Ρ‚ΠΎ устанавливаСтся скалярный контСкст, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ список Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ своСго послСднСго элСмСнта:


$scalar = (10, 20, 30, 400); # Ρ‚ΠΎ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ $scalar = 400;


Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ списка ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ массив. ΠŸΠ΅Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ-массива стоит Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ прСфикс @ (Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉ своим Π²ΠΈΠ΄ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это array - "массив"). ΠžΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ-массивом Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ скалярная пСрСмСнная с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π½ΠΎ с прСфиксом $, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π° скаляров ΠΈ массивов хранятся Π² Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… ΠΈΠΌΠ΅Π½ (symbol tables).


@variable # массив для хранСния списка $variable # скаляр для хранСния строки ΠΈΠ»ΠΈ числа


БписочноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ помСщаСтся Π² массив с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания. ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ выполняСтся ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ Π² зависимости ΠΎΡ‚ контСкста, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСтся Π»Π΅Π²Ρ‹ΠΌ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠΌ присваивания. Если Π² Π»Π΅Π²ΠΎΠΉ части присваивания стоит массив ΠΈΠ»ΠΈ список, Ρ‚ΠΎ ΠΈ Π² ΠΏΡ€Π°Π²ΠΎΠΉ части оТидаСтся список. НапримСр:


@empty = (); # пустой массив послС присвоСния пустого списка @months = (1 .. 12); # массив со списком Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² мСсяцСв @days = qw(Пн Π’Ρ‚ Π‘Ρ€ Π§Ρ‚ ΠŸΡ‚ Π‘Π± Вс); # массив Π΄Π½Π΅ΠΉ Π½Π΅Π΄Π΅Π»ΠΈ @week = @days; # ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ значСния массива @days Π² @week @array = 25; # Π»ΠΈΡ‚Π΅Ρ€Π°Π» 25 рассматриваСтся ΠΊΠ°ΠΊ список (25) ($first) = @array; # Π² $first скопируСтся 1-ΠΉ элСмСнт массива @first = @second = (1, 2, 3); # каскадноС присваиваниС


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


$array_size = @months; # число элСмСнтов (Ρ€Π°Π·ΠΌΠ΅Ρ€) массива $array_size = scalar @months; # Ρ€Π°Π·ΠΌΠ΅Ρ€ массива


Π’ зависимости ΠΎΡ‚ контСкста, систСмная функция localtime Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π·Π½Ρ‹Π΅ значСния: Π² скалярном контСкстС ΠΎΠ½Π° Π²Π΅Ρ€Π½Π΅Ρ‚ строку с Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π΄Π°Ρ‚ΠΎΠΉ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ, Π° Π² списочном - список ΠΈΠ· дСвяти Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΎ Π΄Π°Ρ‚Π΅ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ:


$date_and_time = localtime; ($sec, $min, $hour, # сСкунды, ΠΌΠΈΠ½ΡƒΡ‚Ρ‹, часы $mday, $mon, $year, # дСнь, мСсяц, Π³ΠΎΠ΄, $wday, $yday, $isdst) # дСнь Π½Π΅Π΄Π΅Π»ΠΈ, дСнь Π³ΠΎΠ΄Π°, часовая Π·ΠΎΠ½Π° = localtime;


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


@small = (3, 4, 5); # этот массив Π±ΡƒΠ΄Π΅Ρ‚ вставлСн Π² список @big = (1, 2, @small, 6 .. 9); # Ρ‚ΠΎ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ @big = (1 .. 9); @big = ((1, 2), (3 .. 5), (6 .. 9)); # Ρ‚ΠΎ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ Π²Ρ‹ΡˆΠ΅


Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ списка ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ элСмСнты Π² Π½Π°Ρ‡Π°Π»ΠΎ ΠΈΠ»ΠΈ Π² ΠΊΠΎΠ½Π΅Ρ† ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ массива:


@array = ($new_element, @array); # Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ элСмСнт Π² Π½Π°Ρ‡Π°Π»ΠΎ @array = (@array, $new_element); # Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ элСмСнт Π² ΠΊΠΎΠ½Π΅Ρ† @all = (@first, @second); # ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π΄Π²Π° массива Π² ΠΎΠ΄ΠΈΠ½


ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ массив списочному Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρƒ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты ΠΈΠ· массива Π² скалярныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, помСстив ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ элСмСнты Π² исходный массив:


($element1, @array) = @array; # ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ элСмСнт ΠΈΠ· Π½Π°Ρ‡Π°Π»Π°


Массив Π² Π»Π΅Π²ΠΎΠΉ части присваивания ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΊΠΎΠ½Ρ†Π΅ списка, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ ΠΏΠΎΠ³Π»ΠΎΡ‰Π°Π΅Ρ‚ всС значСния, ΠΈ стоящиС послС Π½Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ значСния:


(@array,$a,$b) = (1,2,3,4,5); # всС 5 чисСл ΠΏΠΎΠΏΠ°Π΄ΡƒΡ‚ Π² @array


Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива - это скалярныС Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹, доступ ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ происходит ΠΏΠΎ ΠΈΡ… порядковому Π½ΠΎΠΌΠ΅Ρ€Ρƒ (индСксу). ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ элСмСнт массива - это скаляр, Ρ‚ΠΎ Π΅Π³ΠΎ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ состоит ΠΈΠ· Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ прСфикса $ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ массива, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках стоит индСкс. Π˜Π½Π΄Π΅ΠΊΡΡ‹ элСмСнтов массива Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Ρ†Π΅Π»Ρ‹ΠΌΠΈ числами, начиная с нуля. (НомСр Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ индСкса массивов Ρ€Π°Π½ΡŒΡˆΠ΅ ΠΌΠΎΠ³ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $[, Π½ΠΎ сСйчас эта Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ считаСтся ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΉ, поэтому ΠΏΠΎΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ Π½Π΅ рСкомСндуСтся.) Π’ΠΎΡ‚ Ρ‚Π°ΠΊ выглядит Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ элСмСнтам массива:


@array # пСрСмСнная-массив, хранящая список $array[0] # ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт массива с индСксом 0 $array[1] # Π²Ρ‚ΠΎΡ€ΠΎΠΉ элСмСнт массива с индСксом 1 $array[$i] # i-ΠΉ элСмСнт массива, считая с 0 $array # скаляр, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΊ массиву @array


Если трСбуСтся ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ элСмСнтам массива, начиная с послСднСго, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ значСния индСксов:


$array[-1] # послСдний элСмСнт, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ 1-ΠΉ ΠΎΡ‚ ΠΊΠΎΠ½Ρ†Π° $array[-2] # прСдпослСдний элСмСнт, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ 2-ΠΉ ΠΎΡ‚ ΠΊΠΎΠ½Ρ†Π° $array[-$n] # n-ΠΉ элСмСнт массива, считая с ΠΊΠΎΠ½Ρ†Π°


ИндСкс послСднСго элСмСнта массива, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ всСгда Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ мСньшС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΡƒΠΊΠ°Π·Π°Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ прСфикс $# ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ массива:


$last_index = $#array; # индСкс послСднСго элСмСнта @array


Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ элСмСнт массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ встроСнного Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° случайных чисСл rand, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ число ΠΎΡ‚ 0 Π΄ΠΎ числа, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π΅ΠΌΡƒ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠΌ случайныС числа Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ послСднСго индСкса Π² массивС ΠΈ Π±ΡƒΠ΄Π΅ΠΌ ΠΎΠΊΡ€ΡƒΠ³Π»ΡΡ‚ΡŒ ΠΈΡ… Π΄ΠΎ Ρ†Π΅Π»Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ int:


$random_element = $array[int(rand($#array))];


Π’ $#array ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ послСднСго индСкса, ΠΏΡ€ΠΈ этом Ρ€Π°Π·ΠΌΠ΅Ρ€ массива измСнится. Но Ρ‚Π°ΠΊΠΎΠ΅ дСйствиС ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ трСбуСтся, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ массив ΠΏΡ€ΠΈ нСобходимости увСличиваСтся автоматичСски. Π Π°Π·ΠΌΠ΅Ρ€ массива Π² Perl Π½Π΅ ограничиваСтся, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ массив ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ всю ΠΎΡ‚Π²Π΅Π΄Π΅Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒ.

Π’ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ элСмСнты массива Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ скаляры. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ присваиваниС элСмСнтам массива:


$birthday[0] = 18; $birthday[1] = 12; $birthday[2] = 1987; ($birthday[0], $birthday[1], $birthday[2]) = (18, 12, 1987);


(Π₯отя Π±ΠΎΠ»Π΅Π΅ СстСствСнно для ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ присваивания Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ срСзом массива: @birthday[0, 1, 2] = (18, 12, 1987), Π½ΠΎ ΠΎ срСзах ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅ Π² этой Π»Π΅ΠΊΡ†ΠΈΠΈ.)

Если ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнту с индСксом большС Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива, массив автоматичСски увСличиваСтся Π΄ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹, Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ элСмСнты ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:


$birthday[5] = 'Perl'; # Ρ€Π°Π·ΠΌΠ΅Ρ€ @birthday Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ 5 # Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ $birthday[3] ΠΈ $birthday[4] Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ


ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ элСмСнту массива с Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ индСксом Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΎ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π½ΠΎ ошибки Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚.


$array[$#array+100] # Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ


ΠŸΡ€ΠΈ использовании Π² качСствС индСкса массива Π΄Ρ€ΠΎΠ±Π½ΠΎΠ³ΠΎ числа Π±ΡƒΠ΄Π΅Ρ‚ взята Π΅Π³ΠΎ цСлая Ρ‡Π°ΡΡ‚ΡŒ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ $array[3.5] рассматриваСтся ΠΊΠ°ΠΊ $array[3].

Часто трСбуСтся ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ всС элСмСнты массива, ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π΄ΠΎ послСднСго, для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ»ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²ΠΏΠΎΠ»Π½Π΅ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° for, ΠΊΠ°ΠΊ это записываСтся Π² языках C ΠΈΠ»ΠΈ Java, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ:


for (my $i = 0; $i < scalar @array; $i++) { print "$array[$i] "; }


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


foreach my $element (@array) { # $element это синоним print "$element "; # ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ элСмСнта $array[$i] }