Вы можете извлечь все соответствующие ключи прямо в условии:
if (my @matches = grep /.*$var1*/, keys %my_hash) {
my @values = @my_hash{@matches};
}
Кроме того, /.*$var1*/
странно. Вы хотите применить последнюю звездочку к тому, что будет последним в переменной? Кроме того, использование .*
в начале ничего не дает, если нет /g
: /$var1*/
будет работать так же (и, возможно, быстрее).