Нет необходимости агрегировать строки и искать в массивах. Используйте distinct on
, пример:
with mytable (key_col, text_col) as (
values
(1, 'asd'),
(1, 'a'),
(2, 'asd'),
(2, 'asdfg')
)
select distinct on (key_col) key_col, text_col as shortest
from mytable
order by key_col, length(text_col)
key_col | shortest
---------+----------
1 | a
2 | asd
(2 rows)
Если вам действительно нужна функция (для использования в других обстоятельствах), это может быть простой запрос, заключенный в функцию SQL:
create or replace function shortest(text[])
returns text language sql as $
select elem
from unnest($1) as elem
order by length(elem)
limit 1;
$;
Я добавил бы свой голос взятию Test::More
прежде, чем идти дальше в тестировании Perl. сообщество тестирования Perl довольно хорошо объединено вокруг эти Тест Что-либо Протокол , и Вы захотите играть вокруг с Test::More
, чтобы понять, как оно работает и как инструменты как [1 110] prove
и Test::Harness::Archive
могут помочь автоматизировать и распределить тестирование.
, Если Вы хотите просто "переход прямо в", я думаю Test::Class
, предоставляет xTest услуги с бэкенд TAP . Я не использовал его вообще (я Test::More
человек сам), но это , очень высоко оценил .
Тест:: Больше должно предложить Вам больше удара для Ваших маркеров, после того как Вы приобретаете навык Теста:: Простой.
Также можно обратиться к этому предыдущему обсуждению искренне Вашим, если Вы хотите больше информации: how-can-i-implement-tdd-in-perl
Судя по Вашим комментариям melaos ответ, я сказал бы Тест:: Класс или Тест:: Единица - то, что Вы ищете.
Простой тестовый пример:
#!/usr/bin/perl -w
use strict;
use warnings 'all';
use Test::More plan => 4; # or use Test::More 'no_plan';
use_ok('My::Module', 'Loaded My::Module');
ok( my $obj = My::Module->new(), 'Can create instance of My::Module');
ok( $obj->value('hello'), 'Set value to hello' );
is( $obj->value => 'hello', 'value is still hello');
Тест:: использование Класса Вы видите в этом пример .