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

标签 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脚本,我想做类似的事情,并丢弃“@_”的第二个元素(即,不将其分配给任何东西):
my ($message, _, $windowItem) = @_;

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

那么,该下划线通配符的Perl等价于什么?

最佳答案

只需将其分配给undef即可。
my ($message, undef, $windowItem) = @_;

关于perl - 如何跳过类似于Haskell模式匹配的Perl列表分配中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27995584/

相关文章:

Python:如何理解赋值和引用?

相同地址的C结构分配有效吗?

perl - 在 Perl 中使用词法目录句柄是否更可取?

perl - SSL 连接适用于 mysql 客户端,但不适用于 perl DBI :MariaDB

c# - 如何在 C# 中对具有抽象内部类型的泛型进行模式匹配?

Scala 模式匹配快速引用

C (C89) 当使用 for 循环将结构分配给结构变量时,它们都被设置为第一次迭代结果的值

perl - 为什么安装某些 CPAN 模块需要 root 权限?

string - 使用 Perl 从字符串中删除 BOM

Java正则表达式根据每个id的重复子字符串提取id字符串