Есть ли способ получить имя массива в хэше в Perl? - PullRequest
0 голосов
/ 27 декабря 2011

Я использую несколько массивов одинаковой структуры в программе на Perl, и в какой-то момент мне нужно вывести там имена. Т.е. мне нужно получить 'array_name' от @array_name.
Как мне это сделать? Если это невозможно, можете ли вы предложить какой-либо удобный способ «относительного» хранения массивов и их имен?
Спасибо.

Ответы [ 3 ]

5 голосов
/ 27 декабря 2011

Это, конечно, возможно, но я бы порекомендовал хранить ваши массивы как ссылки на анонимные массивы в хэше:

my %arrays = (
    'array_name' => [ qw(contents of array array_name) ],
    # etc
)

Затем, чтобы получить массив с именем $some_array_name:

my @array = @{$arrays{"$some_array_name"}};
2 голосов
/ 27 декабря 2011

Вы можете создать хэш анонимных массивов следующим образом:

%HoA = (
    flintstones    => [ "fred", "barney" ],
    jetsons        => [ "george", "jane", "elroy" ],
    simpsons       => [ "homer", "marge", "bart" ],
);

Вы можете установить первый элемент определенного массива следующим образом:

$HoA{flintstones}[0] = "Fred";

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

$HoA{simpsons}[1] =~ s/(\w)/\u$1/;

Вы можете распечатать все семейства, циклически перебирая ключи хеша:

for $family ( keys %HoA ) {
    print "$family: @{ $HoA{$family} }\n";
}
0 голосов
/ 27 декабря 2011

Нет автоматического хранения имен. Это просто имя переменной, которую вы используете. Если вам нужно сохранить его, я бы порекомендовал использовать хэш, как это:

$array->{name} = "array_name";
$array->{data} = [@array_name];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...