Передача хеш-ссылки на несколько функций в Perl - PullRequest
0 голосов
/ 01 июня 2011

У меня есть следующий код в Perl, где ссылка на хеш передается из основной функции в func1, а затем в func2. В func2 хэш обновлен. Я хочу получить доступ к обновленному хешу в основной функции. Также есть функция while в основной функции, и я ожидаю, что хэш должен обновляться во время каждой итерации. Код может не выглядеть логичным, но я только что написал скелет кода. Я всегда получаю пустой хэш, когда пытаюсь напечатать хэш в основной функции

sub main {
      my %hash1;
      while (some condition)
      {
        my $i=0;
        if($i==0)
        { 
          func1($i,\%hash1);                      
          $i=1;
        }
        else
        {  
          func1($i,\%hash1);                      
          $i=0;
        }
      }
      foreach my $a (keys %hash1)
      {
        print "$hash1{$a}";
      }       
}
sub func1
{    
my ($i,$hash1)=@_;
----
if($i==0)
{ 
   func2($hash1);       
}

}

sub func2
{
my ($hash2)=@_;
$hash2->{key1}=1;
$hash2->{key2}=2;
}

1 Ответ

1 голос
/ 02 июня 2011

Ах, понятно.Вы думаете , что ничего не печатается из-за пустого хэша.Но действительно ничего не печатает, потому что вы ничего не даете для запуска .Вы даете все это для compile , но ничего для run .

sub main ничего не значит в Perl.Чтобы запустить это, вы должны поместить куда-нибудь на свою основную линию main(); Затем при условии, что вы закомментируете --- в строке 25, вы получите ожидаемый результат.

Вот почему распечатка материала самостоятельно 1) немного больше печатает или 2) ненадежна.Вы ничего не видели и думали, что наш хэш был пуст.На самом деле, код даже не попал в объявление.Итак, вот подсказка в командной строке:

 cpan Smart::Comments

А затем в вашем коде:

use Smart::Comments;
...

### %hash1

Таким образом, пустой хеш выглядит так:

### %hash1: {}

И тот, который вы ожидаете, выглядит следующим образом:

### %hash1: {
###           key1 => 1,
###           key2 => 2
###         }

Без вызова сабвуфера main ваш вывод выглядит так:

(да, оно пустое)

В противном случае, нет ничего плохого в том, что ваша передает хеш.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...