[英]Perl - assigning a composite string to a variable
我想将右边的整个字符串分配给左边的变量
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";
更换
my $branch = "\t" x $level, "$level -> $treeRoot\n";
与
my $branch = "\t" x $level . "$level -> $treeRoot\n";
.
是字符串串联运算符。
从文档中,
运营商 :
二进制“,”是逗号运算符。 在标量上下文中,它评估其左自变量,将该值扔掉,然后评估其右自变量并返回该值。 就像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";
您的代码将按预期工作。
PS如果添加如果添加:
use strict;
use warnings;
在文件的顶部,Perl会警告您某些错误:
Useless use of string in void context
启用strict
和warnings
通常是一个好主意。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.