如何跳过类似于 Haskell 模式匹配的 Perl 列表分配中的元素?
How can I skip elements in Perl list assignment akin to Haskell pattern matching?
在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 脚本,我想做类似的事情并丢弃“@_
”的 2nd 元素(即不分配它任何事情):
my ($message, _, $windowItem) = @_;
失败并显示错误消息:“Can't declare constant item in "my" at [...]overlength_filter.pl line 17, near ") ="
”
那么这个下划线通配符在 Perl 中的等价物是什么?
分配给undef
即可。
my ($message, undef, $windowItem) = @_;
你也可以取数组的一部分:)
my( $message , $winItem ) = @_[ 0, 2];
在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 脚本,我想做类似的事情并丢弃“@_
”的 2nd 元素(即不分配它任何事情):
my ($message, _, $windowItem) = @_;
失败并显示错误消息:“Can't declare constant item in "my" at [...]overlength_filter.pl line 17, near ") ="
”
那么这个下划线通配符在 Perl 中的等价物是什么?
分配给undef
即可。
my ($message, undef, $windowItem) = @_;
你也可以取数组的一部分:)
my( $message , $winItem ) = @_[ 0, 2];