#!/usr/bin/perl use warnings; use strict; use XML::Writer; my @array = split /\n/, << '__CSV__'; name subname start size CAL_M reserved 0 13 CAL_M o_check_out 13 7 CAL_M o_ttr_first 20 4 CAL_M o_cal_check_1 24 4 PSQN_0 reserved 0 8 PSQN_0 check_final 8 10 PSQN_0 o_check 18 10 __CSV__ my $writer = 'XML::Writer'->new( DATA_MODE => 1, DATA_INDENT => 2); $writer->startTag('root'); my $prev_name = q(); for my $item(@array) { chomp $item; if (my ($name, $sname, $start, $size) = $item =~/(\w+)\s+(\w+)\s+(\d+)\s+(\d+)/) { if ($prev_name ne $name) { if ($prev_name) { $writer->endTag('structure'); } $writer->startTag('structure', name => $name); } $writer->startTag('value', type => $size, name => $sname, start => $start, ); $writer->endTag('value'); $prev_name = $name; } } $writer->endTag($_) for qw( structure root ); $writer->end; #### ($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,