Perl - 将复合字符串分配给变量

时间:2013-06-06 11:59:06

标签: string perl assign

我想将右侧的整个字符串分配给左侧的变量

my $branch =  "\t" x $level, "$level -> $treeRoot\n";

其中$level是数字,$treeRoot是字符串。当我尝试打印$branch时,它表示该变量为空。

应该发生什么的示例:说$level5$treeRoot"string"。我希望$branch取值:

my $branch = "\t\t\t\t\t5 -> string\n";

2 个答案:

答案 0 :(得分:7)

替换

my $branch = "\t" x $level, "$level -> $treeRoot\n";

my $branch = "\t" x $level . "$level -> $treeRoot\n";

.是字符串连接运算符。

答案 1 :(得分:0)

来自the , operator的文档:

  

二进制“,”是逗号运算符。在标量上下文中,它会评估它   左参数,抛弃该值,然后评估它的权利   参数并返回该值。这就像C的逗号运算符一样。

赋值运算符的优先级高于二进制逗号。基本上你的代码相当于:

(my $branch = "\t" x $level), "$level -> $treeRoot\n";

或者用逗号运算符写出:

my $branch = "\t" x $level;
"$level -> $treeRoot\n";

首先评估my $branch = "\t" x $level。然后,评估"$level -> $treeRoot\n"。但它是一个无效背景下的字符串。

如果您在右侧放置括号,可以进一步探讨这个问题:

my $branch =  ("\t" x $level, "$level -> $treeRoot\n");

现在,赋值本身不再是逗号运算符左侧的一部分。 $branch变量已分配"$level -> $treeRoot\n",或者为逗号运算符的右侧。

如果将逗号运算符更改为.,则字符串连接运算符:

my $branch = "\t" x $level . "$level -> $treeRoot\n";

您的代码将按预期工作。

P.S。如果添加如果添加:

use strict;
use warnings;

在您的文件顶部,Perl会给您一个警告,说明某些事情不对:

Useless use of string in void context

启用strictwarnings通常是个好主意。