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 Name 1 brian d foy 2 Joshua McAdams 3 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 );