У меня возникают проблемы при попытке напечатать этот хэш с помощью Perl - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь решить проблему, в которой я создал хэш, используя

push @{ $test{$onecell2}{$onecell3}{$onecell4} }, $onecell1;

. Причина использования этого заключается в том, что первые 3 повторяются с несколькими значениями, которые являются Oncell1.

Я не могу напечатать хэш, потому что на четвертом уровне я получаю эту ошибку: Nòt a HASH reference

Было бы здорово, если бы кто-то мог помочь.Спасибо

my %test;  

push @{ $test{$onecell2}{$onecell3}{$onecell4} }, $onecell1;

foreach my $name (sort keys %test) {
    foreach my $subject (keys %{ $test{$name} }) {
     foreach my $storage (keys %{ $test{$name}{$subject} }) {
      foreach my $size (keys %{ $test{$name}{$subject}{$storage} }) {
        print "$name: $subject: $storage: $size \n";
     }  
    }
   }
}

И ошибка: Not a HASH reference

Это хеш-структура

$VAR1 = {
      'A1RE' => {
           'Recombinant Human' => {                                       
               "Lyophilized protein " => [
                   '10 ug',                                                                                                                                                                                                                                                                                                                                  
                   '50 ug',                                                                                                                                                                                                                                                                                                                                
                   '500 ug',                                                                                                                                                                                                                                                                                                                                 
                   '1 mg'                                                                                                                                                                                                                                                                              
               ]                                                               
           }
      };

Я ожидаю, что результат будет:

 AIRE: Recombinant Human: Lyophilized protein: 10 ug,50 ug, 500 ug, 1mg.

1 Ответ

0 голосов
/ 11 февраля 2019

Поскольку ваш последний уровень - это ссылка на массив, а не хеш.Вам необходимо использовать разыменование массива @{ ... } для ссылки на массив:

#!/usr/bin/perl
use strict;
use warnings;

my %test = (
    'A1RE' => {
        'Recombinant Human' => {
            "Lyophilized protein " => [
                '10 ug',
                '50 ug',
                '500 ug',
                '1 mg',
            ],
        },
    },
);

foreach my $name (sort keys %test) {
    my $subjects = $test{$name};
    foreach my $subject (keys %{ $subjects }) {
        my $storages = $subjects->{$subject};
        foreach my $storage (keys %{ $storages }) {
            my $sizes = $storages->{$storage};
            print "$name: $subject: $storage: ", join(", ", @{ $sizes }), "\n";
        }
    }
}

exit 0;

Вывод:

$ perl dummy.pl 
A1RE: Recombinant Human: Lyophilized protein : 10 ug, 50 ug, 500 ug, 1 mg
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...