簡體   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