Perl .exe 文件:无法对未定义的值调用方法“encode”

Perl .exe file: Can't call method “encode” on an undefined value

我是 Perl 的初学者。 我制作了我的 Perl 脚本,我想将 Perl 脚本制作成一个独立的可执行文件。为了创建 .exe 文件,我使用了 PAR::Packer。创建并执行 .exe 文件后出现这样的错误:

  Can't call method "encode" on an undefined value at Win32/Unicode/Util.pm line 36, <DATA> line 2125.
    Compilation failed in require at Win32/Unicode.pm line 14, <DATA> line 2125.
    BEGIN failed--compilation aborted at Win32/Unicode.pm line 14, <DATA> line 2125.
    Compilation failed in require at if.pm line 13, <DATA> line 2125.
    BEGIN failed--compilation aborted at App/Weryfikacja/Term.pm line 7, <DATA> line 2125.
    Compilation failed in require at App/Weryfikacja/Log.pm line 8, <DATA> line 2125.
    BEGIN failed--compilation aborted at App/Weryfikacja/Log.pm line 8, <DATA> line 2125.
    Compilation failed in require at App/Weryfikacja.pm line 17, <DATA> line 2125.
    BEGIN failed--compilation aborted at App/Weryfikacja.pm line 17, <DATA> line 2125.
    Compilation failed in require at script/diagfull.pl line 54, <DATA> line 2125.
    BEGIN failed--compilation aborted at script/diagfull.pl line 54, <DATA> line 2125.

我想注意到 Perl 脚本运行良好。什么会导致我的 .exe 文件不起作用?也许我需要向 .exe 文件添加模块或类似的东西?

如果您能详细说明如何使用 PAR::Packer 中的 pp 实用程序,其他人可能更容易提供帮助。如果没有这些细节,我会假设你做了类似 "pp -o test.exe test.pl".

的事情

我建议的第一件事是使用 -c and/or -x 选项。使用了这些选项 "to determine additonal run-time dependencies"。请记住,这些选项区分大小写。

如果这不能解决所有问题,您可能需要使用其他选项。查看 pp 实用程序的文档以获取有关其他选项的更多详细信息。

此外,我注意到您在问题中添加了 "mojo" 标记,因此我假设您的代码使用的是 Mojolicious。如果是这种情况,您可能需要查看此 blog 以获取有关使用 Mojolicious 创建独立应用程序的一些帮助。

我遇到了类似的问题,对我来说这个问题已经通过这个答案解决了 by Nate Glenn to this question What to include when using Encode with PAR Packer:

The culprit was a run-time require used by Encode.pm, line 120, to load Encode::Unicode. To make this program work, I used the following:

pp -o encode_test.exe encode_test.pl -M C:/strawberry/perl/lib/Encode/Unicode.pm

我用了-M Encode::Unicode.