А ведь в перле всегда была возможность простой реализации перегрузки функций. Об этом как-то не было смысла задумываться три-четыре года назад, но теперь, когда у нас есть прототип Perl 6, можно и поностальжировать :-)
Сегодня я достал из архивов код, написанный на одном дыхании несколько лет назад (и до сих пор воспользованный). Там есть функция, которая определяет словарную форму слова по ее номеру (то есть просто находит по ID запись в таблице). Сегодня мне потребовалось то же самое, но с возможностью поискать сразу несколько записей.
Чтобы удобно искать как по одному аргументу, так и по списку, хочется, чтобы метод возвращал данные в том же виде: либо скаляром, либо списком.
Ничего сверъестественного:
sub spell {
my @id = @_;
my $ids = join ',', grep {/^\d+$/} @id;
. . .
return @id < 2 && @base > 0 ? $base[0] : @base;
}
Искуственно выглядит лишь проверка при возврате значения.
А вот была бы С++(Perl 6-)-подобная перегрузка, было бы проще. Ждем-с.
Андрей, исправь id my (@id) = @_;
?
Однако, с форматированием произошла неприятность. Попробую еще раз:
Андрей, исправь id < 2 и скажи, зачем скобки в строке
my (@id) = @_;
?
Спасибо.
Скобки не нужны (убрал), они остались от предыдущего кода my ($id) = @_.
Чуть странно смотрится, может зря вмешиваюсь, но может как-то так:
sub spell {
my $ids = join ',', grep /^\d+$/, @_;
. . .
return wantarray ? @base : $base[0];
}