2013-03-12 2 views
0

В цитате, как вы можете Seperate переменные из другого текста:Perl: синтаксис для использования переменных в кавычках

примера, я хочу напечатать «YellowBrick»:

my $var = 'Yellow'; 

print "$varBrick"; 

# $varBrick not defined!! 

Вы можете использовать:

print "@{[$var]}Brick" 

Что я не понимаю, это синтаксис: все ли 5 ​​символов (@{[]}) нужны каждый раз, когда вы выходите из одной переменной? Есть ли значение @ {} или []? Является ли это созданием массива, а затем ссылкой на aarray или что-то еще?

В основном мой вопрос, что другие трюки можно сделать с @{[]}

Спасибо!

ответ

4

На самом деле, вам нужно только

print "${var}Brick"; 

или

print $var."Brick"; 

"@{ EXPR }" интерполяцию массив, на который ссылается ссылка, возвращаемая выражением.

[ ... ] - это конструктор массива. Он возвращает ссылку на новый массив, инициализированный назначением списка внутри скобок в массив.

-1

почему не print $var."brick"? .. держать его просто :-)

+0

downvoter поясните! –

+0

Задача вопроса заключается в том, как использовать переменную * внутри * кавычек, а не вне кавычек. – Myforwik

2

Для простых скаляров, вы можете просто использовать фигурные скобки в качестве разделителей:

"${var}Brick" 

@{[]} хак, который позволяет интерполяции произвольных выражений. Так же, как и вне строки, @{ $x } обрабатывает $x как ссылку на массив и разыскивает ее. [] - это конструктор ссылок анонимного массива. Таким образом, композиции

"@{[ $var ] }Brick" 

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

Обратите внимание, что поскольку "@{[ ... ]}" полагается на интерполяцию массива, если ... - это значение списка, оно подлежит $LIST_SEPARATOR.

2

Настоящий трюк заключается в том, что дальнейшая интерполяция может быть выполнена. Например, рассмотрим, @ {[sprintf ("%. 02f", $ var)]}. Как предполагает Аникет, обычно нет оснований использовать что-то подобное, но оно может быть полезно, например, в документах, где вы не можете выпрыгнуть из кавычек для интерполяции чего-то, а затем вернуться. В целом, это вероятно, не самая лучшая идея использовать это, поскольку это может помешать другим, пытаясь понять ваш код. Но это аккуратный трюк.

Смежные вопросы