I need create hash of dependency in Perl. The program1 depends from program2 program4 program10 program5 program7 program6 etc. Data are randomly generated for example:
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
use English qw( -no_match_vars );
my $dependsOrder = {};
while (my $line = <DATA>) {
chomp $line;
my ( $component, $depends ) = split /:/, $line;
if ( exists $dependsOrder->{$component} and $dependsOrder->{$component} == 1 ) {
$dependsOrder->{$component} = {};
}
if ( $depends ) {
$depends =~ s/^\s+|\s+$// if $depends;
my @depends = split /\s+/, $depends;
for my $dependency ( @depends ) {
if ( not exists $dependsOrder->{$dependency} ) {
# default value
$dependsOrder->{$dependency} = 1;
}
$dependsOrder->{$component}->{$dependency} = $dependsOrder->{$dependency};
}
}
else {
$dependsOrder->{$component} = 1;
}
}
print Dumper $dependsOrder->{'program1'};
#print Dumper $dependsOrder->{'program6'};
__DATA__
program1: program2 program4 program10 program5 program7 program6
program2: program7 program5 program9 program8 program10 program3 program6 program1
program3: program2 program9 program8
program4: program5 program8 program10 program1 program2 program2 program9
program5: program3 program6 program4 program7
program6: program5 program8 program7
program7: program1 program2 program9 program10
program8: program1 program9 program6 program10 program3 program2
program9:
program10: program6 program9
This code not really works:
$VAR1 = {
'program7' => 1,
'program10' => 1,
'program6' => 1,
'program2' => 1,
'program4' => 1,
'program5' => 1
};
But if I change the 22nd line:
$dependsOrder->{$dependency} = 1;
with:
$dependsOrder->{$dependency} = {};
It works fine, but I do not have a default value:
$VAR1 = {
'program7' => {
'program2' => {
'program8' => {
'program9' => {},
'program6' => {
What is wrong in my reasoning with default values?
1mean? Why do you want a default value of 1?