как создать ссылку на значение элемента subha sh в Perl? - PullRequest
1 голос
/ 24 февраля 2020

Я хотел бы использовать ссылку, чтобы сделать код короче
Я упрощаю, здесь только один уровень глубины:

my %cx = ( 'a' => ( "A" => 7, "B" => 8), 'b' => ( "Z" => 20 ));
# I want a ref to the B's value for testing, with a possible increment action :
my $ref = \$cx{a}{B}; # so I just put a \ before
if ($$ref and $$ref < 10) { $$ref ++; } # will give $cx{a}{B} = 9
# I have the same need for inner references, for example :
my $ref = \$stock{$stockName}->{places}->{$otherHashRef->{andItsKey}}

Но это не работает

1 Ответ

3 голосов
/ 24 февраля 2020

Парены ничего не создают; они просто меняют приоритет. Итак,

my %cx = ( 'a' => ( "A" => 7, "B" => 8), 'b' => ( "Z" => 20 ));

- это просто странный способ записи

my %cx = ( 'a' => "A", 7 => "B", 8 => 'b', "Z" => 20 );

Curlies создают ха sh и возвращают ссылку на га sh, так что вы хотите

my %cx = ( 'a' => { "A" => 7, "B" => 8 }, 'b' => { "Z" => 20 });

Например,

$ perl -MData::Dumper -e'
   {
      my %cx = ( 'a' => { "A" => 7, "B" => 8 }, 'b' => { "Z" => 20 });
      my $ref = \$cx{a}{B};
      ++$$ref;
      print(Dumper(\%cx));
   }

   {
      my %stock;
      my $stockName = "abc";
      my $otherHashRef = { andItsKey => 'def' };
      my $ref = \$stock{$stockName}->{places}->{$otherHashRef->{andItsKey}};
      ++$$ref;
      print(Dumper(\%stock));
   }
'
$VAR1 = {
          'a' => {
                   'A' => 7,
                   'B' => 9
                 },
          'b' => {
                   'Z' => 20
                 }
        };
$VAR1 = {
          'abc' => {
                  'places' => {
                                'def' => 1
                              }
                }
        };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...