use locale;
W niektórych systemach może to nie wystarczyć trzeba wówczas dodać linie:
#use POSIX qw(locale_h); # linia potrzebna przy trzeciej linii use POSIX qw(setlocale); #setlocale(LC_ALL,"pl_PL.iso88592"); setlocale(&POSIX::LC_ALL,"pl"); # drugi argument w zaleznosci od systemu
gdy i to nie pomaga, trzeba zapoznać się z wynikiem komendy man perllocale. Jeśli skrypt w Perlu po ustawieniach zgodnie z manualem nadal nie daje satysfakcjonujących rezultatow istnieje możliwość, że jest to wina systemu operacyjnego (np. windows, HP-UX). Należy wówczas go poprawić, lub tworzyć własne procedury.
Nieuaktywnienie polskich znaków może skutkować błędnym działaniem niektórych funkcji np. liczących liczbę wyrazów, znaków, sortujących itp.
Obecnie wchodzi również standard Unicode wraz z odpowiednimi modułami, na przykład do konwersji jest Unicode::Map:
use Unicode::Map(); use Unicode::String qw(utf8 utf16);
# Budujemy sobie obiekt do wypluwania wyniku
$str_latin2 = new Unicode::Map("ISO-8859-2");
$result = "tekst w UTF-8"; $result = utf8($result); $result = $str_latin2->from_unicode($result->utf16);
Inny sposób:
use Unicode::MapUTF8 qw(to_utf8 from_utf8);
$txt = to_utf8( { -string => $txt, -charset => 'ISO-8859-2' } );
$txt = from_utf8( { -string => $txt, -charset => 'ISO-8859-2' } );
Alternatywą może być Encode lub Text::Iconv.
print +(sort grep /\w/, map { chr() } 0..255), "\n";
Sortowanie polskie można również uzyskać stosując (linia podzielona ze względu na czytelność):
$literki=join('',0..9,"A\241BC\306\DE\312",F..L,"\243MN\321O\323PQRS\246",
T..Z,"\254\257_a\261bc\346de\352",f..l,"\263mn\361o\363pqrs\266",
t..z,"\274\277");
@posortowane = sort cowieksze @niesortowane;
sub cowieksze {
@aa=split //,$a;
@bb=split //,$b;
while($aa[0] eq $bb[0] && $#aa+$#bb>=0) {shift @aa; shift @bb;}
return index($literki,$aa[0]) <=> index($literki,$bb[0]);
}
tr/[A-Z]/[a-z]/;
zaś po użyciu locale (przy założeniu standardu ISO)
tr/[A-Z]/[a-z]/; tr/\241\306\312\243\321\323\246\257\254/\261\346\352\263\361\363\266\277\274/;
Do zamiany tylko pierwszej litery na wielką jest funkcja lcfirst, odwrotnie ucfirst.
perl -pi -e 'tr/\245\214\217\271\234\237/\241\246\254\261\266\274/' plik $napis =~ tr/\xA5\x8C\x8F\xB9\x9C\x9F/\xA1\xA6\xAC\xB1\xB6\xBC/;
Do pozbycia się ogonków służy formuła:
tr/ąćęłńóśźżĄĆĘŁŃÓŚŹŻ/acelnoszzACELNOSZZ/
lub para:
tr/\241\306\312\243\321\323\246\257\254/ACELNOSZZ/; tr/\261\346\352\263\361\363\266\277\274/acelnoszz/;
Ogólnie zmianę kodowań załatwia moduł Encode.
Wykaz polskich kodowań (wartości numeryczne znaków) jest pod adresem
Konwersja z UTF jest w dziale o aktywowaniu polskości.
use MIME::Words qw(:all);
$decoded = decode_mimewords("wyb=?iso-8859-2?Q?=F3r zespo=B3?=u");