Вы можете сделать:
my %hash = (4 => "model1", 2 => "model2");
my $str = join(", ", map { "$_ X $hash{$_}" } keys %hash);
print $str;
Вывод:
4 X model1, 2 X model2
Как это работает:
map { expr } list
оценивает expr
для каждого элемента в list
и возвращает список, содержащий все результаты этих оценок.Здесь "$_ X $hash{$_}"
вычисляется для каждого ключа хэша, поэтому результатом является список key X value
строк.join
заботится о размещении запятых между каждой из этих строк.
Обратите внимание, что ваш хэш немного необычен, если вы храните пары (элемент, количество).Обычно все происходит наоборот:
my %hash = ("model1" => 4, "model2" => 2);
my $str = join(", ", map { "$hash{$_} X $_" } keys %hash);
, потому что в вашей схеме вы не можете хранить одинаковое количество для двух разных элементов в вашем хэше.