如何跳过类似于Haskell模式匹配的Perl列表赋值中的元素?

时间:2015-01-17 02:29:23

标签: perl pattern-matching variable-assignment

在Haskell(以及其他各种函数式编程语言)中,pattern matching可用于分配列表的特定元素,同时丢弃其他元素:

Prelude> let [x, _, z] = "abc"
Prelude> x
'a'
Prelude> [z, x]
"ca"

请注意,“_”不是变量,也没有分配任何内容:

Prelude> _

<interactive>:5:1: Pattern syntax in expression context: _

对于用Perl编写的Irssi脚本,我想做类似的事情并丢弃'@_'的2 nd 元素(即不将它分配给任何东西):< / p>

my ($message, _, $windowItem) = @_;

此操作失败,并显示错误消息:“Can't declare constant item in "my" at [...]overlength_filter.pl line 17, near ") ="

那么这个下划线通配符的Perl等价物是什么?

2 个答案:

答案 0 :(得分:7)

只需将其分配给undef

my ($message, undef, $windowItem) = @_;

答案 1 :(得分:3)

您还可以获取数组的一部分:)

my( $message , $winItem ) = @_[ 0, 2];