Aika että joku lopulta laittaa vähän Perliäkin tänne, eli miksi seuraava ei toimi?
#!/usr/bin/perl
use utf8;
binmode(STDIN,":utf8");
binmode(STDOUT,":utf8");
$testi="hÖlökyn kÖlKyn";
if($testi=~/(Öl)/i) {
print lc($1)."
";
}
Tämä tulostaa siis
Öl
Jos tuon $1:n sijoittaa johonkin muuhun muuttujaan ensin, siis
$temp=$1;
print lc($temp)."
";
niin tuo tulee pienellä niin kuin pitäisikin.
lc ja UTF-8
5
1309
Vastaukset 5
- unicodaaja
Ehkä on totta ettei täällä käy ketään, mutta pidänpä sitten julkista yksinpuhelua...
Erittäin kummalliseksi em. ongelman tekee se, että jos $1:tä on käsitelty ennen kuin sitä yrittää pienentää, homma toimii. Elikkä demoten:
#!/usr/bin/perl
use utf8;
binmode(STDOUT,":utf8");
$testi="HÖLÖKYN KÖLKYN";
$testi=~s/(öl)/lc($1)/eig;
print $testi."\n";
Tämä tulostaa:
HÖlÖKYN KölKYN
Elikkä homman saa toimimaan jopa näin:
#!/usr/bin/perl
use utf8;
binmode(STDOUT,":utf8");
$testi="HÖLÖKYN KÖLKYN";
$testi=~s/(öl)/ignore($1).lc($1)/eig;
print $testi."\n";
sub ignore($) {
local ($_)=@_;
return "";
}
Nyt siis tuloste on:
HölÖKYN KölKYN
Ehkä pitäisi ilmoitella bugi... Kyseessä siis:
$ perl --version
This is perl, v5.8.0 built for i386-linux-thread-multi- Mik
Niin, onhan tämä hieman hiljainen foorumi.
Kokeilin selvittää asiaa itsekin, mutta testikoneen perl5.8.0 ei pitänyt koodista ollenkaan, sillä jokainen ääkkönen aiheutti jonkun urputuksen tunnistamattomasta UTF-8 -merkistä. Lisäksi perldoc ei listannut binmodelle toiseksi parametriksi kuin ":raw" ja ":crlf". Jos epäilet perlissä olevan bugin, niin mieti saatko kierrettyä ongelman jollain tapaa.
return "";, miksei return undef ? Lisävinkkinä suosittelen ehdottomasti option -w ja use strict;in käyttöä kaikissa ohjelmissa. - unicodaaja
Mik kirjoitti:
Niin, onhan tämä hieman hiljainen foorumi.
Kokeilin selvittää asiaa itsekin, mutta testikoneen perl5.8.0 ei pitänyt koodista ollenkaan, sillä jokainen ääkkönen aiheutti jonkun urputuksen tunnistamattomasta UTF-8 -merkistä. Lisäksi perldoc ei listannut binmodelle toiseksi parametriksi kuin ":raw" ja ":crlf". Jos epäilet perlissä olevan bugin, niin mieti saatko kierrettyä ongelman jollain tapaa.
return "";, miksei return undef ? Lisävinkkinä suosittelen ehdottomasti option -w ja use strict;in käyttöä kaikissa ohjelmissa.Ääkkösurputus, talleta tiedosto utf-8:na tai poista "use utf8". Onkohan perldocisi jostakin vanhemmasta versiosta? Minun luettelee kyllä ":raw", ":crlf", ":bytes", ":utf8", ":encoding". Kiertohan tuossa jo oli, ja kun homma toimii ASCII-merkeillä ja muillakin kunhan muuttujaan on kerran koskettu, kyseessä lienee aika selkeä bugi. Täytyypä kokeilla päteekö sama homma Windows-koneessa kohta kun sellaisen eteen päädyn.
Kokeilinpa laittaa -w ja use strict;, halusivat vähän järjestelymuutoksia, joiden jälkeen pelaa samoin kuin ennenkin. Näitä käyttäen return undef; antaa:
Use of uninitialized value in concatenation (.) or string at lctest2.pl line 11. - unicodaaja
unicodaaja kirjoitti:
Ääkkösurputus, talleta tiedosto utf-8:na tai poista "use utf8". Onkohan perldocisi jostakin vanhemmasta versiosta? Minun luettelee kyllä ":raw", ":crlf", ":bytes", ":utf8", ":encoding". Kiertohan tuossa jo oli, ja kun homma toimii ASCII-merkeillä ja muillakin kunhan muuttujaan on kerran koskettu, kyseessä lienee aika selkeä bugi. Täytyypä kokeilla päteekö sama homma Windows-koneessa kohta kun sellaisen eteen päädyn.
Kokeilinpa laittaa -w ja use strict;, halusivat vähän järjestelymuutoksia, joiden jälkeen pelaa samoin kuin ennenkin. Näitä käyttäen return undef; antaa:
Use of uninitialized value in concatenation (.) or string at lctest2.pl line 11.Jos jotakuta sattuu kiinnostamaan, sama ongelma esiintyi siis Windows-versiossa Perl 5.8:sta.
- unicodaaja
Päivityksenä, jos jotakuta kiinnostaa, tämä bugi on korjattu Perl-versiossa 5.8.1.
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Poliisi yritti murhata mopopojan
Nyt menee kissalan poikien touhu liian pitkälle! https://www.is.fi/kotimaa/art-2000012193221.html Karu video mopomiiti6051327- 741235
Muistatko Mikkelin panttivankidraaman?
Uusi draamasarja järkyttävästä tapauksesta on tulossa. Tositapahtumiin perustuva sarja ammentaa vuoden 1986 Mikkelin pan831028Iäkäs Jämsäläinen mies kuoli poliisiautoon matkalla Jyväskylän putkaan
Iäkäs vanhus humalassa niin huonossa kunnossa, ettei pystynyt huolehtimaan itsestään niin ainoa apu sillä hetkellä oli83976- 81949
En välitä sinusta yhtään
Olet pelkkä itsestään liikoja luuleva ämmä. Kierrän sinut kaukaa nyt ja aina. Olit mulle pelkkä lelu vaan.52833Ernest Lawson täräytti erikoisen heiton TTK-lehdistötilaisuudessa: " Onko tässä tarkoituksena...?"
Ernest Lawson esitteli uudet TTK-tähtioppilaat ja opettajat torstaina 6.8. lehdistölle. Tulevalla kaudella on yksi hausk10808- 67797
Mopomiitti!
Menikös öoliisilta yli tuo mppedinkans kisaaminen tais olla melkoinen riski vahigoittaa tarpeettomasti jopa kuolla tuoss212709Olen luovuttanut
Välimme menivät niin pahasti solmuun, ettei niitä voi enää korjata. On aika jatkaa elämässä eteenpäin. Toivon sulle kaik35702