Сокращение qw

Списки простых слов (как в последнем примере) достаточно часто используются в программах. Сокращение qw позволяет быстро создать такой список без множества лишних кавычек:

qw( fred barney betty wilma dino ) # То же, что прежде, но короче


Сокращение qw означает «Quoted Words» («квотирование по словам») или «Quoted by Whitespace» («квотирование по пропускам») в зависимости от того, кого вы спросите. Как бы то ни было, Perl интерпретирует данные в скобках по правилам строк в апострофах (соответственно в список qw, в отличие от строк в кавычках, нельзя включить \n или $fred). Пропуски (пробелы, табуляции, символы новой строки) удаляются, а все, что останется, преобразуется в список элементов. Из-за удаления пропусков тот же список можно записать другим (надо признать, довольно странным) способом:

qw(fred
barney betty
wilma dino ) # То же самое, но со странными пропусками


Список является разновидностью определения литералов, поэтому он не может содержать комментарии. В двух предыдущих примерах в качестве ограничителей использовались круглые скобки, но Perl позволяет выбрать любой знак препинания в качестве ограничителя. Несколько распространенных вариантов:

qw! fred barney betty wilma dino !
qw/ fred barney betty wilma dino /
qw# fred barney betty wilma dino # # Как в комментариях!
qw( fred barney betty wilma dino )
qw{ fred barney betty wilma dino }
qw[ fred barney betty wilma dino ]
qw< fred barney betty wilma dino >


Как показывают четыре последних примера, возможно использование двух разных ограничителей. Если открывающий ограничитель принадлежит к числу «левых» символов, то закрывающим ограничителем будет соответствующий «правый» символ. В остальных случаях один и тот же символ используется для пометки как начала, так и конца списка. Если закрывающий ограничитель должен присутствовать среди символов в списке, вероятно, вы неудачно выбрали ограничители. Но если сменить ограничитель почему-либо нежелательно или невозможно, символ все равно можно включить в список с префиксом :

qw! yahoo\! google ask msn ! # yahoo! включается как элемент списка


Как и в строках, заключенных в апострофы, два последовательных символа \\ обозначают один литеральный символ «обратная косая черта». Девиз Perl гласит: «Это можно сделать несколькими способами», однако у вас может появиться вопрос: зачем нужны все эти разные ограничители? Вскоре вы увидите, что существуют и другие разновидности оформления строк, в которых они могут пригодиться. Но даже сейчас вы согласитесь с тем, что они будут удобны при построении списка имен файлов UNIX :

qw{
/usr/dict/words
/home/rootbeer/.ispell_english
}


Если бы косая черта была единственным возможным ограничителем, такой список было бы весьма неудобно читать, записывать и сопровождать.
Теги:
массивы, списки
Добавлено: 20 Июля 2018 07:15:42 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...