1

いくつかの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;

どちらが機能しますか。これは、初期データセット(個別に行全体を構成するのではなく、私が気にかけているもの)からのいくつかのスライスと、2つの間の計算結果を追加することによって、ハッシュを構築します。終了行を1つの匿名hashrefコンストラクターにきれいに組み合わせる方法はありますか?それとも、このような結果のデータセットを構築することが、それを実行するための好ましい方法でしょうか?

4

1 に答える 1

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;
于 2012-09-25T17:04:08.383 に答える