Well, here's a best guess...
#!/usr/bin/perl use strict; # https://perlmonks.org/?node_id=11136806 use warnings; my %hash; while( <DATA> ) { chomp; my $code = s/\@/}{/gr; eval "\$hash{$code}++"; } #use Data::Dump 'dd'; dd \%hash; sub nest { my $h = shift; my $answer = ''; if( ref $h ) { for my $k ( sort keys %$h ) { $answer .= ref( $h->{$k} ) ? "$k {\n" . nest( $h->{$k} ) =~ s/^/\t/gmr . "}\n" : $k . "\n"; } } $answer; } local $_ = nest \%hash; s/\w\K\n\s*(?=\w)/,/g; print; __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
Outputs:
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 }
If this is not what you are looking for, please show the exact output you want, especially for pgmctr,
which as LanX has pointed out, has an array/hash conflict.
P.S. This is also sure to upset the 'eval' haters :)
In reply to Re: creating the hierarchy pattern from the input file
by tybalt89
in thread creating the hierarchy pattern from the input file
by pruthvik
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |