【问题标题】:How do i load the package self in perl?我如何在perl中加载包self?
【发布时间】:2017-01-24 05:58:30
【问题描述】:

现在我正在尝试生成 XML 并从 Perl 打印出来。我发现了这个模块,XML::Write,它看起来相当不错。但是当我想尝试它时,我遇到了一些相当奇怪的错误......

我的测试脚本是这样的

#!/usr/local/bin/perl -w

use strict;
use strict 'refs';
use XML::Writer;

my $writer = XML::Writer->new(OUTPUT => 'self');
$writer->xmlDecl("ISO-8859-1");
$writer->startTag("foo");
$writer->endTag("foo");
$writer->end;
print $writer->to_string;

当我运行它时,唯一的输出是

无法在 /usr/lib/perl5/site_perl/5.8.8/XML/Writer.pm 第 132 行通过包“self”找到对象方法“print”(也许您忘记加载“self”?)。

我错过了什么?我是否必须安装一些额外的模块才能使 perl 的 OO 部分可用?既然我有一个相当旧的 Perl 版本,我应该以某种方式安装旧版本的 XML::Write 吗?

任何帮助将不胜感激!

【问题讨论】:

  • 你运行的是什么版本? (perl -MXML::Writer -e'print "$XML::Writer::VERSION\n"')
  • 你是如何执行程序的?
  • 好吧,当我尝试执行它时,它工作正常。也许你需要重新安装模块
  • 在这里也可以工作(perl 5.14.2, XML-Writer 0.623 on ubuntu 12.04)
  • 我正在运行 Perl 版本 5.8.8 和 perl -MXML::Writer -e'print "$XML::Writer::VERSION\n"' 返回 0.612

标签: perl


【解决方案1】:

v0.620 中添加了构造函数OUTPUT 选项的特殊值self。以前,它需要 IO::Handle 或标量引用。

安装当前版本以使用此功能,或查阅the version you have installed 的文档(例如,使用命令行perldoc XML::Writer 或在“转到版本”下拉列表中选择您的版本) metacpan page.)

对于您的用例,您可以提供参考:

my $output;
my $writer = XML::Writer->new(OUTPUT => \$output);
...;
print $output;

【讨论】:

  • 谢谢!这解决了它(有点......)。使用 use strict 'refs' 时,它会抱怨 print 语句,但如果我将其更改为我的 $output = '';并打印 $output 一切正常。
  • print $output 应该是让它工作所需的全部内容。
【解决方案2】:

我收到了类似的错误消息。我的问题是我在尝试加载的模块正文中缺少$sign。有一条指令 self->... 应该是 $self->....

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 2011-02-20
    相关资源
    最近更新 更多