繁体   English   中英

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

[英]Perl - assigning a composite string to a variable

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

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

其中$level是一个数字, $treeRoot是一个字符串。 当我尝试打印$branch它说变量为空。

应该发生的情况的示例:说$level5$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

启用strictwarnings通常是一个好主意。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM