您的位置:首页 > 其它

Two things need to note for unpack in Perl

2012-10-28 09:47 405 查看
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 );

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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: