【问题标题】:Class::Struct error: Can't locate object methodClass::Struct 错误:找不到对象方法
【发布时间】:2021-06-04 12:13:48
【问题描述】:

为了简化一些现有的工具,我想用一个结构数组替换几个数组。 所以我做了一个简单的示例代码来测试结构的创建。使用的代码如下:

use strict;
use warnings;

#package Net_Node;
use Class::Struct Net_Node => [host => '$', access => '$', pass => '$'];
#struct( host => '$', access => '$', user => '$', pass => '$' );

my $example = new Net_Node;

$example->host('dir ip');
$example->access('TELNET');
$example->user('hjack');
$example->pass('buttstalion');

print "\n\n\n";
print "${example->host}\n";
print "${example->access}\n";
print "${example->pass}\n";  

问题是当我尝试执行这个脚本时,我得到了这个错误:

Can't locate object method "host" via package "example" (perhaps you forgot to load "example"?) at test_2.pl line 15.

你能帮我找出我需要更正的地方吗?

【问题讨论】:

    标签: perl struct


    【解决方案1】:

    阅读Class::Struct EXAMPLES,看来需要调用struct函数:

    use warnings;
    use strict;
    use Class::Struct;
    
    struct(Net_Node => [host => '$', access => '$', pass => '$']);
    
    my $example = Net_Node->new();
    
    $example->host('dir ip');
    $example->access('TELNET');
    $example->pass('buttstalion');
    
    print $example->host, "\n";
    print $example->access, "\n";
    print $example->pass, "\n";
    

    打印出来:

    dir ip
    TELNET
    buttstalion
    

    另外,$example->host 似乎不会插入双引号。

    【讨论】:

      【解决方案2】:

      您的代码在结构访问器中存在错误,并且您在 Class::Struct 定义中错过了“用户”

      #!/usr/bin/env perl
      
      use strict;
      use warnings;
      use feature 'say';
      
      #package Net_Node;
      use Class::Struct Net_Node => [host => '$', access => '$', user => '$', pass => '$'];
      #struct( host => '$', access => '$', user => '$', pass => '$' );
      
      my $example = new Net_Node;
      
      $example->host('dir ip');
      $example->access('TELNET');
      $example->user('hjack');
      $example->pass('buttstalion');
      
      say "\n\n";
      say $example->host;
      say $example->access;
      say $example->pass;
      

      输出

      
      
      dir ip
      TELNET
      buttstalion
      

      【讨论】:

        猜你喜欢
        • 2021-11-01
        • 2015-12-29
        • 1970-01-01
        • 2013-06-01
        • 2015-06-02
        • 1970-01-01
        • 2015-03-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多