Esse script perl cria um hash com palavras (leia uma por linha de stdin e / ou de qualquer nome de arquivo listado na linha de comando) como chaves, e a sílaba conta como os valores.
Em seguida, ele imprime as chaves de hash, classificadas pelas contagens de sílabas.
#! /usr/bin/perl
use strict;
use Lingua::EN::Syllable;
my %words = ();
while(<>) {
chomp;
$words{$_} = syllable($_);
};
print join("\n",sort { $words{$a} <=> $words{$b} } keys(%words)), "\n";
Saída:
cat
dog
bookshelf
something
important
Se você quiser imprimir a contagem de sílabas junto com cada palavra, altere a última linha para algo assim:
foreach my $word (sort { $words{$a} <=> $words{$b} } keys(%words)) {
printf "%2i: %s\n", $words{$word}, $word;
};
Saída:
1: cat
1: dog
2: bookshelf
3: something
3: important
Esta versão destaca o fato de que, como o próprio módulo afirma, apenas estima a contagem de sílabas. "bookshelf" é contada corretamente como tendo apenas duas sílabas, mas "algo" também deve ser dois.
Eu não examinei de perto o código do módulo, mas ele provavelmente está ficando confuso com o e
após o m
. Em muitas (mais?) Palavras, isso não seria um e
silencioso e contaria como uma sílaba extra.