perl - 如何将 EXPORT_TAGS 导入 EXPORTS_OK?
问题描述
尝试使用标签对我的模块导出进行分组,我想避免多次列出名称,所以我尝试了这个:
our %EXPORT_TAGS = (
'command_types' => [qw(ENQ ACK NAK)],
'commands' => [qw(A B C)],
'status_codes' => [qw(OK FAILED)],
'default' => [
qw(:status_codes :command_types :status_codes)
]);
our @EXPORT = @{$EXPORT_TAGS{':default'}};
our @EXPORT_OK = @{$EXPORT_TAGS{':default'}};
但不幸的是,Perl 5.18 告诉我一些关于未定义数组引用的信息@{$EXPORT_TAGS{':default'}}
(“不能使用未定义值作为数组引用...”)。但是,当我删除 external 时@{...}
,Perl 不再抱怨,但结果(数组引用而不是数组)是错误的。
我错过了什么?
更新:
当我从 中删除冒号时:default
,错误消息消失,但随后我收到关于Can't export symbol: :command_types
. 如果我从中删除冒号,:command_types
我不会再收到错误(此时),但是这不会尝试导出一个名为而不是所有符号command_types
的符号 tagcommand_types
吗?
结果是有效的@EXPORT = qw(status_codes command_types status_codes)
。
解决方案
根据文档%EXPORT_TAGS
,您不应该在哈希中包含标签名称的前导冒号。
所以你也可以尝试这样的事情:
our %EXPORT_TAGS = (
'command_types' => [qw(ENQ ACK NAK)],
'commands' => [qw(A B C)],
'status_codes' => [qw(OK FAILED)],
);
my @default_tags = qw(status_codes command_types commands);
my @default;
push @default, @{$EXPORT_TAGS{$_}} for @default_tags;
our @EXPORT = @default;
our @EXPORT_OK = @default;
推荐阅读
- java - Gmail API Java 实现错误(未找到凭据)
- apache-kafka - Kafka DSL KStream 转换器之间的 Kafka 共享状态存储
- html - 如何使用变换比例使字母大于“加粗”
- git - git:本地仓库不做pull,但是push成功
- python - 如何将两个txt文件中具有相同列的数据获取到新的txt?
- javascript - 将 fetch 中的数据插入 HTML div
- mongodb - Mongodb查询聚合和Groupby复杂过滤、求和、百分比查询
- qt - qml Surface3D将随机线绘制到原点
- python - 从 UDP 数据包中获取音频文件
- postgresql - 从连接中获取 PostgreSQL 服务器版本?