Perl динамически генерируемый многомерный ассоциативный массив - PullRequest
0 голосов
/ 15 января 2012

Это может быть простым упущением с моей стороны (или чем-то гораздо более продвинутым, чем мой набор навыков).Я пытаюсь динамически заполнить 2-й ассоциативный массив, читая входные данные из файла.

my @data;
while (<FILE>) {
    chomp;

    my $ID,$COUNT;
    print "READ: " . $_ . "\n"; #Debug 1

    ($ID,$COUNT,undef,undef,undef) = split /\,/;
    print "DATA: " . $ID . "," . $COUNT . "\n"; # Debug 2

    $data{$ID}{"count"} = $COUNT;
    #push @{$data{$ID}{"count"}}, $COUNT; 

              print $data{$ID}{"count"} . "\n"; # Debug 3
}

При первом выводе (Debug 1) будет напечатана строка, аналогичная des313,3 ,,,.

Второй отпечаток (Debug 2) будет печатать строку DATA: des313,3

Третий отпечаток (Debug 3) будет печатать пустую строку.

Возможно, проблема вЯ пытаюсь вставить данные в ассоциативный массив.Я пробовал как прямую вставку, так и метод push без результатов.Я сделал это с PHP, однако я думаю, что я пропускаю это в Perl.Я посмотрел на страницу perldoc perldsc в разделе HASHES of HASHES, однако я не видел, чтобы она говорила о динамическом их создании.Любые предложения будут великолепны!

1 Ответ

5 голосов
/ 15 января 2012

Назначение хешу, как у вас, должно работать нормально.Вы объявляете свои переменные неправильно.Ваш ассоциативный массив в Perl называется хешем, и перед ним стоит символ %, поэтому вы должны написать my %data перед циклом while.Внутри цикла оператору my нужны символы скобок для применения к списку, поэтому оно должно быть my ($ID, $COUNT);.

. Этот минимальный пример работает правильно:

use warnings;  # place these lines at the top of all of your programs
use strict;    # they will catch many errors for you

my %data;  # hash variable
while (<DATA>) {
    chomp;
    my ($id, $count) = split /,/;  # simplify the split

    $data{$id}{count} = $count;    # build your hash
}

print "got: $data{des313}{count}\n";  # prints "got: 3"

__DATA__
des313,3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...