in reply to Re: convert to XML
in thread convert to XML

#!/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

Replies are listed 'Best First'.
Re^3: convert to XML
by alexm (Chaplain) on Aug 13, 2009 at 15:35 UTC
    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.