Portál AbcLinuxu, 13. května 2025 22:09
Pak jsem zkoušel něco napsat v perlu. A třeba na následující jednoduché utilitce na počítání četnosti znaků jsem si vylámal zuby:
use locale;
$_ = <STDIN>;
%znaky = ();
while ( /(\S)/) {
if (exists($znaky{$&})) {
$znaky{$&} += 1;
}
else {
$znaky{$&} = 1;
}
$_ = $';
}
foreach $c (keys(%znaky))
{
print "$c $znaky{$c}\n"
}
Tady mi to pro změnu české non-ascii znaky půlí na nějaké dva nečitelné znaky. Např. pro vstup "ščdfs" dostanu tohle:
� 1
� 1
d 1
� 1
s 1
f 1
� 1
Naveďte mě, co dělám špatně, prosím.
use utf8; binmode (STDIN, 'utf8'); binmode (STDOUT, 'utf8');
use utf8;
pouze říká, že od teď je zdroják v UTF-8.
Co se týče binmode(STDIN, ':utf8')
, tak záleží na verzi (a distribuci). Jsou takové, kde jedině binmode zajistí korektní I/O, jsou takové, kde to funguje podle locale, ale padají varování, a jsou takové, kde to funguje „samo od sebe“.
čo sa týka samotného perlu, ten, ak mu inak nik nepovie, utf8 nepozná. Povedať sa mu to (o STDIN/OUT/ERROR) dá napr. perl -C L
(podľa locale), perl -IOEioA
(natvrdo, aj @ARGV v utf8)
locale
nastaveno na cs_CZ.UTF-8
?
import locale; locale.setlocale(locale.LC_ALL, ''). Není to v Perlu podobně?
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.