有没有办法从切片列表中构建匿名hashref?

时间:2012-09-25 16:21:37

标签: perl

当组合来自几个arrayref的特定数据时,我按照以下代码映射了转换:

my @output_data = map {
  my $ss = $everything->{$_->{username}};
  my $distance = $gis->distance ( $_->{lat}, $_->{long} => $ss->{Latitude}, $ss->{Longitude} );
  my %data;
  @data{qw/username addr1 addr2 city state zip rec_lat rec_long/} = @{$_}{qw/username addr1 addr2 city state zip lat long/};
  @data{qw/ss_lat ss_long/} = @{$ss}{qw/Latitude Longitude/};
  $data{difference} = sprintf("%.3f", $distance->miles);
  \%data;
} @$source;

哪个有效。它通过从初始数据集中添加几个切片(它们分别不包括整个行,我正在关注的内容)以及两者之间的计算结果来构建哈希。有没有办法可以将结束行干净地组合成一个匿名的hashref构造函数?或者像这样构建结果数据集是首选的方法吗?

1 个答案:

答案 0 :(得分:1)

您需要pairwise之类的内容。

use List::MoreUtils qw( pairwise );

my @output_data =
   map +{
      ( pairwise { $a => $_->{$b} }
         @{[qw( username addr1 addr2 city state zip rec_lat rec_long )]},
         @{[qw( username addr1 addr2 city state zip lat     long     )]},
      ),
      ( pairwise { $a => $ss->{$b} }
         @{[qw( ss_lat   ss_long   )]},
         @{[qw( Latitude Longitude )]},
      ),
   },
      @$source;