在引用中,如何从其他文本中分离变量:
示例,我想打印“YellowBrick”:
my $var = 'Yellow';
print "$varBrick";
# $varBrick not defined!!
您可以使用:
print "@{[$var]}Brick"
我不理解的是语法:每次逃避一个变量时都需要5个characeters(@{[]}
)吗? @ {}或[]的含义是否有意义?这是一个阵列,然后是一个阵营或什么?
基本上我的问题是使用@{[]}
谢谢!
答案 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"
?...保持简单: - )