perl – 为什么我不能初始化new里面的成员变量?

我试图在Perl中找不到OO.我做了以下琐碎课:

#/usr/bin/perl  
package Tools::Util;  
use strict;  
use warnings;  

my $var;  

sub new {  
    my ($class,$arg) = @_;   
    my $small_class = {  
        var => $arg,};  
    return bless $small_class;    
}  

sub print_object {  
    print "var = $var\n";  #this is line 20   
}  

1;

这是一个测试脚本:

#!/usr/bin/perl  
use strict;  
use warnings;  
use Tools::Util;  

my $test_object = new Tools::Util("Some sentence");  
$test_object->print_object();  
use Data::Dumper;  
print Dumper($test_object);

我得到的结果是:

Use of uninitialized value $var in concatenation (.) or string at Tools/Util.pm line 20.   
var =   
$VAR1 = bless( {  
                 'var' => 'Some sentence'   
               },'Tools::Util' );

我不明白这.我认为Perl中的对象是哈希值,因此我可以使用相同的名称访问/初始化成员变量而不使用$.为什么在这种情况下$var没有初始化但是我转储的哈希包含值?
我应该如何使用/初始化/处理成员变量以及我在这里误解了什么?

解决方法

$var是词法类变量,在您的示例中未定义.

你可能想要:

sub print_object {  
    my $self = shift;
    print "var = $self->{var}\n";
}

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...