Ха sh га sh теряется, когда оно выходит из подпрограммы - PullRequest
0 голосов
/ 06 апреля 2020

У меня проблема с га sh га sh. Я хочу создать ха sh га sh из foreach l oop. Я надеюсь, что смогу использовать значения ha sh of ha sh вне foreach l oop. Тем не менее, кажется, что ha sh of ha sh выглядит хорошо внутри foreach l oop, но не снаружи. Мои коды такие, как показано ниже.

my(%pother,%pget);

foreach $stn (@stns){
       if (($stn eq 'A')||($stn eq 'B')) {
              &getSomething($stn,\%pother);  #getSomething is a subroutine and it outputs a hash
       }

       $pget{$stn} = \%pother;  # I would like to create a hash of hash

       print map { "$_ => $pget{$stn}{$_}\n" } keys %{$pget{$stn}};  # My 1st print result, which looks good
}

print map { "$_ => $pget{'A'}{$_}\n" } keys %{$pget{'A'}}; # My 2nd print result, which is same as my 3rd one 

print map { "$_ => $pget{'B'}{$_}\n" } keys %{$pget{'B'}}; # My 3rd print result, which is same as my 2nd one

Ха sh% pother что-то вроде этого. Вывод% pother будет меняться в зависимости от $ stn

%pother = (
    '20200406' => 82,
    '20200405' => 99,
);

Я хочу создать га sh га sh, например:

$pget = {
          'A' => {
                          '20200406' => 82,
                          '20200405' => 99,
                        },
          'B' => {
                         '20200406' => 97,
                         '20200405' => 67,
                       }
        };

Однако, что Я получил, как показано ниже:

$pget = {
          'A' => {
                          '20200406' => 97,
                          '20200405' => 67,
                        },
          'B' => {
                         '20200406' => 97,
                         '20200405' => 67,
                       }
        };

Я не знаю, почему «А» и «В» стали такими же, когда ха sh га sh находится за пределами foreach l oop.

Спасибо!

1 Ответ

4 голосов
/ 06 апреля 2020

У вас фактически есть следующее:

my %pother;  # Create a hash.
# ...
$pget{A} = \%pother;
# ...
$pget{B} = \%pother;
# ...

Так почему вы ожидаете, что $pget{A} и $pget{B} будут разными?

Переместите my %pother; в l oop создать новый ха sh каждый л oop проход.

...