0

我创建了一个包含该Switch模块的 perl 脚本。

hello_world.pl

use strict;
use warnings;
use Switch;
use Data::Dumper;

my $var = "Hello World\n";
print Dumper($var);

如果我启动perl hello_world.pl一切正常。但是,如果我打包我的脚本pp hello_world.pl而不是启动./a.out它会给我这个错误:

在@INC 中找不到 Switch.pm(您可能需要安装 Switch 模块)(@INC 包含:CODE(0x7fb2631e6a88) /var/folders/rb/2b5sbs355n57svwzjjh7cb9c0000gn/T/par-6967676c6f62616c33/cache-710e96784204964ab8d6fe95 lib /var/folders/rb/2b5sbs355n57svwzjjh7cb9c0000gn/T/par-6967676c6f62616c33/cache-710e967842eb844ab8d6fe5f46968c1b6f49e019/inc CODE(0x7fb262988de0) CODE(0x7fb262989930)) at script/hello_world.pl line 3.
BEGIN 失败——编译在 script/hello_world.pl 第 3 行中止
4

2 回答 2

2
$ corelist Switch

Data for 2016-05-09
Switch was first released with perl v5.7.3, deprecated (will be CPAN-only) in v5.11.0 and removed from v5.13.1

Switch从来都不是一个好主意。这是一个源过滤器,这意味着它是一个聪明的聚会技巧,但不应该在生产代码中使用。出于这个原因,它已在几个版本之前从 Perl 中删除。

我怀疑你是在比未打包版本更新的 Perl 版本上运行打包程序 - 一个不再包含 Switch 的版本。

您可以在目标系统上安装 Switch,或者您可以研究如何pp将模块包含在包中。但最好的解决方案是重写代码以停止使用 Switch。

于 2016-05-17T09:30:01.190 回答
0

您可以尝试使用以下-M选项强制包含模块:

pp -M Switch -M YAML ...
于 2016-05-17T19:46:55.533 回答