#!/usr/bin/perl -- #~ 2011-09-29-02:50:12PDT by Anonymous Monk #~ perltidy -csc -otr -opr -ce -nibc -i=4 use strict; use warnings; use Data::Dumper(); Main( @ARGV ); exit( 0 ); sub Main { #~ http://perlmonks.com/?abspart=1;displaytype=displaycode;node_id=928496;part=1 my $raw = <<'__RAW__'; CORDR KZN MTC-N AINT 2011-09-29 09:00 DTL PM05 83.79 4 - - CORDR SGC MTC-N AINT 2011-09-29 09:00 JSA BR20 85.39 3 - - CORDR SGC MTC-N AINT 2011-09-29 09:00 JSA BR21 86.06 1 - - CORDR Unk MTC-N AINT 2011-09-29 09:00 JSA BR22 84.55 2 - - CORDR SGC MTC-N AINT 2011-09-29 09:00 JSA RN10 86.97 1 - - CORDR SGC MTC-N AINT 2011-09-29 09:00 JSA RS11 84.57 2 - - CORDR SGC MTC-N AINT 2011-09-29 09:00 JSA RS12 86.31 2 - - CORDR SGC MTC-N AINT 2011-09-29 09:00 JSA SD10 86.79 1 - - CORDR SGC MTC-N AINT 2011-09-29 09:00 JSA SN10 85.54 1 - - __RAW__ while( $raw =~ /^(.*)$/gm ){ my $line = $1; print DD( Gash( $line ) ); } } ## end sub Main sub DD { Data::Dumper->new([@_])->Useqq(1)->Dump; } BEGIN { my @fieldOrder = ( 'APP', 'REG', 'KPI', 'INTERFACE', 'DATE', 'TIME', 'NODE', 'RAN', 'SUCC_RATE' ); my %fieldWidths = ( APP => 'A5', DATE => 'A10', INTERFACE => 'A4', KPI => 'A5', NODE => 'A3', RAN => 'A4', REG => 'A3', SUCC_RATE => 'A5', TIME => 'A5' ); my $template = join ' x1 ', @fieldWidths{ @fieldOrder }; sub Gash { my %dat; @dat{ @fieldOrder } = unpack $template, $_[0]; return \%dat; } ## end sub Gash } ## end BEGIN