[英]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.