Just to make a minor point (plus get my first post in for 2003! ;)), the original poster's data has semicolons as the separating character instead of the default comma, which can easily be specified in Text::CSV_XS's sep_char attribute in the new() method. Hope I'm not doing anyone's homework:
#!/usr/bin/perl -w use strict; use Text::CSV_XS; my ( $csv, $xml ); $csv = Text::CSV_XS->new( { 'sep_char' => ';' } ); $xml = ''; while( <DATA> ) { chomp; if ( $csv->parse( $_ ) ) { my ( $line, $n, @fields, $field ); $line = '<row>'; $n = 1; @fields = $csv->fields(); foreach $field ( @fields ) { $line .= "<col$n>$field</col$n>"; $n++; } $xml .= $line . "</row>\n"; } else { print "parse() failed on this line: " . $csv->error_input() . +"\n"; # die? } } print $xml; __DATA__ a;b;c;d;e f;g;h;i j;k l m;n;o
Output:
$ ./main.pl
<row><col1>a</col1><col2>b</col2><col3>c</col3><col4>d</col4><col5>e</col5></row>
<row><col1>f</col1><col2>g</col2><col3>h</col3><col4>i</col4></row>
<row><col1>j</col1><col2>k</col2></row>
<row><col1>l</col1></row>
<row><col1>m</col1><col2>n</col2><col3>o</col3></row>
There's probably an XML package out there should your required output become more complex or you want to guarantee that you are using a standardized and optimized solution.

Peace,

Purdy


In reply to Minor addition by Purdy
in thread newbie regex question: substituting repeating occurences for different replacements by RuyLopez

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.