【问题标题】:Can't use string ("Server1") as a SCALAR ref while "strict refs" in use在使用“严格引用”时不能使用字符串(“Server1”)作为 SCALAR 引用
【发布时间】:2015-09-30 12:35:57
【问题描述】:
#!/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”在 在 test.pl 第 14 行使用。

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

【问题讨论】:

    标签: perl class struct scalar


    【解决方案1】:

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

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

    【讨论】:

    • 通常使用" @{[ $system->Name ]} " 代替
    【解决方案2】:

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

    ${$system->Name}
    

    这是取消引用,所以我认为应该简单地写成$system->Name

    如果你尝试,你会触发同样的错误:

    print ${"Server1"};
    

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

    【讨论】:

    • 这是我可以让值出现在任何输出中的唯一方法。
    猜你喜欢
    • 2018-04-08
    • 2023-03-31
    • 2020-05-22
    • 2022-01-15
    • 2020-02-21
    • 2015-06-18
    • 2017-05-25
    • 2016-12-11
    相关资源
    最近更新 更多