LINUX.ORG.RU

$ perl -e 'use Data::Dumper; $a = {a=>1,b=>2}; $b = {c=>3,d=>4}; $c = {(%$a, %$b)}; print Dumper { c => $c };'
$VAR1 = {
          'c' => {
                   'c' => 3,
                   'a' => 1,
                   'b' => 2,
                   'd' => 4
                 }
        };
bvn13 ★★★★★
()
Ответ на: комментарий от DRVTiny
$ perl -e 'use Data::Dumper; $a = {a=>1,b=>2}; $b = {c=>3,d=>4}; $a = {(%$a, %$b)}; print Dumper { a => $a };'
$VAR1 = {
          'a' => {
                   'c' => 3,
                   'a' => 1,
                   'b' => 2,
                   'd' => 4
                 }
        };
bvn13 ★★★★★
()
Ответ на: комментарий от bvn13

А чем это лучше моего варианта:

perl -e '$h1={a=>1,b=>2}; $h2={c=>3,d=>4}; $h1={%$h1,%$h2}; print join("\n", map { $_."=>".$h1->{$_} } sort keys %$h1)'
Изначально я использовал конструкцию %{$ref}, но с таким же успехом можно использовать ИМХО ещё менее читабельную конструкцию %$ref - ситуацию-то это не меняет. Хотелось бы просто впихнуть дополнительные ключи в хеш, по аналогии с push @list, (1,2,3,4);

DRVTiny ★★★★★
() автор топика
sub hash_merge{
        map {ref $_ eq 'HASH' or return warn "This is not hashref!"} @_;
        my ($h1,$h2)=@_;
        local %_=%{$h1};
        @_{keys %$h2} = values %$h2;
        #say Dumper \%_;
        while(my($k,$v)=each %$h1){
                if(ref $v eq 'HASH'){
                        $_{$k}=&hash_merge($v,$h2->{$k}) if exists $h2->{$k};
                }
        }
        return \%_;
}
disarmer ★★★
()
Последнее исправление: disarmer (всего исправлений: 1)
Ответ на: комментарий от DRVTiny

по сути, это то же самое. Просто, чем дольше программируешь на перл, тем больше постигаешь его Дзен. И тем меньше хочется пользоваться всякими конструкциями, начинаешь пользоваться синтаксисом перла.

bvn13 ★★★★★
()
Ответ на: комментарий от Olegymous

Мне тоже понравилось решение с использованием среза хеша от joy4eg, меняю статус тикета на resolved :)

DRVTiny ★★★★★
() автор топика
Ответ на: комментарий от chg

Я вообще пишу вот так:

@{$h1}{keys %{$h2}} = values %{$h2}

DRVTiny ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.