2015-09-30 32 views
1
#!/usr/bin/perl -w 
use strict; 
use warnings; 

use Class::Struct; 

struct System => { 
    Name => '$', 
}; 

my $system = new System; 
$system->Name("Server1"); 

my $strout1 = qq{Server is ${$system->Name}\n}; 
my $strout2 = "Server is \"".$system->Name."\"\n"; 

print $strout1; 
print $strout2; 

結果:不能使用字符串(「服務器1」)作爲標裁判而「嚴格裁判」使用

不能使用字符串(「服務器1」)作爲標REF而「嚴格裁判」在 使用在test.pl線14

我希望能夠用QQ和正確DEREF $system->Name。任何人都可以解釋我要去哪裏?

回答

4

方法調用不是插入到雙引號字符串中,而是取消引用。如果要插入方法調用的結果,則必須對其引用進行取消引用:

my $strout1 = qq{Server is ${\$system->Name}\n}; 
+0

完美的謝謝你。 – Ryan

+1

通常使用'「@ {[$系統 - >名稱]}」'代替 –

1

Name方法是否真的返回一個引用?因爲這看起來錯誤:

${$system->Name} 

那提領的東西,所以我覺得應該寫成簡單$system->Name

如果你嘗試你會引發同樣的錯誤:

print ${"Server1"}; 

這表明你實際上得到了一個文本字符串。

+0

這是我可以讓值出現在任何輸出中的唯一方法。 – Ryan

相關問題