Вероятно:
@array = @{$obj->something()};
Из первого примера это выглядит так: $obj->something()
возвращает ссылку на массив, вам нужно разыменовать ее.
Кроме того, вам действительно нужно use strict;
и use warnings;
, и объявите ваши переменные как
my @array = @{$obj->something()};
foreach my $val (@array) {
# this does not
}
Это позволит намного легче находить ошибки (хотя, вероятно, не эту), даже в трехстрочном сценарии.