在使用“strict refs”时,不能使用字符串(“Server1”)作为SCALAR ref

时间:2015-09-30 12:35:58

标签: perl class struct scalar

#!/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;

结果:

  

在“strict refs”中,不能使用字符串(“Server1”)作为SCALAR引用   在test.pl第14行使用。

我希望能够正确使用qq和deref $system->Name。谁能解释我哪里出错?

2 个答案:

答案 0 :(得分:5)

方法调用不是用双引号字符串进行插值,而是取消引用。如果要插入方法调用的结果,则必须取消引用它的引用:

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

答案 1 :(得分:1)

Name方法真的会返回引用吗?因为这看起来不对:

${$system->Name}

取消引用某些内容,所以我认为应该简单地写成$system->Name

如果您尝试:

,您将触发相同的错误
print ${"Server1"};

这表明您实际上正在获取文本字符串。