Unicode-Tussle
view release on metacpan or search on metacpan
script/vowel-sigs view on Meta::CPAN
#!/usr/bin/env perl
use v5.12;
sub maxlen (@ );
sub seqcount ( $ _ );
sub cvmap ( _ );
sub cvlen ( _ );
sub as_CV ( _ );
sub nsyl ( _ );
use constant MANY => 8;
our $RX_Subs;
our ($V, $C, $VC, $CV);
UNITCHECK {
init_subs();
}
$| = 1;
use Lingua::EN::Syllable;
@ARGV = "/usr/share/dict/words" if !@ARGV && -t;
main();
exit;
sub main {
while (<>) {
#next unless /y/i;
chomp;
my $my_count = nsyl;
my $his_count = syllable($_);
next if $my_count == $his_count;
printf "%d %d %s %s\n", $my_count, $his_count, $_, as_CV;
}
}
sub nsyl(_) {
my $cv = as_CV(shift);
# $cv =~ s/VV/V/g;
return $cv =~ y/V//;
}
sub as_CV(_) {
local $_ = lc shift;
s/[gq]ue(?=$|$C)/k/g;
s/qu/qw/g;
s/(\p{IsConsonant})\1\Kle$/el/;
s/[ai]\Kble/bel/;
s/ble$/bel/;
s/ive(?=ly|ness)$/iv/;
s/$C\Kre$/er/;
# s/$C\Ked$/d/;
s/ism$/isum/;
s/$V$C+\Ke$//;
s/[xtcs]i\K[ao]([ln])/$1/g;
s/eye/ee/g;
s/$C\Kle(?:ness)?$/el/;
s/$V\Ky(?=$V)/C/g;
s/(?=$C)y(?=[ao])/V/g;
s/$C\Ky(?=$C)/V/g;
s/$C\Ky$/V/g;
s/$C\Ky/C/g;
s/$V\Ky/V/g;
s/$C/C/g;
s/$V/V/g;
return $_;
}
sub main2 {
while (<>) {
chomp;
( run in 2.917 seconds using v1.01-cache-2.11-cpan-5837b0d9d2c )