Вы знакомы с
new Class @args
Это называется «косвенный метод записи».Это означает
Class->new(@args)
Если first
не объявлено,
first { $ARGV[$_] eq "something"; } 0..$#ARGV;
обрабатывается как косвенный вызов метода, поэтому он эквивалентен
{ $ARGV[$_] eq "something"; }->first(0..$#ARGV);
{ ... }
создает хеш, который не является ни именем пакета, ни ссылкой на объект, как того требует вызов метода, поэтому
Can't call method "first" without a package or object reference
Решение: объявить first
, импортировав его.