Требуется включить в программу список - например, при инициализации массива.
Решение
Перечислите элементы, разделяя их запятыми:
@а = ("quick", "brown", "fox");
При большом количестве однословных элементов воспользуйтесь оператором
qw():
@a = qw(Why are you teasing me?);
При большом количестве многословных элементов создайте встроенный документ и последовательно извлекайте из него строки:
@lines = (""END_OF_HERE_DOC" =~ m/"\s*(.+)/gm);
The boy stood on the burning deck, It was as hot as glass.
END_OF_HERE_DOC
$sample = qw(The vertical bar (|) looks and behaves like a pipe.);
Если ограничитель встречается в строке, а вы не хотите заменить его другим, используйте префикс \:
@banner = qw|The vertical bar (||) looks and behaves like a pipe.l;
Оператор qw() подходит лишь для списков, в которых каждый элемент является отдельным словом, ограниченным пробелами. Будьте осторожны, а то у Колумба вместо трех кораблей появится четыре:
$ships = qw(Nica Pinta Santa Магна); # НЕВЕРНО!!!
$ships = ('Mica', 'Pinta', 'Santa Магна'); # Правильно
!> Смотри также ---------------------------------
Раздел "List Value Constructors" perldata(1) раздел "Quote and Quote-Like Operators" perlop(1); оператор s/// описан в реrlоg(1).
При выводе содержимое массива порой выглядит довольно странно:
@аrrау = ("red", "yellow", "green");
print "I have ", @array, " marbles.\n";
print "I have @array marbles\n";
I have redyellowgreen marbles. I have red yellow green marbles.
На самом деле вам нужна строка "I have red, yellow, and green marbles". Приведенная выше функция генерирует строку именно в таком формате. Между двумя последними элементами списка вставляется "and". Если в списке больше двух элементов, все они разделя
Пример 4.1 демонстрирует применение этой функции с одним дополнением:
если хотя бы один элемент списка содержит запятую, в качестве разделителя используется точка с занятой.
Пример 4.1. commify_series
#!/usr/bin/perl -w
# commify_series - демонстрирует вставку запятых при выводе списка
@lists = (
[ 'just one thing' ],
[ qw(Mutt Jeff) ],
[ qw(Peter Paul Mary) ],
[ 'To our parents', 'Mother Theresa'. 'God' ],
[ 'pastrami', 'ham and cheese', 'peanut butter and jelly', 'tuna' ],
[ 'recycle tired, old phrases', 'ponder big, happy thoughts' ],
[ 'recycle tired, old phrases',
'ponder big, happy thoughts',
'sleep and dream peacefully' ],
);
foreach $aref ((Slists) {
print "The list is: " , commify_series(@$aref) . ".\n";
sub commify_series {
my $sepchar = grep(/,/ => @_) ? ";" : ",";
(@>_ == 0) ? "
(@_ == 1) ^ $_[0]
(@_ == 2) r). join(" and ", @_)
join("$sepchar ", @_[0 .. ($#_-1)], "and $_[-1]"):
}i>
Результаты выглядят так:
The list is just one thing.
The list is Mutt and Jeff.
The list is Peter, Paul, and Mary.
The list is To our parents, Mother Theresa, and God.
The list is pastrami, ham and cheese, peanut butter and jelly, and tuna,
The list is recycle tired, old phrases and ponder big, happy thoughts.
The list is: recycle tired, old phrases; ponder
big, happy thoughts; and sleep and dream peacefully.
Как видите, мы отвергаем порочную практику исключения последней занятой из списка, что нередко приводит к появлению двусмысленностей.
> Смотри также -------------------------------
Описание функции grep в perlfunc(l); описание тернарного оператора выбора в perlop(1) Синтаксис вложенных списков рассматривается в рецепте 11.1.
Требуется увеличить или уменьшить размер массива. Допустим, у вас имеется массив работников, отсортированный но размерам оклада, и вы хотите ограничить его пятью самыми высокооплачиваемыми работниками. Другой пример - если окончательный размер массива точ
Решение
Присвойте значение $#ARRAY:
ti Увеличить или уменьшить (SARRAY $#ARRAY = $NEW_LAST_ELEMENT_INDEX_NUMBER
Присваивание элементу, находящемуся за концом массива, автоматически увеличивает массив:
$ARRAY[$NEW_LAST_ELEMENT_INDEX_NUMBER] = $VALUE:
sub what_about_that_array {
print "The array now has ", scalar((a'people), " elements. \n";
print "The index of the last element is $#people.\n";
print "Element #3 is '$people[3]',\n";
}
@people = qw(Crosby Stills Nasn Young);
, what_about_that_array();
Результат:
The array now has 4 elements.
The index of the last element is 3.
Element #3 is 'Young'. А другой фрагмент:
$#people--:
what_about_that_array();
выводит следующий результат:
The array now has 3 elements.
The index of the last element is 2.
Element #3 is o '.'
Элемент с индексом 3 пропал при уменьшении массива. Если бы программа запускалась с ключом -w, Per! также выдал бы предупреждение об использовании неинициализированной величины, поскольку значение $реор1е[3] не определено.
В следующем примере:
$#реор1е = 10_000;
what_about_that_array();