Just for fun:
use strict; # https://perlmonks.org/?node_
+id=11136806
use warnings; # creating the hierarchy patte
+rn from the input file
use Data::Dump qw/pp dd/;
my $tree ={};
while ( my $line =<DATA> ) {
chomp $line;
my @keys = split /@/, $line;
my $ref = $tree;
$ref = ( $ref->{$_} //= {} ) # descend into hashrefs, init
+explicitly when missing
for @keys
}
my $out = pp $tree; # now "d1 => { d1 => {} }," et
+c
# purge
$out =~ s/\Q => {}//g; # ... empty hashes
$out =~ s/\Q => / /g; # ... fat arrows
$out =~ s/\Q},/}/g; # ... trailing commas
print $out;
__DATA__
instreg@d1@d1
instreg@d1@d2
instreg@d2@d1
instreg@d3@d1
instreg@d4@d1
instreg@d5@d1
instreg@d6@d1
instreg@d7@d1
instreg@d8@d1
alureg@d1@d1
alureg@d2@d1
alureg@d3@d1
alureg@d4@d1
alureg@d5@d1
alureg@d6@d1
alureg@d7@d1
alureg@d8@d1
pgmctr@d1@d1
pgmctr@d2@d1
pgmctr@d3@d1
pgmctr@d4@d1
pgmctr@d5@d1
pgmctr@m1
pgmctr@m2
pgmctr@m3
pgmctr@m4
pgmctr@m5
OUTPUT:
-*- mode: compilation; default-directory: "d:/tmp/pm/" -*-
Compilation started at Thu Sep 16 13:39:54
C:/Strawberry/perl/bin\perl.exe -w d:/tmp/pm/text_to_tree.pl
{
alureg {
d1 { d1 }
d2 { d1 }
d3 { d1 }
d4 { d1 }
d5 { d1 }
d6 { d1 }
d7 { d1 }
d8 { d1 }
}
instreg {
d1 { d1, d2 }
d2 { d1 }
d3 { d1 }
d4 { d1 }
d5 { d1 }
d6 { d1 }
d7 { d1 }
d8 { d1 }
}
pgmctr {
d1 { d1 }
d2 { d1 }
d3 { d1 }
d4 { d1 }
d5 { d1 }
m1,
m2,
m3,
m4,
m5,
}
}
Compilation finished at Thu Sep 16 13:39:55
alternatively
use Data::Dumper (which is core) and change the settings for => ("Pair") and so on.
See https://metacpan.org/pod/Data%3A%3ADumper#Configuration-Variables-or-Methods
update
added more comments to code