Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re^3: creating the hierarchy pattern from the input file

by tybalt89 (Monsignor)
on Sep 16, 2021 at 15:24 UTC ( [id://11136831]=note: print w/replies, xml ) Need Help??


in reply to Re^2: creating the hierarchy pattern from the input file
in thread creating the hierarchy pattern from the input file

Here's an updated version using ideas stolen borrowed from LanX.

It sounds like the provided input might be a section of a larger file. If so, you could either pass in the section as a string and use the reference open as shown, or pass in the file handle ($fh) and also specify some input line that will cause a return to caller.

#!/usr/bin/perl use strict; # https://perlmonks.org/?node_id=11136806 use warnings; my $inplacefile = <<'END'; 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 END my $filename = \$inplacefile; # FIXME change to filename with no refer +ence open my $fh, '<', $filename or die $!; # FIXME improve error message my $hash = {}; while( <$fh> ) { my $ref = $hash; $ref = $ref->{$_} //= {} for split /\@|\n/; } #use Data::Dump 'dd'; dd $hash; sub nest { my $h = shift; join '', map { %{$h->{$_}} ? "$_ {\n" . nest( $h->{$_} ) =~ s/^/\t/gmr . "}\n" : +"$_\n"; } sort keys %$h; } print nest($hash) =~ s/\w\K\n\s*(?=\w+$)/,/gmr;

Same output as before.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11136831]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (4)
As of 2024-03-29 00:13 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found