in reply to convert to XML

Try this?
#!/usr/bin/perl use strict; print qq{<?xml version="1.0"?>\n}; my $tag; while(<DATA>) { chomp; if ( /^\[(\w+)\]/ ... /^\w+/ ) { $tag = $1 if $1; print "<$tag>$_</$tag>\n" if ( ! /^\[/ ); } } __DATA__ [DATA] data1 [ENTRY] entrying here [STORY] story details

Replies are listed 'Best First'.
Re^2: convert to XML
by Anonymous Monk on Aug 13, 2009 at 04:55 UTC
    #!/usr/bin/perl use strict; print qq{<?xml version="1.0"?>\n}; my $tag; while(<DATA>) { chomp; if ( /^\[(\w+)\]/ ... /^\w+/ ) { $tag = $1 if $1; print "<$tag>$_</$tag>\n" if ( ! /^\[/ ); } } __DATA__ [DATA] data1 [ENTRY] entry here [STORY] story details [DATA] [ENTRY] another entry here [STORY] another story [KEY] [WRITER] Han Staff
    For the above code, the output is below
    <?xml version="1.0"?> <DATA>data1</DATA> <ENTRY>entry here</ENTRY> <STORY>story details</STORY> <DATA>another entry here</DATA> <STORY>another story</STORY> <KEY>Han</KEY>
    KEY WRITER Han Staff For KEY there is no string, for WRITER there is 2 lines. The value of WRITER is for KEY in the output. Please can you tell me how can I solve this
      The value of [WRITER] is for [KEY] in the output.

      The perlop says that the right operand is not evaluated while the operator is in the "false" state, and the left operand is not evaluated while the operator is in the "true" state. Meaning that once /^\[(\w+)\]/ is true, it's not evaluated anymore, so $1 is still KEY when print is performed.