2013-06-28 40 views
2

現在我正試圖生成XML並從Perl打印出來。我發現這個模塊,XML :: Write,看起來相當不錯。但是,當我想嘗試一下我跑在一些比較奇怪的錯誤...我如何在perl中加載自包?

我的測試腳本看起來像這樣

#!/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行找到對象方法「print」via「self」(也許你忘了加載「self」?)。

我錯過了什麼?我是否必須安裝一些額外的模塊以使perl的OO部分可用?我是否應該以某種方式安裝舊版本的XML :: Write,因爲我有一個相當老的Perl版本?

任何幫助,將不勝感激!

+0

您運行的什麼版本? ('perl -MXML :: Writer -e'print「$ XML :: Writer :: VERSION \ n」'') – amon

+0

你是如何執行程序的? –

+0

那麼當我嘗試執行它,它工作正常。也許你需要重新安裝模塊 – 2013-06-28 13:04:18

回答

8

對於構造函數OUTPUT選項的特殊值self添加在v0.620中。此前,它預計有一個IO::Handle或標量引用。

安裝最新的版本才能夠使用此功能,或諮詢的the version you have installed的文檔(例如,使用命令行perldoc XML::Writer或通過在metacpan page「轉到版本」下拉列表中選擇您的版本。)

爲了您的使用情況,您可以提供一個參考:

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

謝謝!這解決了它(有點......)。當使用use strict'refs'時,它會抱怨打印語句,但如果我將其更改爲我的$ output ='';並打印$輸出一切正常。 – Spade

+1

'print $ output'應該是你所需要做的所有工作。 – friedo

0

我有一個類似的錯誤消息。我的問題是我錯過了一個$登錄在我正試圖加載模塊的正文。有一個指令self->...本來應該$self->....

我希望這有助於