我试图在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"; }