#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my $file = "contents of my file";
my @row = qw(some random data);
my @cell = qw(key value);
my %data = ();
$data{file} = $file;
$data{concept} = $#row;
$data{line1} {$cell[0]} = $cell[1];
print Dumper \%data;
Выход:
$VAR1 = {
'file' => 'contents of my file',
'line1' => {
'key' => 'value'
},
'concept' => '2'
};
Я думаю, $data{line1} {$cell[0]}
лучше записать как $data{line1}{$cell[0]}
или (мое предпочтение) $data{line1}->{$cell[0]}
.
Я включил скаляр $file
и массивы @row
и @cell
, чтобы продемонстрировать, что означает ваш код.
$data{file} = $file;
добавляет содержимое $file
в ваш хэш с ключом file
.
$data{concept} = $#row;
добавляет последний индекс @row
к вашему хешу с ключом concept
. В моем примере последний индекс равен 2
, поскольку индексы в @row
равны 0
, 1
и 2
.
$data{line1} {$cell[0]} = $cell[1];
добавляет хэш-ссылку к вашему хэшу с помощью ключа line1
(через автовификацию) и добавляет элемент $cell[1]
к этому хэш-ссылке с ключом $cell[0]
. Автовивификация в этом случае означает, что Perl ассоциирует line1
с хэш-ссылкой и создает его, потому что вы обращаетесь к нему с {$cell[0]}
. Это избавит вас от необходимости писать:
$data{line} = {};
$data{line}{$cell[0]} = $cell[1];