2017-08-03 174 views
0

我有2個變量在表單提交時返回。我需要將這些值合併到1個可用於稍後創建SQL的變量中。
我怎樣才能得到的結果是所有的值工會: 即location_setting =「409」,「405」和狀態=「501」,「137」,「124」將2個數組/哈希合併爲1個變量Perl

這裏是我當前的代碼,但是從H2

use Data::Dumper; 

my $h1 = { 'location_setting' => [ '409' ], 'status' => [ '501' ] }; 

my $h2 = { 'status' => [ '137', '124' ], 'location_setting' => ['405'], 'classification' => ['0']}; 

my $x = {%$h1, %$h2}; 

print Dumper $x; 
+0

聯盟即使創建重複值? – ysth

+0

我認爲理想情況下不重複,在(501,501)中的SQL創建狀態無關緊要,將列出相同的結果 – Kris1511

回答

2
use List::Util qw(uniq); 

my %h = 
    map { 
     $_ => [ 
     uniq 
      $h1->{$_} ? @{ $h1->{$_} } :(), 
      $h2->{$_} ? @{ $h2->{$_} } :(), 
     ] 
    } 
     uniq 
     keys(%$h1), keys(%$h2); 

如果你有很多哈希散列或一個可變數量的呼嚕只值,

use List::Util qw(uniq); 

my @hashes = ($h1, $h2, ...); 

my %h = 
    map { 
     my $key = $_; 
     $key => [ uniq map @$_, grep $_, map $_->{$key}, @hashes ] 
    } 
     uniq map keys(%$_), @hashes; 
1
use Data::Dumper; 
use List::Util qw(uniq); 

my $h1 = { 'location_setting' => [ '409' ], 'status' => [ '501' ] }; 

my $h2 = { 'status' => [ '137', '124' ], 'location_setting' => [], 'classification' => ['0']}; 

my %x; 
foreach my $h1key (keys %{$h1}) { 
    push @{$x{$h1key}}, @{${$h1}{$h1key}}; 
} 

foreach my $h2key (keys %{$h2}) { 
    push @{$x{$h2key}}, @{${$h2}{$h2key}}; 
} 

@$_ = uniq @$_ 
    for values(%x); 

my $x = \%x; 
print Dumper $x; 
+1

爲什麼如果你對外部庫(愚蠢)使用Data :: Dumper? – ikegami

+1

本來很高興將你複製的[人](http://www.perlmonks.org/?node_id=1196683)。 – ikegami

+0

還在學習perl,sr的人不想導入任何庫...不是我的電話 – Kris1511