Получить значения из сложных хеш-структур Perl - PullRequest
0 голосов
/ 24 октября 2018

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

use Data::Dumper;
my $fdx = $s->field();   # get Hashreference from Database
print Dumper($fdx);      # print out Hash

(Важная часть) Вывод выглядит следующим образом:

$VAR1 = bless( {
     'selectable' => 'true',
     '_PARENT_OBJECT' => bless( {
           'dirtyFlag' => 1,
           'path' => undef,
           'testItems' => [],
           'data' => {
                'TEST_10' => {
                     'atm_rundatahistory' => {
                           '1523964918' => {
                                'atm_prid' => {
                                      'content' => '',
                                      'label' => 'Problem Report IDs',
                                      'raw' => ''
                                 }, ...
                            '1523964410' => {
                                 'atm_prid' => {
                                       'label' => 'Problem Report IDs',
                                       'raw' => '23361234',
                                       'content' => '23361234'
                                  }, ...

'Test_10' является одним из сотен тестов, '1523964918' является одной из многих временных меток Unix, поэтому в основном это 32-разрядное целое число, но я не знаю, какие числавременные метки содержат.

Как распечатать / получить доступ к значениям 'content' (в данном случае '23361234') самых внутренних Хэшей, для всех тестов и Unixметки времени, если они существуют?


С этого момента я буду описывать мои мысли и то, что я пробовал, нет необходимости читать дальше для этого вопроса.

Я думаю, что код, который я ищу, выглядит примерно так:

foreach my $val($fdx{_PARENT_OBJECT}{data}{"TEST_*"}{atm_rundatahistory}{"********"}{atm_prid}{content}) 
    print("\n$val");

Однако я не знаю точного синтаксиса и не знаю, какие заполнители установить для "Test_10",так как существует множество тестовых чисел, например, "...Test_132...Test_134" и метки времени Unix могут быть любыми 32-битнымиЦелое число, так что я думаю, что я могу использовать начало как заполнитель?например, "********".

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

Я уже прочитал perldoc_perlreftut .Если есть какой-либо другой легкий для понимания учебник для такого рода проблем, пожалуйста, порекомендуйте их мне.Я действительно не знаю, как я могу научиться обрабатывать такие сложные структуры данных в Perl.

...