Drats: у вас есть повторяющиеся клавиши ... Я хотел что-то сделать с map
или grep
.
Это довольно просто понять:
my $string = "xyz;1;xyz;2;a;2;b;2";
my @array = split /;/ => $string;
my %hash;
while (@array) {
my ($key, $value) = splice @array, 0, 2;
$hash{$key} = [] if not exists $hash{$key};
push @{$hash{$key}}, $value;
}
Эта программабудет работать, даже если ключ не находится в вашей строке.Например, следующее будет работать, даже если xyz
разделен другими парами значений:
my $string = "xyz;1;a;2;b;2;xyz;2";
Я предполагаю, что $hash{b}=(2);
означает, что вы хотите, чтобы значение $hash{b}
было ссылкой намассив из одного члена.Это правильно?