#!/usr/bin/perl use locale; $v = '[aeiouáéíóúàãõâêôäëïöü]'; $f = '[çdfgjkqtv]'; $ac = '[áéíúãõâêô]'; while(<>){chomp; # print divide($_),"\n" ; # print wordaccent(divide($_)),"\n" ; # print vowelaccent(wordaccent(divide($_))),"\n" } s/(\w+)/vowelaccent(wordaccent(divide($1)))/ge; print "$_\n"; } RULES divide ($v|[bclnprsx])($f)==>$1|$2 ($v)([bclmnprsx]$v)==>$1|$2 ($v)([nlc]h|ss|rr)==>$1|$2 ([lmnrsx])([bclmnprs])($v)==>$1|$2$3!!"$1$2" ne "ss" && "$1$2" ne rr ($v|[lmnrsx])([bcp][lr]$v)==>$1|$2 ([au])(i[ru])==>$1|$2 ([io])([ao])==>$1|$2 ([ie])e==>$1|e ($v)($ac)==>$1|$2 RULES wordaccent "=last=> (\w*$ac)==>"$1 (\w*([zlr]|[iu]s?))$==>"$1 (\w+\|\w+)$==>"$1 (^\w+$)==>"$1 RULES vowelaccent :($ac)==>$1: "(\w*?($v|[yw]))==>$1: ([gq]u):($v|[yw])==>$1$2: "==> :=last=> __END__ =head1 DESCRIPTION Makes division in sylabs according to the portuguese language rules. =head1 AUTHOR J.Joao Almeida, jj@di.uminho.pt =cut