当我创建2个独立的Perl对象实例时,第二个对象将覆盖第一个对象的数据。我是OO Perl的新手,所以我认为我在处理类中的$ self变量时缺少一些基本的东西。为什么$ ptr2对象的数据覆盖$ ptr1对象的数据?它可能是Perl专家提供的一个简单的1分钟的答案,但我一直在为此感到痛苦。我的实际应用程序应该从不同来源获取大量数据并运行一些数据分析,因此下面是一个简化版本,用于显示手头的问题。新的perl对象覆盖先前对象的数据
我没有检查one other question与下面相同的主题相关,但它似乎不同于我的问题。
下面是我在类:
package TestClass;
sub new {
my ($object, $file) = @_;
my $class = ref($object) || $object;
my $self = { myfile => $file, };
bless($self, $class);
return($self);
}
# grabs key-val pairs from file
sub getFileData {
my($self) = @_;
open (FILE, "$self->{myfile}") or die "Cannot open\n";
while (my $curline = <FILE>) {
my @fields = split(/\s+/,$curline);
$self{$fields[0]} = $fields[1];
}
close FILE;
}
# prints key-val pairs to stdout
sub printFileData {
my($self) = @_;
foreach my $key (keys %self) {
print "$key -> $self{$key}\n";
}
}
1;
下面是我如何打电话的类对象:
use TestClass;
my $ptr1 = TestClass->new("test1.txt");
my $ptr2 = TestClass->new("test2.txt");
$ptr1->getFileData();
print "This is correct for test1.txt\n";
$ptr1->printFileData();
$ptr2->getFileData();
print "This is wrong for test1.txt, test2.txt overwrote test1.txt\n";
$ptr1->printFileData();
$ptr2->printFileData();
test1.txt的和具有的test2.txt单线路“VAL1 1 '和'VAL1 2'。脚本的
输出如下所示:
This is correct for test1.txt
VAL1 -> 1
This is wrong for test1.txt, test2.txt overwrote test1.txt
VAL1 -> 2
VAL1 -> 2
'use strict;使用警告;'会为你找到这些错误。 –