
Perl_-_Zanyatie_4.pptx
- Количество слайдов: 38
Perl Занятие 4
Списки Список - это упорядоченная последовательность отдельных скалярных данных в виде одного программного объекта
Примеры списков (256, 512, 1024, 2048, 4096) ('John', 'Paul', 'George', 'Ringo') ("Perl", 5. 8) ('One', $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
Имена переменных в списках Если список состоит только из имен переменных, то он может стоять в левой части операции присваивания, в правой части которой будет список присваиваемых значений. Переменным, стоящим слева от знака "равно", последовательно присваиваются значения соответствующих элементов списка из правой части операции.
Имена переменных в списках ($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;
Массивы Массив – переменная для хранения списка @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); # каскадное присваивание
Размер массива $array_size = @months; # число элементов (размер) массива $array_size = scalar @months; # размер массива $last_index = $#array; # индекс последнего элемента @array
Списки внутри списков @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); # объединить два массива в один
Другие приемы работы со списками ($element 1, @array) = @array; # извлечь элемент из начала (@array, $a, $b) = (1, 2, 3, 4, 5); # все 5 чисел попадут в @array
Обращение к элементам массива $array[0] # первый элемент массива с индексом 0 $array[1] # второй элемент массива с индексом 1 $array[$i] # i-й элемент массива, считая с 0
Обращение к элементам массива $array[-1] # последний элемент, то есть 1 -й от конца $array[-2] # предпоследний элемент, то есть 2 -й от конца $array[-$n] # n-й элемент массива, считая с конца
Сравнение двух массивов @array 1 = ("part 1", "part 2", "part 3", "part 4"); @array 2 = ("part 1", "PART 2", "part 3", "part 4"); if (@array 1 == @array 2) {. . . }
Срезы @array[0, 1] # то же, что ($array[0], $array[1]) @array[5. . 7] # то же, что ($array[5], $array[6], $array[7])
Срезы @array[3, 7, 1] # то же, что ($array[3], $array[7], $array[1]) @array[@indexes] # срез, заданный массивом индексов @array[5] # список ($array[5]), а не скаляр $array[5]
Функции для работы с массивами • • • shift unshift push pop sort reverse • map • join • split
Функция shift $first = shift @array; # извлечь первый элемент в $first # синоним: ($first, @array) = @array; while (my $first = shift @array) { # пока @array не опустеет print "Обработан элемент $first. "; print "Осталось ", scalar @array, " элементовn"; }
Функция shift my @names = ('Foo', 'Bar', 'Moo'); my $first = shift @names; print "$firstn"; # Foo print "@namesn"; # Bar Moo
Функция unshift @array, $e 1, $e 2, $e 3; # вставить значения в начало # синоним: @array = ($e 1, $e 2, $e 3, @array);
Функция unshift my @names = ('Foo', 'Bar'); unshift @names, 'Moo'; print "@namesn"; # Moo Foo Bar my @others = ('Darth', 'Vader'); unshift @names, @others; print "@namesn"; # Darth Vader Moo Foo Bar
Функция push @stack, $new; # добавить элемент в конец массива # синоним: @stack = (@stack, $new); my @names = ('Foo', 'Bar'); push @names, 'Moo'; print "@namesn"; # Foo Bar Moo my @others = ('Darth', 'Vader'); push @names, @others; print "@namesn"; # Foo Bar Moo Darth Vader
Функция pop $last = pop @stack; # изъять последний элемент массива my @names = ('Foo', 'Bar', 'Baz'); my $last_one = pop @names; print "$last_onen"; # Baz print "@namesn"; # Foo Bar
Функция sort @unsorted = (12, 1, 128, 2, 25, 3, 400, 53); @sorted = sort @unsorted; # в @sorted будет (1, 128, 2, 25, 3, 400, 53) @sorted = sort {$a <=> $b } @unsorted; # в @sorted будет (1, 2, 3, 12, 25, 53, 128, 400)
Функция reverse @array = qw(Do What I Mean); # исходный список @backwards = reverse @array; # остается неизменным # в @backwards будет ('Mean', 'I', 'What', 'Do')
Функция reverse @backwards = reverse(sort(@array)); # в @backwards будет ('What', 'Mean', 'I', 'Do')
Функция map позволяет выполнить действия над всеми элементами массива, поэтому ее нередко используют вместо цикла. У этой функции есть две формы вызова: @result = map ВЫРАЖЕНИЕ, СПИСОК @result = map БЛОК СПИСОК
Функция map @result = map $_*10, (11, 32, 55); # работа со списком # в @result будет (110, 320, 550)
Функция map @array = (11, 32, 55); # исходный массив @result = map {if ($_ > 20) {$_*=10; } else {$_; } } @array; # в @result будет (11, 320, 550)
Функция map @squares = map { $_ * $_ } @numbers; @squares = map { $_ > 5 ? ($_ * $_) : () } @numbers;
Функция split $string = '5: 6: 7: 8: 9: 10'; # исходная строка $delimiter = ': '; # разделитель подстрок $limit = 3; # число элементов @strings = split $delimiter, $string, $limit; # разделение # в @strings содержится ('5', '6', '7: 8: 9: 10')
Функция join @array = (5. . 10); # объединяемый список $delimiter = ': '; # разделитель элементов списка в строке $string = join $delimiter, @array; # объединение в строку # теперь $string содержит '5: 6: 7: 8: 9: 10'
Функции split и join print join(': ', split('b', 'abc')), "n"; print join(': ', split('', 'abc')), "n";