$a,$b,$c = 1,2,3;
print "$a, $b, $c\n";
, , 1
因此,沒有=(等於)的時間比元組建設更高的優先級 - 這樣做呢?
$a,$b,($c=1),2,3;
$a,$b,$c = 1,2,3;
print "$a, $b, $c\n";
, , 1
因此,沒有=(等於)的時間比元組建設更高的優先級 - 這樣做呢?
$a,$b,($c=1),2,3;
是。有一個在perlop一個precedence table。賦值運算符是19級,並且逗號是20水平通常,Perl的運營商有相同的優先級相應的C運營商(對於那些具有一個相應的C運營商運營商)。
如果你的意思是你($a,$b,$c) = (1,2,3);
必須使用括號。
,你用它逗號操作符(在標量上下文)不是元組建築,它是在評估了幾個表達式並返回最後一個。
Perl根據上下文做了不同的事情,它根據預期的標量值,列表,什麼都沒有做,決定要做什麼,請參閱perldoc perldata
's section on Context的介紹。
所以,如果你這樣做:
perl -e '$a = (1 and 4,2,0); print"$a\n"'
你得到0
,因爲4,2,0
在標量環境,其行爲類似於C的逗號操作,評估逗號和返回的最後一個結果之間的表達式。
如果強制4,2,0
在列表環境進行評估:
perl -e '$a = (1 and @a=(4,2,0)); print"$a\n"'
你得到3
,因爲指派給磁盤陣列勢力列表上下文(附加括號是有沒有辦法解決所提到的優先發布CJM),和在標量上下文列表的值(通過被在標量上下文的and
的RHS被迫)是它具有的元件(在Perl邏輯and
返回最後計算的表達式,而不是一個布爾值如在其他的編程語言)的數量。
所以,CJM說,你需要做的:
($a,$b,$c) = (1,2,3);
處理優先和強制列表上下文。
通知的區別:
$ perl -e '$a,$b,$c = (7,6,8); print "$a $b $c\n"'
8
在標量上下文逗號操作符進行評價,並返回8.
$ perl -e '($a,$b,$c) = (7,6,8); print "$a $b $c\n"'
7 6 8
逗號操作符是在列表環境評估,並且返回一個列表。
$ perl -e '$a,$b,$c =() = (7,6,8); print "$a $b $c\n"'
3
逗號操作符在列表上下文中計算,返回一個列表,然後分配給$c
力標量上下文,返回列表中的元素的數量。