Есть код:
#!/usr/bin/perl -w
use strict;
use warnings;
use v5.10;
my $messages = [
{
id => 1,
root_id => 0,
reply_to => 0,
from_id => 1,
to_id => 2,
content => "Hello!\t"
},
{
id => 2,
root_id => 1,
reply_to => 1,
from_id => 2,
to_id => 1,
content => "> Hello!\tHi\t"
},
{
id => 3,
root_id => 0,
reply_to => 0,
from_id => 1,
to_id => 2,
content => "Privet! Kak dela?"
},
{
id => 4,
root_id => 3,
reply_to => 3,
from_id => 2,
to_id => 2,
content => "nHx!"
},
{
id => 5,
root_id => 1,
reply_to => 2,
from_id => 1,
to_id => 2,
content => ">> Hello!\t> Hi\tWhat's up?\t"
}
];
sub get_tree {
my ($tree, $pid) = @_;
my $msg = "\n";
foreach my $row (@{$tree}) {
if($row->{reply_to} eq $pid) {
$msg .= "# ".$row->{content}.&get_tree($tree, $row->{id});
}
}
return $msg;
}
print &get_tree($messages, 0, 0);
Как сделать проход не только по `reply_to`, но и сначала по `root_id`? `root_id` - идентификатор сообщения-корневого узла дерева треда.