In item 116 of the book "valid 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 );