Я не могу ответить на ваш вопрос, потому что не ясно, что ваш вопрос. Я укажу, хотя - есть несколько проблем с кодом, который означает, что это, вероятно, не будут работать - исправить этот первый:
- Включите
use strict;
и use warnings;
. Исправьте все возникшие ошибки - это должны быть первые две строки всего, что вы пишете.
my @DNS_AD_toto = {'10.0.0.1', '10.0.0.2'};
, вероятно, не делает то, что, по вашему мнению, делает.
{}
обозначить анонимные хеши. Так что вы создаете здесь анонимный хэш, а затем вставляете его в массив. Ваш массив длиннее одного элемента и содержит пару ключ-значение. Это почти наверняка не то, что вы хотели.
.: например
$VAR1 = [
{
'10.0.0.1' => '10.0.0.2'
}
];
Как уже упоминалось в комментариях - не использовать $a
- это зарезервированный переменная sort
. На самом деле - не используйте имена переменных одной буквы. Для этого редко есть веская причина.
Вы говорите о символических ссылках - это неприятно. Не. Вместо этого используйте хэш. Смотрите здесь более подробно: http://perl.plover.com/varvarname.html
Что вы вероятно хочу:
my %DNS_toto = (
'AD' => [ '10.0.0.1', '10.0.0.2' ],
'OP' => [ '192.168.0.1', '192.168.0.2' ],
);
print Dumper \%DNS_toto;
Что дает:
$VAR1 = {
'AD' => [
'10.0.0.1',
'10.0.0.2'
],
'OP' => [
'192.168.0.1',
'192.168.0.2'
]
};
(Но я до сих пор не совсем ясно, что ваш нужный конечный результат - обновите свой вопрос, и я обновлю этот ответ).
Edit: После обновления вопрос:
#!/usr/bin/env perl
use strict;
use warnings;
my %hash = (
DNS_AD_toto => ['10.0.0.1'],
DNS_OP_toto => [ '192.168.0.2', '10.0.0.2' ],
DNS_ZA_toto => ['192.168.0.3'],
);
foreach my $abc ("AD", "OP") {
print $hash{ "DNS_" . $abc . "_toto" }[0], "\n";
}
В качестве альтернативы:
foreach my $key ("DNS_AD_toto", "DNS_OP_toto") {
print $hash{$key},"\n";
}
Или:
foreach my $abc (grep {m/(AD|OP)/} keys %hash) {
print $hash{$abc}[0], "\n";
}
Это действительно трудно сказать, что вы просите здесь - пожалуйста, вы можете взять момент для рассмотрения и уточнения вашего вопроса? Пожалуйста, обратитесь к [ask] за то, что делает хороший вопрос. Код - хорошее начало, но мы не можем сказать, каковы ваши желаемые результаты. – Sobrique
Я укажу, что - вы назначаете анонимный хэш '{}' массиву. '@ DNS_AD_toto' - это не очень хорошо работает. Аналогично - ваш 'eq' использует строку без кавычек, которая будет номером _version_, а не тем, что вы намереваетесь. И ваш цикл foreach - вы не включаете имена массивов. Пожалуйста, включите 'strict;' и 'warnings;', потому что это поможет вам написать код, который работает. – Sobrique
Существует также '$ a', которое является зарезервированным именем переменной, которое используется в' sort' blocks/subs рядом с '$ b'. Вместо этого выберите значащие имена переменных. – simbabque