2

在引用中,如何将变量与其他文本分开:

例如,我想打印“YellowBrick”:

my $var = 'Yellow';

print "$varBrick";

# $varBrick not defined!!

您可以使用:

print "@{[$var]}Brick"

我不明白的是语法:@{[]}每次转义一个变量时都需要所有 5 个字符 ( ) 吗?@{} 或 [] 的意义何在?这是制作一个数组,然后是一个数组的引用还是什么?

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

谢谢!

4

4 回答 4

8

@{[...]}不需要。你只需要

print "${var}Brick";

或者

print $var."Brick";

"@{ EXPR }"对表达式返回的引用所引用的数组进行插值。

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

这意味着

"@{[$var]}Brick"

是相同的

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

显然,我上面介绍的解决方案要好得多。@{[...]}将允许您在字符串文字中嵌入 Perl 代码。

"...@{[ uc($var) ]}..."

如果它只是一个标量,也可以使用以下内容:

"...${\ uc($var) }..."

也就是说,我更喜欢使用连接而不是创建不必要的引用。

"...".( uc($var) )."..."   # The parens aren't needed here.
于 2013-03-12T06:07:11.223 回答
2

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

"${var}Brick"

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

"@{[ $var ] }Brick"

说“创建一个字符串。首先构建一个包含 的值的匿名数组引用$var,然后将此引用转换为包含 的值的数组$var,然后将该包含一个元素的数组插入到字符串中,并在其后加上文字字符串 'Brick' 。”

请注意,由于"@{[ ... ]}"依赖于数组插值,因此 if...是一个列表值,它受$LIST_SEPARATOR.

于 2013-03-12T16:05:02.797 回答
2

The real trick is that further interpolation can be done. For instance, consider, @{[sprintf("%.02f",$var)]}. As Aniket implies, there's usually little reason to use something like this, but it can be useful in, for example, here documents, where you can't jump out of the quotes for interpolating something and then back in. All in all, it's probably not the best idea to use this as it may confound others trying to understand your code. But it is a neat trick.

于 2013-03-17T14:53:23.500 回答
-1

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

于 2013-03-12T06:06:50.380 回答