our ($table_data, $tr_data, $gi_td); sub table { my ($s, %table) = @_; my $table = {}; $table->{table_node} = $s->look_down($ID, $table{gi_table}); my @table_gi_tr = listify $table{gi_tr} ; my @iter_node = map { $table->{table_node}->look_down($ID, $_) } @table_gi_tr; tie $table->{iter_node}, 'Tie::Cycle', \@iter_node; $table->{content} = $table{content}; $table->{parent} = $table->{table_node}->parent; $table->{table_node}->detach; $_->detach for @iter_node; my $add_table; while (my $row = $table{tr_data}->($table, $table{table_data})) { ++$add_table; # wont work: my $new_iter_node = $table->{iter_node}->clone; my $I = $table->{iter_node}; my $new_iter_node = $I->clone; $table{td_data}->($new_iter_node, $row); $table->{table_node}->push_content($new_iter_node); } $table->{parent}->push_content($table->{table_node}) if $add_table; }