2012-08-01 93 views
0

我有一個結構,並想引號打印perl的結構成員

內內容打印出來
#!/usr/bin/perl 

use Class::Struct; 

struct(astruct => [ test => '$']); 

my $blah = new astruct; 
$blah->test("asdf"); 

print "prints array reference: '$blah->test'\n"; 
print "prints content: '", $blah->test, "'\n"; 

輸出是

prints array reference: 'astruct=ARRAY(0x20033af0)->test' 
prints content: 'asdf' 

是有辦法引號內打印的內容?

它使我的代碼有點sc having不得不打開和關閉引號一直。使用``來運行使用結構內容的命令時也是有問題的。

回答

2

可變$blahモ數組引用和是插值到字符串之前它可以解除引用。要改變這種狀況,我們把解引用或者字符串外:

print "prints no array reference any more: '".($blah->test)."'\n"; 
# parenthesis was optional 

或拉一個小竅門,用匿名數組:

print "prints no array reference any more: '@{[$blah->test]}'\n"; 

我們反引用(@{...})匿名數組([...])我們從test方法的返回值構造。 (我們你的結構領域,等等。)

雖然這兩種方法構建一個字符串時工作,第二種形式可以很容易地在qx反引號環境中使用。你也可以建立一個字符串$command,然後用qx($command)執行。

如果您不需要Class::Struct的附加功能,您可以隨時使用散列和饒了自己的麻煩:

%blah = (test => 'asdf'); 
print "prints my value: '$blah{test}'\n"; 

$blah = {test => 'asdf'}; 
print "prints my value: '$blah->{test}'\n"; 
+0

只是使用散列的好主意,即使在''' – matt 2012-08-01 12:17:20

2

你有沒有考慮過波爾斯的Data::Dumper

鑑於標量或引用變量的列表,在Perl語法寫出他們的 內容。引用也可以是對象。每個變量的 內容以單個Perl語句輸出。正確處理 自引用結構。

+0

這可能使打印字符串更容易,但難道不解決''問題。我想reallu我希望有一種方式來減輕它的影響。 – matt 2012-08-01 10:30:44