Эта операция аналогична заданию строкового литерала в двойных кавычках. Она осуществляет
подстановку в строку значений скалярных переменных (имена, начинающиеся с символа $) и переменных
массивов скаляров (имена, начинающиеся с символа @), а также выполняет интерпретацию управляющих
последовательностей. После выполнения указанных действий будет сформирована истинная строка данных.
Для задания в строке символа разделителя, используемого в этой операции, следует его маскировать с
помощью символа обратной наклонной черты, непосредственно предшествующего символу-разделителю.
Несколько примеров:
gq(print\(\) - функция вывода); # Строка символов:
# print( ) - функция вывода
$m = 123;
qq/Целое\t$m\n/; # Строка символов: Целое 123
"Целое\t$m\n"; # Эквивалентно предыдущей операции
Операция qx{ }
Эта операция аналогична заданию строкового литерала в обратных кавычках. При ее вычислении сначала
осуществляется подстановка значений скалярных переменных и переменных массивов скаляров (если таковые
присутствуют) в строку, заданную между разделителями операции. Затем полученная строка как некая команда
передается на выполнение командному интерпретатору операционной системы и результат ее выполнения
подставляется в формируемую операцией qx{ } окончательную строку. Таким способом можно выполнить
команду операционной системы или пользовательской программы и ввести в сценарий Perl отображаемую на
экране монитора информацию. Несколько примеров:
$file = "file.tmp";
qx(del $file); # Удаление файла с именем file.tmp
$rez = qx(prog1 -a); # Переменная $rez содержит
# результаты вывода
# на экран программы prog1
$rez = `progl –a`; # Эквивалентно предыдущей операции
Операция qw{ }
Эта операция возвращает список слов, выделенных из строки, заданной между символами-разделителями
операции. Разделителем между словами считается символ пробела:
@m = qw( one two ); # Эквивалентно:
# $m[0] = 'one'; $m[l] = 'two';
Действие операции qw{CTPOKA} соответствует действию встроенной функции
split
разделения передаваемой ей во втором параметре строки на части при использовании в качестве
разделителя (ее первый параметр) пробела:
split(' ', q{CTPОKA});
Различие заключается в том, что операция qw{ } формирует список слов во время компиляции программы,
а функция split( ) будет формировать этот же список во время выполнения программы. Поэтому использование
операции qw{ } предпочтительнее с точки зрения времени выполнения.
Эта операция чаще всего используется для импортирования в программу не всего модуля, а только некоторых
его компонентов, необходимых для ее выполнения:
use POSIX qw( setlocale localeconv );
ВНИМАНИЕ Наиболее часто встречающаяся ошибка при использовании этой операции — отделение слов запятыми.
При включенном режиме отображения предупреждений -w будет сгенерировано сообщение о том, что, возможно,
запятая используется для разделения слов, а не входит в состав слова.