lc ja UTF-8

unicodaaja

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.

5

1185

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • 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

    1. Et siis vieläkään

      Et ilmeisesti ole vieläkään päässyt loppuun asti mun kirjoituksissa täällä. Kerro ihmeessä sit, kun valmista 😁 tuskin k
      Ikävä
      50
      2224
    2. Aavistatko että moni tietää

      Vai ollaanko hyvin vedätetty pokerinaamalla. No kun vähiten odotat niin yllätämme sinut
      Ikävä
      82
      922
    3. Yritin saada

      Vastauksia mutta et voinut olla rehellinen ja kaiken kannoin yksin. Halusin kovasti ymmärtää mutta en voi enää ymmärtää.
      Ikävä
      11
      904
    4. Hyvä että lähdit siitä

      Ties mitä oisin keksinyt jos oisit jäänyt siihen, näit varmaan miten katoin sua.... 😘🤭😎💖
      Ikävä
      23
      874
    5. Onko vielä

      mahdollista nähdä?
      Rakkaus ja rakastaminen
      68
      863
    6. Koronarokotus sattui oudon paljon nyt sairaanhoitaja Tanja 46 istuu pyörätuolissa

      Pitkä piina piikistä Kun Tanja Vatka käy suihkussa, tuntuu kuin ihoa revittäisiin raastinraudalla irti. Hän on kärsinyt
      Maailman menoa
      51
      821
    7. Olisitko mies valmis?

      Maksamaan naisellesi/vaimollesi/tyttöystävällesi elämisestä syntyvät kulut, ruokailun, vuokran ja muut välttämättömät me
      Ikävä
      117
      816
    8. Täällä istun ja mietin

      Miten paljon haluaisin katsoa sinua juuri niin kuin haluaisin katsoa sinua. Rakastavin silmin. Näkisit vihdoin senkin pu
      Ikävä
      49
      749
    9. Kronikat..

      Mikä hele… on tää yks kronikat mikä suoltaa facessa kaikkea julkaisua ja AINA samoista firmoista imatralla??? Eikö ne mu
      Imatra
      9
      743
    10. vieläkin sanoa voin...

      💖💛💖💛💖💛💖💛💖 💛 Beijjjbeh 💛 Kaks vuotta tänään täällä. Miten hitossa jotkut on jaksaneet kymmeniä vuos
      Ikävä
      22
      733
    Aihe