use XML::Simple; use Parse::FixedLength; my $x = XMLin(< fld1 10 fld2 20 fld3 30 XMLEND my $fmt = [ map { "$_->{fname}:$_->{length}" } @{$x->{field}} ]; my $p = Parse::FixedLength->new($fmt);