【问题标题】:Error while conditionally using perl module有条件地使用 perl 模块时出错
【发布时间】:2014-08-08 05:22:16
【问题描述】:
if (a == b)
{
    eval "require IO::Compress::Gzip qw(gzip)";
}

这是我根据条件包含 gzip 所做的,但在运行时它会给出如下错误

Can't locate object method "gzip" via package "IO::Handle" (perhaps you forgot to load "IO::Handle"?)

有什么帮助吗?谢谢。

【问题讨论】:

    标签: perl


    【解决方案1】:

    要有条件地包含一个模块,请使用if pragma

    use if ($x == $y), 'IO::Compress::Gzip' => qw(gzip);
    

    请注意,CONDITION 中的变量必须是包级别的并在 BEGIN 块中初始化。

    或者,您可以使用以下内容:

    if ($x == $y) {
        require IO::Compress::Gzip;
        IO::Compress::Gzip->import('gzip');
    }
    

    【讨论】:

    • 米勒,我用了你的第二个解决方案,得到了同样的错误,让我试试“使用”。我正在使用 perl,v5.6.1 谢谢。
    • 做一个基本的使用语句会给出这个错误吗? use IO::Compress::Gzip qw(gzip);我怀疑你的环境还有其他问题。
    • 是的,使用 IO::Compress::Gzip qw(gzip $GzipError);有效,但不是您的替代解决方案,可能是 Perl 版本 5.6.1 没有该支持?
    • Perl 5.6.1 已经超过 13 年了。但我认为这与您的错误无关。
    • Perl 5.6.1 甚至不是最新的 Perl 5.6.x 版本!
    猜你喜欢
    • 2011-04-26
    • 1970-01-01
    • 2018-12-09
    • 2014-09-30
    • 2017-06-08
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多