В Perl (при условии, что у нас есть переменная $max
, в которой должен храниться ответ):
(length $1 > $max) && ($max = length $1) while "a,set,of,random,words" =~ /(\w+)/g;
Или:
(length $_ > $max) && ($max = length $_) foreach split /,/, "a,set,of,random,words";
Или:
$max = length((sort { length $b <=> length $a } split /,/, "a,set,of,random,words")[0]);
TMTOWTDI, в конце концов.
РЕДАКТИРОВАТЬ: я забыл о модулях ядра!
use List::Util 'reduce';
$max = length reduce { length $a > length $b ? $a : $b } split /,/, "a,set,of,random,words";
... который каким-то образом умудряется быть длиннее других. О, хорошо!
РЕДАКТИРОВАТЬ 2: Я только что вспомнил map()
:
use List::Util 'max';
$max = max map length, split /,/, "a,set,of,random,words";
Это больше похоже на то, что я ищу.
РЕДАКТИРОВАТЬ 3: И только для полноты:
($max) = sort { $b <=> $a } map length, split /,/, "a,set,of,random,words";