Em Perl, o operador de transliteração tr//
(que funciona basicamente como o utilitário tr
shell) retornará o número de caracteres que foram transliterados.
$ perl -e 'print("spgheti" =~ tr/spaghetti/spaghetti/, "\n")'
7
Ou seja. "sete caracteres em spgheti
são encontrados em spaghetti
".
$ perl -e 'print("spaghetti" =~ tr/spgheti/spgheti/, "\n")'
8
Ou seja. "oito caracteres em spaghetti
são encontrados em spgheti
" (como t
ocorre duas vezes em spaghetti
, é contado duas vezes).
Colocando um loop em torno dele:
while read word1 word2; do
perl -e 'printf("%s / %s: %d\n", $ARGV[0], $ARGV[1],
eval "$ARGV[0] =~ tr/$ARGV[1]/$ARGV[1]/")' "$word1" "$word2"
done <<LIST_END
stkflw Stackoverflow
fete feet
good goodness
par rap
LIST_END
A% Perl eval()
exige que você insira $ARGV[1]
na lista de pesquisa e substituição de tr//
.
Saída:
stkflw / Stackoverflow: 5
fete / feet: 4
good / goodness: 4
par / rap: 3
Ou lendo um arquivo com duas palavras em cada linha:
while read word1 word2; do
# as before
done <wordpairs