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

1150

    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. En voi jutella kanssasi

      tietenkään, mutta täällä voin sanoa sinulle, että se sinun hiljaisuutesi ja herkkyytesi eivät ole heikkoutta. Ne ovat ih
      Tunteet
      39
      5120
    2. Trump ja Vance murskasivat ja nolasivat Zelenskyn tiedotusvälineiden edessä Valkoisessa talossa.

      Jopa oli uskomaton tilaisuus Valkoisessa talossa. Zelensky jäi täydelliseksi lehdellä soittelijaksi suhteessa Trumpiin j
      Maailman menoa
      513
      1679
    3. Kokoomus haluaa hoitaa flussat yksityisellä, jotta säästettäisiin rahaa ja aikaa

      Mies hakeutui Terveystalo Kamppiin flunssaoireiden takia helmikuisena sunnuntai-iltana. Diagnoosiksi kirjattiin influens
      Maailman menoa
      77
      1090
    4. Rakkaus ei iloitse vääryydestä vaan iloitsee yhdessä TOTUUDEN kanssa.

      Tajuatteko, että jotkut ihmiset pitävät siitä, kun toiset kaatuvat? He nauttivat siitä, kun toiset mokaavat tai käyttävä
      Idän uskonnot
      359
      1008
    5. Koska olet rakastellut

      Kaivattusi kanssa viimeksi?
      Ikävä
      77
      943
    6. Anteeksi Pekka -vedätys

      Apuna Ry:n somessa levinnyt Anteeksi Pakka -kampanja saa aina vaan kummallisempia piirteitä. ”Mä pyydän anteeksi. Mä
      Maailman menoa
      53
      921
    7. Kumpi tästä

      Teidän tilanteesta teki vaikeaa? Sivusta
      Ikävä
      59
      860
    8. Kaikkia ei voi miellyttää

      Eikä ole tarviskaan. Hyvää huomenta ja mukavaa perjantaita. 😊❄️⚜️✌🏼❤️
      Ikävä
      228
      814
    9. Mikä on kaivattusi ärsyttävin piirre?

      Mun kaivattu on erittäin vastahakoinen puhumaan itsestä. Kääntää puheenaiheen aina muuhun kun hänestä tulee puhetta.
      Ikävä
      50
      793
    10. Päivi Ollila on tehnyt kunnallisvalituksen saadakseen pidettyä Tarja Pirkkalaisen virassa

      Kaupunginhallituksen puheenjohtaja Päivi Ollila on tehnyt kunnallisvalituksen kaupungin johtamisjärjestelyiden muutokses
      Haapavesi
      58
      738
    Aihe