Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

#!/usr/bin/perl use strict; use warnings; my $tag; my $output; my $fh; while (<DATA>) { chomp; if(/^\.\.(.*):$/) # match line { $fh = sub_output($output, $tag, $fh); $output = ""; $tag = $1; print $tag; } else { # not a {TAG} line next unless($tag); next if(/^\s*$/); $output .= ($output) ? " $_" : "<$tag>$_"; } } # End of While Loop $fh = sub_output($output, $tag, $fh); if($fh) { print $fh "</root>\n"; close($fh); } exit(0); # Subroutine to open the file with the filename as DN sub sub_output { my ($output, $tag, $fh) = @_; if($output) { if($output =~ m/<DN>(.*)/) { if($fh) { print $fh "</root>\n"; close($fh); } open($fh, '>', "$1.xml") or die "$1.xml: $!"; print $fh "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; } print $fh "$output</$tag>\n"; } return($fh); } # End of sub sroutine __DATA__ ..DN: 000044119 ..CB: ..SN: 8046ETK6 ..PD: 20091030 ..DD: Friday, October 30, 2009 ..IS: N ..IS: R ..ID: ..DN: 000044120 ..CB: ..SN: 8046ETK6 ..PD: 20091030 ..DD: Friday, October 30, 2009 ..DD: Friday, October 31, 2009 ..PT: NE ..PT: sect
The above code converts the input as XML files.
How to rename the tags as
DN as "doc num".
SN as "code"
PD as "date".
and so on.
If there are two similar tags one below the other
for example:
PT and if it's value is 2 letters then I should name as "categ" and if the value is more than 2 then name as "Head".
Please tell me how to do it

Replies are listed 'Best First'.
Re: Assign name
by Anonymous Monk on Nov 04, 2009 at 11:48 UTC
      DN as "doc num". SN as "code" PD as "date". and so on.
      How to take all the into a hash and if the two tags exists how to take the count and rename with different name