In item 116 of the book "Effective Perl", author demonstrates how to use unpack to process fix-width columnar data. I tried to write a toy code for practice, and found two things need to note.
First thing, MUST use single quote ' before and after the format string, or you'll get unexpected result, because @xx can be parsed as an array in Perl if enclosed within double quote.
Second thing, format @xxx makes unpack move to specified position, NOTICE here unpack will work from position xxx+1, not position xxx.
Code is as below.
my $format = 'A2 @4 A10 @16 A6 @24 A*' ;
my $string = <<'COLUMMNAR';ID First Name Middle Last Name1 brian d foy2 Joshua McAdams3 Joseph N HallCOLUMMNAR
open my ( $fh ), '<' , \ $string ;my @headers = unpack $format , <$fh> ;my @names ;while ( <$fh> ) {my %hash ;@hash { @headers } = unpack $format , $_ ;push @names , \ %hash ;}
use Data::Dumper:: Names ;print Dumper ( \ @names );
-
Update: I should say above format of unpack in Perl is very similar with REXX. Moreover, REXX is older than Perl, so MAYBE Perl community learned the pattern from REXX.