Операции конкатенации и повторения

Бинарная операция конкатенации, или соединения, объединяет два своих строковых операнда в одну строку путем присоединения значения второго операнда в конец содержимого первого операнда, причем никакого пробела между ними в результирующую строку не вставляется. Знаком этой операции служит точка ( . ):
"first string"."second string"; # Результат:
                                # " first stringsecond string"
Эту операцию можно использовать последовательно в одном выражении для соединения нескольких строк:
$s1 = "one";
$s2 = "two";
$s3 = "three";
$s  = $s1.$s2.$s3; # Значение $s: "onetwothree"
Если необходимо соединить две или более строки со вставкой между ними пробелов или других символов, следует воспользоваться встроенной функцией join. Для соединения строк со вставкой пробела (или любого другого символа между ними) можно также воспользоваться свойством подстановки значения скалярной переменной в строку, ограниченную двойными кавычками:
$s1 = "string1";
$s2 = "string2";
$s  = "$s1 | $s2"; # Значение $s: "string1 | string2"
Операцию конкатенации можно применять и к числовым литералам, и к числовым данным, хранящимся в скалярных переменных. Однако при этом следует соблюдать два правила.
  1. Числовой литерал, целый или вещественный, не может быть первым операндом операции конкатенации.
  2. Числовые литералы нельзя использовать в выражении, состоящем из последовательности операций конкатенации.
Использование числовых литералов с нарушением указанных правил может привести либо к ошибке при трансляции, либо к непредсказуемому результату во время выполнения сценария.
Переменные, содержащие числовые литералы, можно безболезненно использовать в качестве операндов операции конкатенации, так как при выполнении их содержимое автоматически будет преобразовано к строкам, содержащим числовые литералы, соответствующие содержимому переменных. Приведем несколько выражений, в которых операция конкатенации задана с разными типами операндов:
$n = 5;
$m = 23.5;
"1.1".6; — результирующая строка "1.16"
$m.3.0l; - результирующая строка "23.53.01"
$m.$n;   — результирующая строка "23.55"
Для работы со строками в языке Perl предусмотрена еще одна операция — повторение х (просто символ строчной буквы х).
В скалярном контексте эта бинарная операция создает новую строку, в которой содержимое строки, заданной левым операндом, повторяется определяемое правым операндом количество раз:
$n = 8;
"аА" х 2; — результат: "аАаА"
$n х 2;   — результат: "88"
Обратим внимание, что в качестве левого операнда можно использовать и числовые литералы, и переменные, содержащие числовые данные. Правым операндом, задающим число повторений, может быть любое число или строка, содержащая правильное десятичное число — оно будет преобразовано к целому отбрасыванием дробной части.
Эта операция удобна, если надо напечатать или отобразить на экране монитора повторяющийся символ или последовательность символов. Например, следующий оператор выведет на экран монитора строку, целиком состоящую из повторений последовательности символов --|--:
print "--|--" х 16;
Операция повторения в списковом контексте позволяет в качестве ее левого операнда использовать список — заключенную в круглые скобки последовательность выражений. В этом случае она работает как повторитель списка — ее результатом будет список, в котором список левого операнда повторяется заданное правым операндом количество раз:
(10) х 3;    # Результат: (10, 10, 10)
("а",5) х 2; # Результат: ("а", 5, "а", 5)
Операция повторения в списковом контексте удобна для задания массива скаляров с одинаковыми значениями элементов или групп элементов:
@аrrау = ("а", "b") х 2; # Результат:
                         # аrrау = ("а", "b", "а", "b")
@аrrау = ("а") х 3;      # Результат:
                         # @аrrау = ("а", "а", "а")
ВНИМАНИЕ Если в списковом контексте левый операнд операции повторения не является списком, то она вычисляет единственное скалярное значение. Например, если в последнем приведенном операторе присваивания убрать окружающие строку "а" скобки, то первому элементу массива @array будет присвоено значение "aaa".
Эту операцию можно использовать и для инициализации хэш-массива одинаковыми значениями:
@keys = ( one, two, three);   # Определение ключей
# хэш-массива.
@hash{@keys} = ("а") х @keys; # Инициализация значений
                              # хэш-массива
В последнем операторе присваивания в правой части массив скаляров @keys используется в списковом контексте и таким образом представляет список своих значений, тогда как в левой части он используется в скалярном контексте и, следовательно, имеет значение, равное количеству своих элементов.
ВНИМАНИЕ. Символ операции повторения x следует отделять проблемами от операндов, так как иначе при лексическом анализе он может быть воспринят интерпретатором как относящийся к лексеме, а не представляющий операцию повторения. Например, при синтаксическом разборе строки $nx$m интерпретатор определит, что в ней идут подряд две переменные $nx и $m, а не операция повторения содержимого переменной $n, что приведет к синтаксической ошибке.

Следующая страница Содержание главы


Реклама