slu@new-host:~ 19:59:33
❯ perl -e "print (2 ~~ (1, 2, 3))"
slu@new-host:~ 19:59:39
❯ perl -e "my @a = (1, 2, 3); print (2 ~~ @a)"
1
不可否认,第二种形式并不比第一种形式简洁得多,但我很想知道为什么第一种形式失败。
答案 0 :(得分:4)
1,2,3
是列表文字或列表运算符,而不是数组文字。标量上下文中的列表运算符返回其最后一个操作数计算的值,因此
print (2 ~~ (1, 2, 3))
装置
print(2 ~~ 3) # Plus two void context warnings
鉴于此
print (2 ~~ @a)
是
的语法糖print(2 ~~ \@a)
你可以使用
print(2 ~~ do { my @a = (1,2,3); \@a })
或接近等效但更短的
print(2 ~~ [1,2,3])
答案 1 :(得分:0)
看起来这样有效
slu@new-host:~ 20:00:31
❯ perl -e "print (2 ~~ [1, 2, 3])"
1