Perl:在引号中使用变量的语法

时间:2013-03-12 06:03:36

标签: perl

在引用中,如何从其他文本中分离变量:

示例,我想打印“YellowBrick”:

my $var = 'Yellow';

print "$varBrick";

# $varBrick not defined!!

您可以使用:

print "@{[$var]}Brick"

我不理解的是语法:每次逃避一个变量时都需要5个characeters(@{[]})吗? @ {}或[]的含义是否有意义?这是一个阵列,然后是一个阵营或什么?

基本上我的问题是使用@{[]}

可以做些其他技巧

谢谢!

4 个答案:

答案 0 :(得分:5)

实际上,你只需要

print "${var}Brick";

print $var."Brick";

"@{ EXPR }"插入由表达式返回的引用引用的数组。

[ LIST ]是数组构造函数。它通过将括号内的列表分配给数组来返回对初始化的新数组的引用。

这意味着

"@{[$var]}Brick"

相同
"@{ my @anon = $var; \@anon }Brick"

显然,我上面介绍的解决方案要好得多。

答案 1 :(得分:2)

对于简单的标量,您可以使用大括号作为分隔符:

"${var}Brick"

@{[]}是一个允许插入任意表达式的hack。就像它在字符串外部一样,@{ $x }$x视为数组引用并取消引用它。 []是匿名数组引用构造函数。所以配方

"@{[ $var ] }Brick"

说“创建一个字符串。首先构建一个包含$var值的匿名数组引用,然后将此引用转换为包含值$var的数组,然后插入一个元素的数组进入字符串并使用文字字符串'Brick'跟随它。“

请注意,因为"@{[ ... ]}"依赖于数组插值,如果...是列表值,则它受$LIST_SEPARATOR的限制。

答案 2 :(得分:2)

真正的诀窍是可以进行进一步的插值。例如,考虑@ {[sprintf(“%。02f”,$ var)]}。正如Aniket所暗示的那样,通常没有什么理由可以使用这样的东西,但它可以用在例如这里的文档中,你不能跳出引号来插入某些东西然后再回来。总而言之,它是可能不是最好的想法使用它,因为它可能会混淆其他人试图理解你的代码。但这是一个巧妙的伎俩。

答案 3 :(得分:-1)

为什么不print $var."brick"?...保持简单: - )