2010-02-04 2 views
3

J'ai écrit un petit programme pour passer par /usr/share/dict/mots trouver palindromesPerl comparaison de chaînes iso-8859-1

while(<>){ 
    chomp; 
    print "$_\n" if $_ eq reverse; 
} 

Cependant, cela ne fonctionne pas pour une liste de mots danois codé en Latin-1 (ISO-8859-1). Je me demandais comment j'allais le faire fonctionner?

+0

(Si les SO'ers recherchent des cas de test, voir http://www.daimi.au.dk/~chili/palindromer.html) – mob

+0

Cela soulève la question philosophique de savoir si un palindrome est un palindrome s'il y a des accents impliqués. S'il y avait un mot français "efac" (pas d'accent sur le e), cela compte-t-il comme l'inverse de "café" dans lequel il y a un accent? – AmbroseChapel

Répondre

3

Utilisez locale? Et peut-être tourner également sur le drapeau Unicode sur STDIN:

use Modern::Perl; 
use locale; 
binmode(STDIN, ":utf8"); 
while (<>) { 
    chomp; 
    say if $_ eq reverse; 
} 

Sans binmode il aurait pu être une belle uniligne:

perl -Mlocale -nE 'chomp; say if $_ eq reverse' 
+1

ou perl -Mlocale -lnE 'dire si $ _ eq inverse' – converter42