Вход/Регистрация
Язык программирования Perl
вернуться

Шохирев Михаил Васильевич

Шрифт:

@array = (11, 32, 55); # исходный массив

@result = map {if ($_ > 20) {$_*=10;} else {$_;} } @array;

# в @result будет (11, 320, 550)

Список можно преобразовать в строку с помощью встроенной функции join, которая преобразует каждый элемент списка к строке, объединяет отдельные элементы списка в одну строку, вставляя между элементами указанный разделитель, и возвращает полученную строку в качестве результата. Например:

@array = (5..10); # объединяемый список

$delimiter = ':'; # разделитель элементов списка в строке

$string = join $delimiter, @array; # объединение в строку

# теперь $string содержит '5:6:7:8:9:10'

Обратную операцию разделения строки по образцу на список строк выполняет встроенная функция split. Она разделяет строку по указанному разделителю и возвращает список составляющих строк. Можно ограничить число разделяемых подстрок, тогда строка будет разделена не более, чем на это число элементов. Например:

$string = '5:6:7:8:9:10'; # исходная строка

$delimiter = ':'; # разделитель подстрок

$limit = 3; # число элементов

@strings = split $delimiter, $string, $limit; # разделение

# в @strings содержится ('5', '6', '7:8:9:10')

Функция split имеет гораздо больше возможностей, о которых будет сказано в лекции, посвященной регулярным выражениям. Подробно познакомиться с которыми можно из системной документации с помощью утилиты perldoc (после флага – f указывается имя искомой функции):

perldoc -f split

Пользовательские функции и процедуры, как встроенные функции, тоже могут обрабатывать списки: принимать списки параметров и возвращать список значений. Об этом будет подробнее рассказано в лекции 12.

Рассмотренные ранее операции могут вести себя иначе, если они применяются не в скалярном, а в списочном контексте. Так, операция повторения (репликации), чаще всего применяемая к строкам, может также использоваться и для многократного повторения значений списка. Обратите внимание, что она работает именно со списками, поэтому если необходимо размножить значения массива, то его следует поместить в списочный литерал. Например:

@two = ('A', 'B') x 2; # будет: ('A', 'B', 'A', 'B')

@three = (@one) x 3; # в @three трижды повторится @one

С помощью операции повторения можно присвоить одинаковые значения всем элементам массива, например, сделать их неопределенными. Таким образом результат функции undef можно повторить по числу элементов массива:

@array = (undef) x @array; # или (undef) x scalar(@array)

При необходимости ввести данные в массив можно воспользоваться упомянутой ранее операцией ввода строк <>, читающей строки из входного потока. В скалярном контексте операция "кристалл" считывает одну строку в переменную. Вот так можно в диалоге ввести значения в массив из пяти строк:

for (@stdin = , $n = 0; $n < 5; $n++) {

print 'Введите значение N ', $n+1, ':';

$stdin[$n] = <>; # считать строку в $n-й элемент массива

}

В списочном контексте "кристалл" читает в массив за одну операцию все строки файла. Например, так можно заполнить массив данными, вводимыми с консоли:

print "Введите значения - по одному в строке.",

"Для окончания ввода нажмите Ctrl-Z (или Ctrl-D).\n";

@stdin = <>; # считать все строки и поместить их в массив

print "Вы ввели ", scalar @stdin, " значений.\n";

Операция <> вводит строки полностью, включая завершающий символ перевода строки, который часто не нужен при дальнейшей обработке. Функция chomp удаляет символы перевода строки в конце строки (в скалярном контексте) или в конце каждого элемента списка (в списочном контексте) и возвращает общее число удаленных символов.

chomp @stdin; # убрать \n в конце всех элементов массива

$n_count = chomp $string; # убрать \n в конце строки

  • Читать дальше
  • 1
  • ...
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: