in reply to Re: reparse tree in textfile
in thread reparse tree in textfile
Why set the length of the array only to change it immediately? I also hate the needless use of global vars.
Alternative, we could use splice.my @path = '.'; while (<DATA>) { chomp; my ($prefix, $node) = /^((?:\| )*[|`]-- )(.+)/ or next; $#path = length($prefix)/2 - 1; $path[-1] = $node; print $prefix, join("/" => @path), "\n"; }
my @path = '.'; while (<DATA>) { chomp; my ($prefix, $node) = /^((?:\| )*[|`]-- )(.+)/ or next; splice @path, length($prefix)/2-1, 0+@path, $node; print $prefix, join("/" => @path), "\n"; }
It avoids the addition of magic to @path, and it combines two operations. The latter usually makes something more readable, but it's unfortunately not the case here.
Speaking of readability, that regex is rather hard to read. I had something like that initially, but I switched to split because it was much more straightforward.
my @path = '.'; while (<DATA>) { chomp; my ($prefix, $node) = split(/(?<=-- )/, $_, 2) or next; $#path = length($prefix)/2 - 1; $path[-1] = $node; print $prefix, join("/" => @path), "\n"; }
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^3: reparse tree in textfile
by repellent (Priest) on Feb 20, 2010 at 07:02 UTC | |
by ikegami (Patriarch) on Feb 20, 2010 at 07:12 UTC |
In Section
Seekers of Perl Wisdom