复制perl对象ref

时间:2011-06-23 19:51:04

标签: perl object reference copy clone

如何复制/克隆已被“祝福”的对象引用?例如,我有

my $html = HTML::PullParser->new(file => $file, text => 'text');

然后我想通过

多次迭代$html个对象
$html->get_token();

所以我试图首先复制对象:

use Clone qw(clone);
my $html1 = clone($html);
my $html2 = clone($html);

然后我尝试迭代新对象:

while ($html1->get_token()) {
    # do something
}
while ($html2->get_token()) {
    # do something else
}

但很明显,对象不会被复制(或者至少不会以正确的方式复制),这样我就不会在任何一个循环中得到任何迭代。

复制此对象的正确方法是什么?

THX !!

1 个答案:

答案 0 :(得分:3)

通常,克隆对象需要了解其内部结构。 Clone只复制内部结构,该结构适用于普通数据结构和许多对象,但是以不可预测的方式在更复杂的对象上失败。

在这种情况下,HTML::PullParser对象正在从文件句柄中读取。克隆的副本获得对相同文件句柄的引用,因此它们不是独立的。

某些对象有clone方法,但HTML :: PullParser没有。您可以创建多个对象:

my $html1 = HTML::PullParser->new(file => $file, text => 'text');
my $html2 = HTML::PullParser->new(file => $file, text => 'text');

他们将是独立的。或者您是否尝试在解析过程中克隆对象?也许您可以解释为什么您认为需要克隆解析器,我们可以建议更好的方法。