【发布时间】:2010-08-28 13:49:50
【问题描述】:
所以,我是一个 perl 新手。尽管我的事情要复杂得多,但我突然遇到了障碍,无法弄清楚 wtf 的代码有问题。我已经大大简化了它,它只是一小段代码。
Test.pl
package Test;
sub new {
my ($class) = shift;
my $self = {
_attr => "asdfa"
};
bless $self, $class;
return $self;
}
sub log {
print "\nAccessed via class: ".$self->{_attr};
}
进程.pl
#!/usr/bin/perl
do "Test.pl";
use strict;
use warnings;
use diagnostics;
my($test) = new Test();
$test->log;
print "\nAccessed via main: ".$test->{_attr};
我运行 process.pl 并得到以下输出
通过类访问:
通过 main 访问:asdfa
我也收到警告
使用未初始化的值 Test.pl 处的连接 (.) 或字符串 第 12 行(#1) (W 未初始化)一个未定义的值被使用,就好像它已经被使用一样 定义。它被解释为“”或 0,但可能是一个错误。 要抑制此警告,请为您的变量分配一个定义的值。
所以问题是 $self 实际上是未定义的。为什么,我不知道。这不是初始化对象的方式吗?
【问题讨论】: