Глава 2: Скалярные данные.
2.4 Скалярные операции и функции
2.4.4 Интерполяция скаляров в строках
Если строковый литерал взят в двойные кавычки, в нем необходимо выполнить интерполяцию переменных (помимо проверки на наличие управляющих последовательностей с обратной косой). Это значит, что строка просматривается на предмет наличия имен скалярных переменных* — а именно комбинаций знака доллара с буквами, цифрами и знаками подчеркивания. Если ссылка на переменную имеется, она заменяется текущим значением этой переменной (или пустой строкой, если значение переменной еще не присвоено). Например:
$а = "fred";
$b = "some text $a"; # $b имеет значение "some text fred"
$c = "no such variable $what"; # $c имеет значение "no such variable"
Текст, который заменяет переменную, не просматривается, т.е. даже при наличии в нем знаков доллара никакие дальнейшие замены не производятся:
$х = *$fred'; # буквально знак доллара и слово "fred"
$у = "hey $х"; # значение — 'hey $fred'; двойной подстановки нет
Если необходимо предотвратить подстановку значения вместо имени переменной, необходимо либо изменить эту часть строки так, чтобы она стояла в одинарных кавычках, либо поставить перед знаком доллара обратную косую, которая отменяет его специальное значение:
$fred = 'hi';
$barney = "a test of ".'$fred'; # буквально: 'a test of $fred'
$barney2= "a test of \$fred"; # то же самое
В качестве имени переменной будет взято самое длинное из возможных имен, имеющих смысл в этой части строки. Это может вызвать проблему, если вы хотите сразу же после заменяемого значения дать какой-то постоянный текст, который начинается с буквы, цифры или знака подчеркивания. Проверяя строку на предмет наличия имен переменных, Perl посчитал бы эти символы дополнительными символами имени — а как раз этого вам и не нужно. В Perl имеется разделитель имени переменной. Просто заключите имя переменной в фигурные скобки. Другой вариант — завершить эту часть строки и начать другую часть строки знаком операции конкатенации:
$fred = "pay";
$fredday = "wrong!";
$barney = "It's $fredday"; # не день зарплаты payday, a "It's wrong!"
$barney = "It's ${fred}day"; # теперь $barney получает значение "It's payday"
$barney2 = "It's $fred"."day"; # еще один способ
$barney3 = "It's ".$fred."day"; # и еще один
* И переменных-массивов, но этот вопрос мы будем рассматривать в главе 3 Массивы и списочные данные.
Для изменения регистра букв, задействованных в интерполяции переменных, можно использовать специально предназначенные для этого строковые управляющие последовательности*. Например:
$bigfred = "\Ufred"; # $bigfred имеет значение "FRED"
$fred = "fred"; $bigfred = "\U$fred"; # то же самое
$capfred = "\u$fred"; # $capfred имеет значение "Fred"
$barney = "\LBARNEY"; # $barney теперь имеет значение "barney"
$capbarney = "\u\LBARNEY"; # $capbarney теперь имеет значение "Barney"
$bigbarney = "BARNEY"; $capbarney = "\u\L$bigbarney"; # то же самое
Как видите, изменяющие регистр строковые управляющие последовательности хранятся до тех пор, пока не окажут свое воздействие, поэтому, несмотря на то, что первая буква слова barney не стоит непосредственно за символами \и, она становится прописной благодаря воздействию \и.
Термин "интерполяция переменных" иногда заменяют термином "интерполяция двойных кавычек", потому что интерполяция выполняется в строках, заключенных в двойные кавычки. (А также в строках, заключенных в обратные кавычки, которые мы рассмотрим в главе 14.)
* Вы, возможно, придете к выводу, что легче воспользоваться функциями uc, ucfirst, lc И Icfirst.
Назад | Вперед
Содержание (общее) | Содержание раздела | Содержание подраздела
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|