Интерполяция скалярных переменных в строках

Строковые литералы в кавычках поддерживают интерполяцию переменных1 (наряду с поддержкой управляющих комбинаций с обратной косой чертой). Другими словами, имя любой скалярной переменной в строке заменяется ее текущим значением. Пример:

$meal = "brontosaurus steak";
$barney = "fred ate a $meal"; # Теперь $barney содержит
# "fred ate a brontosaurus steak"
$barney = 'fred ate a ' . $meal; # Другой способ добиться того же результата

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

$barney = "fred ate a $meat"; # Теперь $barney содержит "fred ate a"

Если выводится только значение одной переменной, не стоит возиться с интерполяцией:

print "$fred"; # Лишние кавычки
print $fred; # То же, но с лучшим стилем

Ничто не мешает заключить одинокую переменную в кавычки, но другие программисты будут смеяться у вас за спиной.1 Интерполяция переменных также известна под названием «интерполяции в кавычках», потому что она происходит при использовании кавычек (но не апострофов).


Интерполяция также выполняется в других разновидностях строк Perl, которые еще не рассматривались. Чтобы включить «настоящий» знак доллара в строку, заключенную в кавычки, поставьте перед ним обратную косую черту, отменяющую особый смысл знака доллара:

$fred = 'hello';
print "The name is \$fred.\n"; # Выводит строку со знаком доллара
print 'The name is $fred' . "\n"; # То же самое

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

$what = "brontosaurus steak";
$n = 3;
print "fred ate $n $whats.\n"; # Не steaks, а значение $whats
print "fred ate $n ${what}s.\n"; # Теперь используется $what
print "fred ate $n $what" . "s.\n"; # Другой способ с тем же результатом
print 'fred ate ' . $n . ' ' . $what . "s.\n"; # Особенно неудобный способ

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Perl на эту тему:
Автоматическое преобразование между числами и строками
Бинарные операторы присваивания
Вещественные литералы
Встроенные предупреждения Perl
Выбор имен переменных

Вернуться в раздел: Perl / 1. Скалярные данные