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

1202

    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. Sannan kirja USA:n bestseller!

      "Congratulations to Sanna Marin's HOPE IN ACTION, officially a USA TODAY bestseller!" Kertoo Scribner. Mitäs persut tä
      Maailman menoa
      126
      11114
    2. Yritystuet 10 mrd. vuodessa, eli yrittäjäriski valtiolla kuten kommunismissa

      Pelkästään Viking Linen viinanhakuristeilyitä sponsoroidaan 20 miljoonalla eurolla vuosittain. Dieselin verotukikin on
      Yrittäjyys
      156
      10314
    3. Oikeistolainen luki Med mod att leda : en biografi

      ...ei tykänny Sanna Marinista
      Maailman menoa
      26
      8030
    4. Sture Fjäder haluaa tuensaajien nimet julki

      Kokoomuspoliitikko haluaa yli 800 euroa kuukaudessa tukia saavien nimet julki. Ehkä olisi syytä julkaista myös kuvat? h
      Maailman menoa
      184
      6524
    5. Metsäalan rikolliset

      Jokohan alkaa vähitellen kaatua kulissit näillä ihmiskauppaa harjoittavilla firmoilla.
      Sotkamo
      50
      5602
    6. Milloin viimeksi näit kaivattusi?

      Toimisitko nyt toisin kuin siinä tilanteessa teit?
      Ikävä
      73
      5051
    7. Ruotsalaistoimittaja: "Sanna Marinin saunominen saa minut häpeämään"

      Sanna Marinin kirja saa täyslaidallisen ruotsalaislehti Expressenissä perjantaina julkaistussa kolumnissa.....voi itku..
      Maailman menoa
      146
      4374
    8. Suomen kaksikielisyys - täyttä huuhaata

      Eivätkö muuten yksilöt pysty arvioimaan mitä kieliä he tarvitsevat? Ulkomaalaiselle osaajalle riittää Suomessa kielitai
      Maailman menoa
      25
      4236
    9. Työeläkeloisinta 27,5 mrd. per vuosi

      Tuo kaikki on pois palkansaajien ostovoimasta. Ja sitten puupäät ihmettelee miksei Suomen talous kasva. No eihän se kas
      Maailman menoa
      70
      4057
    10. Maahanmuuttajat torjuvat marjanpoiminnan - "emme ole rottia"

      Ruotsalaisen journalistin selvitys paljasti, miksi maahanmuuttajat kieltäytyvät työstä. Taustalla vaikuttavat kulttuuris
      Maailman menoa
      133
      3614
    Aihe