%files_data = {
'./GetOpt.pm' => {
'pid' => {
'56061' => 1,
'56065' => 1
}
},
'file1' => {
'pid' => {
'56061' => 2
}
},
'file2' => {
'pid' => {
'56065' => 2
}
},
'./src/bin/perl' => {
'pid' => {
'56061' => 1,
'56065' => 1
}
}
};
####
%process_data = (
'56061' => {
'parent' => 'NA',
'name' => 'file1'
},
'56069' => {
'parent' => '56065',
'name' => 'echo Hello_file1'
},
'56062' => {
'parent' => '56061',
'name' => 'echo Hello_file2'
},
'56065' => {
'parent' => '56061',
'name' => 'file2'
}
);
####
%hash = (
'file1' => {
'/src/bin/perl' => 1,
'file2' => {
'/src/bin/perl' => 1,
'./GetOpt.pm' => 1
},
'./GetOpt.pm' => 1,
}
);
####
file1 => file2 => ./GetOpt.pm
####
file1 => {
./GetOpt.pm,
file2 => ./GetOpt.pm
}
####
create_proc_tree(\%process_data,\%files_data);
sub create_proc_tree
{
my ($proc_href,$files_href) = @_;
my %hash;
while (my ($file, $procs) = each %{$files_href}) {
foreach my $pid (keys(%{$procs->{'pid'}})) {
my $prev_file = $file;
do {
my $parent_id = $proc_href->{$pid}{parent};
my $parent_name = $proc_href->{$pid}{name};
if ($prev_file eq $parent_name) {
$hash{$parent_name} = 1;
} else {
$hash{$parent_name} = { (%{ $hash{$prev_file} // {} }, $prev_file) };
delete($hash{$prev_file});
}
$prev_file = $parent_name;
my $parent_name = $proc_href->{$parent_id}{name};
} while(defined($parent_name));
}
}
print Dumper(\%hash); # Printing for debug
}
####
use Data::Dumper;
$abc = "Mouse=>Jerry, Cat=>Tom, Dog=>Spike";
my %hash = eval( "( $abc )" );
print Dumper(\%hash);