我想将右侧的整个字符串分配给左侧的变量
my $branch = "\t" x $level, "$level -> $treeRoot\n";
其中$level
是数字,$treeRoot
是字符串。当我尝试打印$branch
时,它表示该变量为空。
应该发生什么的示例:说$level
是5
而$treeRoot
是"string"
。我希望$branch
取值:
my $branch = "\t\t\t\t\t5 -> string\n";
答案 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
启用strict
和warnings
通常是个好主意。