如何复制/克隆已被“祝福”的对象引用?例如,我有
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 !!
答案 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');
他们将是独立的。或者您是否尝试在解析过程中克隆对象?也许您可以解释为什么您认为需要克隆解析器,我们可以建议更好的方法。