在使用 "strict refs" 时不能使用字符串 ("Server1") 作为 SCALAR ref
Can't use string ("Server1") as a SCALAR ref while "strict refs" in use
#!/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;
结果:
Can't use string ("Server1") as a SCALAR ref while "strict refs" in
use at test.pl line 14.
我希望能够正确使用 qq 和 deref $system->Name
。谁能解释我哪里出错了?
Name
方法真的是 return 参考吗?因为这看起来不对:
${$system->Name}
那是取消引用,所以我认为应该写成简单的 $system->Name
如果您尝试,您将触发相同的错误:
print ${"Server1"};
这表明您实际上正在取回文本字符串。
方法调用不会插入到双引号字符串中,但取消引用是。如果要对方法调用的结果进行插值,则必须取消对它的引用:
my $strout1 = qq{Server is ${$system->Name}\n};
#!/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;
结果:
Can't use string ("Server1") as a SCALAR ref while "strict refs" in use at test.pl line 14.
我希望能够正确使用 qq 和 deref $system->Name
。谁能解释我哪里出错了?
Name
方法真的是 return 参考吗?因为这看起来不对:
${$system->Name}
那是取消引用,所以我认为应该写成简单的 $system->Name
如果您尝试,您将触发相同的错误:
print ${"Server1"};
这表明您实际上正在取回文本字符串。
方法调用不会插入到双引号字符串中,但取消引用是。如果要对方法调用的结果进行插值,则必须取消对它的引用:
my $strout1 = qq{Server is ${$system->Name}\n};