Многомерный массив или хэши в Perl. Элементы доступа

#arrays #json #perl #hash-of-hashes

#массивы #json #perl #хеширование хэшей

Вопрос:

Вопрос новичка.

У меня есть файл json, который выглядит следующим образом:

 {
    "Controllers":[
    {
            "Command Status" : {
                    "Controller" : 0,
                    "Status" : "Success",
                    "Description" : "None"
            },
            "Response Data" : {
                    "Product Name" : "LSI MegaRAID SAS 9260-8i",
                    "Serial Number" : "SV30408696",
                    "SAS Address" : " 500605b005c557f0",
                    "PCI Address" : "00:01:00:00",
                    "System Time" : "11/02/2020 01:15:01",
                    "Mfg. Date" : "01/23/13",
                    "Controller Time" : "11/02/2020 08:03:07",
                    "FW Package Build" : "12.15.0-0239",
                    "FW Version" : "2.130.403-4660",
                    "BIOS Version" : "3.30.02.2_4.16.08.00_0x06060A05",
                    "Driver Name" : "megaraid_sas",
                    "Driver Version" : "07.703.05.00-rc1",
                    "Vendor Id" : 4096,
                    "Device Id" : 121,
                    "SubVendor Id" : 4096,
                    "SubDevice Id" : 37473,
                    "Host Interface" : "PCI-E",
                    "Device Interface" : "SAS-6G",
                    "Bus Number" : 1,
                    "Device Number" : 0,
                    "Function Number" : 0,
                    "Drive Groups" : 6,
                    "TOPOLOGY" : [
                            {
                                    "DG" : 0,
                                    "Arr" : "-",
                                    "Row" : "-",
                                    "EID:Slot" : "-",
                                    "DID" : "-",
                                    "Type" : "RAID1",
                                    "State" : "Optl",
                                    "BT" : "N",
                                    "Size" : "465.25 GB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "N",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 0,
                                    "Arr" : 0,
                                    "Row" : "-",
                                    "EID:Slot" : "-",
                                    "DID" : "-",
                                    "Type" : "RAID1",
                                    "State" : "Optl",
                                    "BT" : "N",
                                    "Size" : "465.25 GB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "N",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 0,
                                    "Arr" : 0,
                                    "Row" : 0,
                                    "EID:Slot" : "252:1",
                                    "DID" : 8,
                                    "Type" : "DRIVE",
                                    "State" : "Onln",
                                    "BT" : "N",
                                    "Size" : "465.25 GB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "-",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 0,
                                    "Arr" : 0,
                                    "Row" : 1,
                                    "EID:Slot" : "252:0",
                                    "DID" : 9,
                                    "Type" : "DRIVE",
                                    "State" : "Onln",
                                    "BT" : "N",
                                    "Size" : "465.25 GB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "-",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 1,
                                    "Arr" : "-",
                                    "Row" : "-",
                                    "EID:Slot" : "-",
                                    "DID" : "-",
                                    "Type" : "RAID0",
                                    "State" : "Optl",
                                    "BT" : "N",
                                    "Size" : "3.637 TB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "N",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 1,
                                    "Arr" : 0,
                                    "Row" : "-",
                                    "EID:Slot" : "-",
                                    "DID" : "-",
                                    "Type" : "RAID0",
                                    "State" : "Optl",
                                    "BT" : "N",
                                    "Size" : "3.637 TB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "N",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 1,
                                    "Arr" : 0,
                                    "Row" : 0,
                                    "EID:Slot" : "252:2",
                                    "DID" : 10,
                                    "Type" : "DRIVE",
                                    "State" : "Onln",
                                    "BT" : "N",
                                    "Size" : "3.637 TB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "-",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 2,
                                    "Arr" : "-",
                                    "Row" : "-",
                                    "EID:Slot" : "-",
                                    "DID" : "-",
                                    "Type" : "RAID0",
                                    "State" : "Optl",
                                    "BT" : "N",
                                    "Size" : "3.637 TB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "N",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 2,
                                    "Arr" : 0,
                                    "Row" : "-",
                                    "EID:Slot" : "-",
                                    "DID" : "-",
                                    "Type" : "RAID0",
                                    "State" : "Optl",
                                    "BT" : "N",
                                    "Size" : "3.637 TB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "N",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 2,
                                    "Arr" : 0,
                                    "Row" : 0,
                                    "EID:Slot" : "252:3",
                                    "DID" : 11,
                                    "Type" : "DRIVE",
                                    "State" : "Onln",
                                    "BT" : "N",
                                    "Size" : "3.637 TB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "-",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 3,
                                    "Arr" : "-",
                                    "Row" : "-",
                                    "EID:Slot" : "-",
                                    "DID" : "-",
                                    "Type" : "RAID0",
                                    "State" : "Optl",
                                    "BT" : "N",
                                    "Size" : "3.637 TB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "N",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 3,
                                    "Arr" : 0,
                                    "Row" : "-",
                                    "EID:Slot" : "-",
                                    "DID" : "-",
                                    "Type" : "RAID0",
                                    "State" : "Optl",
                                    "BT" : "N",
                                    "Size" : "3.637 TB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "N",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 3,
                                    "Arr" : 0,
                                    "Row" : 0,
                                    "EID:Slot" : "252:4",
                                    "DID" : 13,
                                    "Type" : "DRIVE",
                                    "State" : "Onln",
                                    "BT" : "N",
                                    "Size" : "3.637 TB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "-",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 4,
                                    "Arr" : "-",
                                    "Row" : "-",
                                    "EID:Slot" : "-",
                                    "DID" : "-",
                                    "Type" : "RAID0",
                                    "State" : "Optl",
                                    "BT" : "N",
                                    "Size" : "3.637 TB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "N",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 4,
                                    "Arr" : 0,
                                    "Row" : "-",
                                    "EID:Slot" : "-",
                                    "DID" : "-",
                                    "Type" : "RAID0",
                                    "State" : "Optl",
                                    "BT" : "N",
                                    "Size" : "3.637 TB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "N",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 4,
                                    "Arr" : 0,
                                    "Row" : 0,
                                    "EID:Slot" : "252:5",
                                    "DID" : 14,
                                    "Type" : "DRIVE",
                                    "State" : "Onln",
                                    "BT" : "N",
                                    "Size" : "3.637 TB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "-",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 5,
                                    "Arr" : "-",
                                    "Row" : "-",
                                    "EID:Slot" : "-",
                                    "DID" : "-",
                                    "Type" : "RAID0",
                                    "State" : "Optl",
                                    "BT" : "N",
                                    "Size" : "3.637 TB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "N",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 5,
                                    "Arr" : 0,
                                    "Row" : "-",
                                    "EID:Slot" : "-",
                                    "DID" : "-",
                                    "Type" : "RAID0",
                                    "State" : "Optl",
                                    "BT" : "N",
                                    "Size" : "3.637 TB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "N",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 5,
                                    "Arr" : 0,
                                    "Row" : 0,
                                    "EID:Slot" : "252:6",
                                    "DID" : 15,
                                    "Type" : "DRIVE",
                                    "State" : "Onln",
                                    "BT" : "N",
                                    "Size" : "3.637 TB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "-",
                                    "TR" : "N"
                            }
                    ],
                    "Virtual Drives" : 6,
                    "VD LIST" : [
                            {
                                    "DG/VD" : "0/0",
                                    "TYPE" : "RAID1",
                                    "State" : "Optl",
                                    "Access" : "RW",
                                    "Consist" : "Yes",
                                    "Cache" : "RWTD",
                                    "Cac" : "-",
                                    "sCC" : "ON",
                                    "Size" : "465.25 GB",
                                    "Name" : ""
                            },
                            {
                                    "DG/VD" : "1/1",
                                    "TYPE" : "RAID0",
                                    "State" : "Optl",
                                    "Access" : "RW",
                                    "Consist" : "Yes",
                                    "Cache" : "RWTD",
                                    "Cac" : "-",
                                    "sCC" : "ON",
                                    "Size" : "3.637 TB",
                                    "Name" : ""
                            },
                            {
                                    "DG/VD" : "2/2",
                                    "TYPE" : "RAID0",
                                    "State" : "Optl",
                                    "Access" : "RW",
                                    "Consist" : "Yes",
                                    "Cache" : "RWTD",
                                    "Cac" : "-",
                                    "sCC" : "ON",
                                    "Size" : "3.637 TB",
                                    "Name" : ""
                            },
                            {
                                    "DG/VD" : "3/3",
                                    "TYPE" : "RAID0",
                                    "State" : "Optl",
                                    "Access" : "RW",
                                    "Consist" : "Yes",
                                    "Cache" : "RWTD",
                                    "Cac" : "-",
                                    "sCC" : "ON",
                                    "Size" : "3.637 TB",
                                    "Name" : ""
                            },
                            {
                                    "DG/VD" : "4/4",
                                    "TYPE" : "RAID0",
                                    "State" : "Optl",
                                    "Access" : "RW",
                                    "Consist" : "Yes",
                                    "Cache" : "RWTD",
                                    "Cac" : "-",
                                    "sCC" : "ON",
                                    "Size" : "3.637 TB",
                                    "Name" : ""
                            },
                            {
                                    "DG/VD" : "5/5",
                                    "TYPE" : "RAID0",
                                    "State" : "Optl",
                                    "Access" : "RW",
                                    "Consist" : "Yes",
                                    "Cache" : "RWTD",
                                    "Cac" : "-",
                                    "sCC" : "ON",
                                    "Size" : "3.637 TB",
                                    "Name" : ""
                            }
                    ],
                    "Physical Drives" : 7,
                    "PD LIST" : [
                            {
                                    "EID:Slt" : "252:0",
                                    "DID" : 9,
                                    "State" : "Onln",
                                    "DG" : 0,
                                    "Size" : "465.25 GB",
                                    "Intf" : "SATA",
                                    "Med" : "HDD",
                                    "SED" : "N",
                                    "PI" : "N",
                                    "SeSz" : "512B",
                                    "Model" : "ST500DM002-1BD142",
                                    "Sp" : "U",
                                    "Type" : "-"
                            },
                            {
                                    "EID:Slt" : "252:1",
                                    "DID" : 8,
                                    "State" : "Onln",
                                    "DG" : 0,
                                    "Size" : "465.25 GB",
                                    "Intf" : "SATA",
                                    "Med" : "HDD",
                                    "SED" : "N",
                                    "PI" : "N",
                                    "SeSz" : "512B",
                                    "Model" : "ST500DM002-1BD142",
                                    "Sp" : "U",
                                    "Type" : "-"
                            },
                            {
                                    "EID:Slt" : "252:2",
                                    "DID" : 10,
                                    "State" : "Onln",
                                    "DG" : 1,
                                    "Size" : "3.637 TB",
                                    "Intf" : "SATA",
                                    "Med" : "HDD",
                                    "SED" : "N",
                                    "PI" : "N",
                                    "SeSz" : "512B",
                                    "Model" : "ST4000NM0033-9ZM170",
                                    "Sp" : "U",
                                    "Type" : "-"
                            },
                            {
                                    "EID:Slt" : "252:3",
                                    "DID" : 11,
                                    "State" : "Onln",
                                    "DG" : 2,
                                    "Size" : "3.637 TB",
                                    "Intf" : "SATA",
                                    "Med" : "HDD",
                                    "SED" : "N",
                                    "PI" : "N",
                                    "SeSz" : "512B",
                                    "Model" : "ST4000NM0033-9ZM170",
                                    "Sp" : "U",
                                    "Type" : "-"
                            },
                            {
                                    "EID:Slt" : "252:4",
                                    "DID" : 13,
                                    "State" : "Onln",
                                    "DG" : 3,
                                    "Size" : "3.637 TB",
                                    "Intf" : "SATA",
                                    "Med" : "HDD",
                                    "SED" : "N",
                                    "PI" : "N",
                                    "SeSz" : "512B",
                                    "Model" : "ST4000NM0033-9ZM170",
                                    "Sp" : "U",
                                    "Type" : "-"
                            },
                            {
                                    "EID:Slt" : "252:5",
                                    "DID" : 14,
                                    "State" : "Onln",
                                    "DG" : 4,
                                    "Size" : "3.637 TB",
                                    "Intf" : "SATA",
                                    "Med" : "HDD",
                                    "SED" : "N",
                                    "PI" : "N",
                                    "SeSz" : "512B",
                                    "Model" : "ST4000NM0033-9ZM170",
                                    "Sp" : "U",
                                    "Type" : "-"
                            },
                            {
                                    "EID:Slt" : "252:6",
                                    "DID" : 15,
                                    "State" : "Onln",
                                    "DG" : 5,
                                    "Size" : "3.637 TB",
                                    "Intf" : "SATA",
                                    "Med" : "HDD",
                                    "SED" : "N",
                                    "PI" : "N",
                                    "SeSz" : "512B",
                                    "Model" : "ST4000NM0033-9ZM170",
                                    "Sp" : "U",
                                    "Type" : "-"
                            }
                    ]
            }
    }
    ]
    }
  

Это журнал тестирования RAID-контроллера. И задача звучит так: проверьте все виртуальные диски (их состояние) и каждый диск в каждом виртуальном диске и состояние дисков.

Теперь я даже не могу понять, как получить доступ к элементам верхнего уровня. Перепробовал множество вариантов, но совершенно не понимаю. Один из примеров кода:

 #!/usr/bin/perl
use strict;
use warnings;
use JSON::XS;
use File::Slurp;
use Data::Dumper;

my $json_source = "state.json";   

my $json = read_file( $json_source ) or die "Couldn't read the file";
my $json_array = decode_json $json or die "Couldn't recognize JSON";

foreach my $item( %$json_array{Controllers} ) { 
    print Dumper($item->{'Command status'});
}
  

Был бы очень признателен за помощь в понимании или примерах кода. Как я вижу, пробелы в именах ключей 2-го уровня json могут быть проблемой. И, кроме того, что полностью возвращает decode_json() — ссылка на что? К хэшу, к массиву, к массиву хэшей? Это не может быть так сложно — я видел пример python работы с этим же json — это выглядит очень просто (и это действительно так). Помогите, пожалуйста.

Комментарии:

1. Хорошим первым шагом было бы изменить имя переменной, содержащей hashref, с $json_array на что-то лучшее. И выгрузка всего, чтобы вы могли видеть его структуру.

2. Вы также захотите ознакомиться с keys и each . И прочитайте perldoc.perl.org/perldsc

Ответ №1:

Входные данные представляют сложную структуру. Нам нужно извлекать только интересующую информацию.

Этого можно достичь, используя массивы с интересующими полями. Поскольку данные помещаются в массив, мы должны перебирать массивы.

Пожалуйста, изучите следующий код с учетом соответствия вашей задаче.

 use strict;
use warnings;
use feature 'say';

use JSON;

my $data = do { local $/; <DATA> };
my $struct = from_json($data);

my @product  = ('Product Name','Serial Number','System Time','Controller Time',
                'Mfg. Date','FW Package Build','FW Version','BIOS Version',
                'Driver Name','Driver Version','Host Interface','Device Interface'
                );
my @status   = qw/Controller Status Description/;
my @v_fields = ('DG/VD','TYPE','State','Access','Size','Name');
my @p_fields = ('DG','DID','State','Med','Intf','Size','Model');

for my $c ( @{ $struct->{Controllers} } ) {
    say '--- Status '  . '-' x 45;
    printf "%-12s %sn", $_, $c->{'Command Status'}{$_} for @status;

    say '--- Product ' . '-' x 44;
    printf "%-18s %sn", $_, $c->{'Response Data'}{$_}  for @product;

    say '--- Virtual ' . '-' x 60;
    say join "t", @v_fields;
    for my $vd ( @{ $c->{'Response Data'}{'VD LIST'} } ) {
        say join "t", $vd->@{@v_fields};
    }

    say '--- Physical ' . '-' x 60;
    say join "t", @p_fields;
    for my $pd ( @{ $c->{'Response Data'}{'PD LIST'} } ) {
        say join "t", $pd->@{@p_fields};
    }
}
                           
__DATA__
{
    "Controllers":[
    {
            "Command Status" : {
                    "Controller" : 0,
                    "Status" : "Success",
                    "Description" : "None"
            },
            "Response Data" : {
                    "Product Name" : "LSI MegaRAID SAS 9260-8i",
                    "Serial Number" : "SV30408696",
                    "SAS Address" : " 500605b005c557f0",
                    "PCI Address" : "00:01:00:00",
                    "System Time" : "11/02/2020 01:15:01",
                    "Mfg. Date" : "01/23/13",
                    "Controller Time" : "11/02/2020 08:03:07",
                    "FW Package Build" : "12.15.0-0239",
                    "FW Version" : "2.130.403-4660",
                    "BIOS Version" : "3.30.02.2_4.16.08.00_0x06060A05",
                    "Driver Name" : "megaraid_sas",
                    "Driver Version" : "07.703.05.00-rc1",
                    "Vendor Id" : 4096,
                    "Device Id" : 121,
                    "SubVendor Id" : 4096,
                    "SubDevice Id" : 37473,
                    "Host Interface" : "PCI-E",
                    "Device Interface" : "SAS-6G",
                    "Bus Number" : 1,
                    "Device Number" : 0,
                    "Function Number" : 0,
                    "Drive Groups" : 6,
                    "TOPOLOGY" : [
                            {
                                    "DG" : 0,
                                    "Arr" : "-",
                                    "Row" : "-",
                                    "EID:Slot" : "-",
                                    "DID" : "-",
                                    "Type" : "RAID1",
                                    "State" : "Optl",
                                    "BT" : "N",
                                    "Size" : "465.25 GB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "N",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 0,
                                    "Arr" : 0,
                                    "Row" : "-",
                                    "EID:Slot" : "-",
                                    "DID" : "-",
                                    "Type" : "RAID1",
                                    "State" : "Optl",
                                    "BT" : "N",
                                    "Size" : "465.25 GB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "N",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 0,
                                    "Arr" : 0,
                                    "Row" : 0,
                                    "EID:Slot" : "252:1",
                                    "DID" : 8,
                                    "Type" : "DRIVE",
                                    "State" : "Onln",
                                    "BT" : "N",
                                    "Size" : "465.25 GB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "-",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 0,
                                    "Arr" : 0,
                                    "Row" : 1,
                                    "EID:Slot" : "252:0",
                                    "DID" : 9,
                                    "Type" : "DRIVE",
                                    "State" : "Onln",
                                    "BT" : "N",
                                    "Size" : "465.25 GB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "-",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 1,
                                    "Arr" : "-",
                                    "Row" : "-",
                                    "EID:Slot" : "-",
                                    "DID" : "-",
                                    "Type" : "RAID0",
                                    "State" : "Optl",
                                    "BT" : "N",
                                    "Size" : "3.637 TB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "N",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 1,
                                    "Arr" : 0,
                                    "Row" : "-",
                                    "EID:Slot" : "-",
                                    "DID" : "-",
                                    "Type" : "RAID0",
                                    "State" : "Optl",
                                    "BT" : "N",
                                    "Size" : "3.637 TB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "N",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 1,
                                    "Arr" : 0,
                                    "Row" : 0,
                                    "EID:Slot" : "252:2",
                                    "DID" : 10,
                                    "Type" : "DRIVE",
                                    "State" : "Onln",
                                    "BT" : "N",
                                    "Size" : "3.637 TB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "-",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 2,
                                    "Arr" : "-",
                                    "Row" : "-",
                                    "EID:Slot" : "-",
                                    "DID" : "-",
                                    "Type" : "RAID0",
                                    "State" : "Optl",
                                    "BT" : "N",
                                    "Size" : "3.637 TB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "N",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 2,
                                    "Arr" : 0,
                                    "Row" : "-",
                                    "EID:Slot" : "-",
                                    "DID" : "-",
                                    "Type" : "RAID0",
                                    "State" : "Optl",
                                    "BT" : "N",
                                    "Size" : "3.637 TB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "N",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 2,
                                    "Arr" : 0,
                                    "Row" : 0,
                                    "EID:Slot" : "252:3",
                                    "DID" : 11,
                                    "Type" : "DRIVE",
                                    "State" : "Onln",
                                    "BT" : "N",
                                    "Size" : "3.637 TB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "-",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 3,
                                    "Arr" : "-",
                                    "Row" : "-",
                                    "EID:Slot" : "-",
                                    "DID" : "-",
                                    "Type" : "RAID0",
                                    "State" : "Optl",
                                    "BT" : "N",
                                    "Size" : "3.637 TB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "N",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 3,
                                    "Arr" : 0,
                                    "Row" : "-",
                                    "EID:Slot" : "-",
                                    "DID" : "-",
                                    "Type" : "RAID0",
                                    "State" : "Optl",
                                    "BT" : "N",
                                    "Size" : "3.637 TB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "N",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 3,
                                    "Arr" : 0,
                                    "Row" : 0,
                                    "EID:Slot" : "252:4",
                                    "DID" : 13,
                                    "Type" : "DRIVE",
                                    "State" : "Onln",
                                    "BT" : "N",
                                    "Size" : "3.637 TB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "-",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 4,
                                    "Arr" : "-",
                                    "Row" : "-",
                                    "EID:Slot" : "-",
                                    "DID" : "-",
                                    "Type" : "RAID0",
                                    "State" : "Optl",
                                    "BT" : "N",
                                    "Size" : "3.637 TB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "N",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 4,
                                    "Arr" : 0,
                                    "Row" : "-",
                                    "EID:Slot" : "-",
                                    "DID" : "-",
                                    "Type" : "RAID0",
                                    "State" : "Optl",
                                    "BT" : "N",
                                    "Size" : "3.637 TB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "N",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 4,
                                    "Arr" : 0,
                                    "Row" : 0,
                                    "EID:Slot" : "252:5",
                                    "DID" : 14,
                                    "Type" : "DRIVE",
                                    "State" : "Onln",
                                    "BT" : "N",
                                    "Size" : "3.637 TB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "-",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 5,
                                    "Arr" : "-",
                                    "Row" : "-",
                                    "EID:Slot" : "-",
                                    "DID" : "-",
                                    "Type" : "RAID0",
                                    "State" : "Optl",
                                    "BT" : "N",
                                    "Size" : "3.637 TB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "N",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 5,
                                    "Arr" : 0,
                                    "Row" : "-",
                                    "EID:Slot" : "-",
                                    "DID" : "-",
                                    "Type" : "RAID0",
                                    "State" : "Optl",
                                    "BT" : "N",
                                    "Size" : "3.637 TB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "N",
                                    "TR" : "N"
                            },
                            {
                                    "DG" : 5,
                                    "Arr" : 0,
                                    "Row" : 0,
                                    "EID:Slot" : "252:6",
                                    "DID" : 15,
                                    "Type" : "DRIVE",
                                    "State" : "Onln",
                                    "BT" : "N",
                                    "Size" : "3.637 TB",
                                    "PDC" : "dflt",
                                    "PI" : "N",
                                    "SED" : "N",
                                    "DS3" : "none",
                                    "FSpace" : "-",
                                    "TR" : "N"
                            }
                    ],
                    "Virtual Drives" : 6,
                    "VD LIST" : [
                            {
                                    "DG/VD" : "0/0",
                                    "TYPE" : "RAID1",
                                    "State" : "Optl",
                                    "Access" : "RW",
                                    "Consist" : "Yes",
                                    "Cache" : "RWTD",
                                    "Cac" : "-",
                                    "sCC" : "ON",
                                    "Size" : "465.25 GB",
                                    "Name" : ""
                            },
                            {
                                    "DG/VD" : "1/1",
                                    "TYPE" : "RAID0",
                                    "State" : "Optl",
                                    "Access" : "RW",
                                    "Consist" : "Yes",
                                    "Cache" : "RWTD",
                                    "Cac" : "-",
                                    "sCC" : "ON",
                                    "Size" : "3.637 TB",
                                    "Name" : ""
                            },
                            {
                                    "DG/VD" : "2/2",
                                    "TYPE" : "RAID0",
                                    "State" : "Optl",
                                    "Access" : "RW",
                                    "Consist" : "Yes",
                                    "Cache" : "RWTD",
                                    "Cac" : "-",
                                    "sCC" : "ON",
                                    "Size" : "3.637 TB",
                                    "Name" : ""
                            },
                            {
                                    "DG/VD" : "3/3",
                                    "TYPE" : "RAID0",
                                    "State" : "Optl",
                                    "Access" : "RW",
                                    "Consist" : "Yes",
                                    "Cache" : "RWTD",
                                    "Cac" : "-",
                                    "sCC" : "ON",
                                    "Size" : "3.637 TB",
                                    "Name" : ""
                            },
                            {
                                    "DG/VD" : "4/4",
                                    "TYPE" : "RAID0",
                                    "State" : "Optl",
                                    "Access" : "RW",
                                    "Consist" : "Yes",
                                    "Cache" : "RWTD",
                                    "Cac" : "-",
                                    "sCC" : "ON",
                                    "Size" : "3.637 TB",
                                    "Name" : ""
                            },
                            {
                                    "DG/VD" : "5/5",
                                    "TYPE" : "RAID0",
                                    "State" : "Optl",
                                    "Access" : "RW",
                                    "Consist" : "Yes",
                                    "Cache" : "RWTD",
                                    "Cac" : "-",
                                    "sCC" : "ON",
                                    "Size" : "3.637 TB",
                                    "Name" : ""
                            }
                    ],
                    "Physical Drives" : 7,
                    "PD LIST" : [
                            {
                                    "EID:Slt" : "252:0",
                                    "DID" : 9,
                                    "State" : "Onln",
                                    "DG" : 0,
                                    "Size" : "465.25 GB",
                                    "Intf" : "SATA",
                                    "Med" : "HDD",
                                    "SED" : "N",
                                    "PI" : "N",
                                    "SeSz" : "512B",
                                    "Model" : "ST500DM002-1BD142",
                                    "Sp" : "U",
                                    "Type" : "-"
                            },
                            {
                                    "EID:Slt" : "252:1",
                                    "DID" : 8,
                                    "State" : "Onln",
                                    "DG" : 0,
                                    "Size" : "465.25 GB",
                                    "Intf" : "SATA",
                                    "Med" : "HDD",
                                    "SED" : "N",
                                    "PI" : "N",
                                    "SeSz" : "512B",
                                    "Model" : "ST500DM002-1BD142",
                                    "Sp" : "U",
                                    "Type" : "-"
                            },
                            {
                                    "EID:Slt" : "252:2",
                                    "DID" : 10,
                                    "State" : "Onln",
                                    "DG" : 1,
                                    "Size" : "3.637 TB",
                                    "Intf" : "SATA",
                                    "Med" : "HDD",
                                    "SED" : "N",
                                    "PI" : "N",
                                    "SeSz" : "512B",
                                    "Model" : "ST4000NM0033-9ZM170",
                                    "Sp" : "U",
                                    "Type" : "-"
                            },
                            {
                                    "EID:Slt" : "252:3",
                                    "DID" : 11,
                                    "State" : "Onln",
                                    "DG" : 2,
                                    "Size" : "3.637 TB",
                                    "Intf" : "SATA",
                                    "Med" : "HDD",
                                    "SED" : "N",
                                    "PI" : "N",
                                    "SeSz" : "512B",
                                    "Model" : "ST4000NM0033-9ZM170",
                                    "Sp" : "U",
                                    "Type" : "-"
                            },
                            {
                                    "EID:Slt" : "252:4",
                                    "DID" : 13,
                                    "State" : "Onln",
                                    "DG" : 3,
                                    "Size" : "3.637 TB",
                                    "Intf" : "SATA",
                                    "Med" : "HDD",
                                    "SED" : "N",
                                    "PI" : "N",
                                    "SeSz" : "512B",
                                    "Model" : "ST4000NM0033-9ZM170",
                                    "Sp" : "U",
                                    "Type" : "-"
                            },
                            {
                                    "EID:Slt" : "252:5",
                                    "DID" : 14,
                                    "State" : "Onln",
                                    "DG" : 4,
                                    "Size" : "3.637 TB",
                                    "Intf" : "SATA",
                                    "Med" : "HDD",
                                    "SED" : "N",
                                    "PI" : "N",
                                    "SeSz" : "512B",
                                    "Model" : "ST4000NM0033-9ZM170",
                                    "Sp" : "U",
                                    "Type" : "-"
                            },
                            {
                                    "EID:Slt" : "252:6",
                                    "DID" : 15,
                                    "State" : "Onln",
                                    "DG" : 5,
                                    "Size" : "3.637 TB",
                                    "Intf" : "SATA",
                                    "Med" : "HDD",
                                    "SED" : "N",
                                    "PI" : "N",
                                    "SeSz" : "512B",
                                    "Model" : "ST4000NM0033-9ZM170",
                                    "Sp" : "U",
                                    "Type" : "-"
                            }
                    ]
            }
    }
    ]
    }
  

Вывод

 --- Status ---------------------------------------------
Controller   0
Status       Success
Description  None
--- Product --------------------------------------------
Product Name       LSI MegaRAID SAS 9260-8i
Serial Number      SV30408696
System Time        11/02/2020 01:15:01
Controller Time    11/02/2020 08:03:07
Mfg. Date          01/23/13
FW Package Build   12.15.0-0239
FW Version         2.130.403-4660
BIOS Version       3.30.02.2_4.16.08.00_0x06060A05
Driver Name        megaraid_sas
Driver Version     07.703.05.00-rc1
Host Interface     PCI-E
Device Interface   SAS-6G
--- Virtual ------------------------------------------------------------
DG/VD   TYPE    State   Access  Size    Name
0/0     RAID1   Optl    RW      465.25 GB
1/1     RAID0   Optl    RW      3.637 TB
2/2     RAID0   Optl    RW      3.637 TB
3/3     RAID0   Optl    RW      3.637 TB
4/4     RAID0   Optl    RW      3.637 TB
5/5     RAID0   Optl    RW      3.637 TB
--- Physical ------------------------------------------------------------
DG      DID     State   Med     Intf    Size    Model
0       9       Onln    HDD     SATA    465.25 GB       ST500DM002-1BD142
0       8       Onln    HDD     SATA    465.25 GB       ST500DM002-1BD142
1       10      Onln    HDD     SATA    3.637 TB        ST4000NM0033-9ZM170
2       11      Onln    HDD     SATA    3.637 TB        ST4000NM0033-9ZM170
3       13      Onln    HDD     SATA    3.637 TB        ST4000NM0033-9ZM170
4       14      Onln    HDD     SATA    3.637 TB        ST4000NM0033-9ZM170
5       15      Onln    HDD     SATA    3.637 TB        ST4000NM0033-9ZM170
  

Комментарии:

1. Большое вам спасибо! Это работает! Я правильно понимаю? — from_json в этом случае возвращает ссылку на хэш массива хэшей (etc), говоря о контроллерах уровней[0]{‘Статус команды’}.

2. Фигурные скобки указывают на хэш , квадратные скобки указывают на массив . Посмотрите на входные данные JSON — вы получаете hashref на верхнем уровне в Controllers качестве ключа, затем Controllers ссылаетесь на массив хэшей. Если вы не уверены, что существует функция ref , которая может определить, с чем вы имеете дело на уровне программы.

3. Вы можете получить доступ к данным в следующей форме say $struct->{Controllers}[0]->{'Command Status'}{Status}; .