Ne perlekedjünk, örüljünk!

Azt mondja nekem a perl, hogy

doio.c:Perl_do_print:2118 Wide character in print offset=0 x'ce91' IO_isutf8=0 DO_UTF8=1 at ./yasql.in line 3236,  line 7.
ΑαΒβΓγΔδΕε ЁёЖжЗзИиЙйΑαΒβΓγΔδΕε ЁёЖжЗзИиЙй

Ez azt próbálja jelenteni, hogy a fájl nincs utf8-módban. Ezt akár debugkiírással is ellenőrizhetjük:

printf ("layers: %s", join(' ', (PerlIO::get_layers(FOUT))));
layers: unix perlio encoding(utf-8-strict) utf8

Hozzászólások

Adott esetben megszórhatjuk debugkiírásokkal, illetve tesztelhetjük, mit csinál a "file-handle forkolás".

kód:

    print "\nTesting UTF-8 with \"double fork\"\n";
    open(my $duped, '>&', STDOUT);
    binmode $duped, ":encoding(UTF-8)";

    open(my $dup2, '>&', $duped);

eredmény:

Testing UTF-8 with "double fork"
STDOUT layers: 
    Input:  unix-201200 perlio-c81200 
    Output: unix-201200 perlio-c81200 
duped layers: 
    Input:  unix-201200 perlio-c81200 encoding(utf-8-strict)-c89200 
    Output: unix-201200 perlio-c81200 encoding(utf-8-strict)-c89200 
dup2 layers: 
    Input:  unix-201200 perlio-c81200 encoding(utf-8-strict)-c89200 
    Output: unix-201200 perlio-c81200 

Ilyesmi flag-ek vannak:


#define PERLIO_F_CANWRITE       0x00000200
#define PERLIO_F_TRUNCATE       0x00001000
#define PERLIO_F_UTF8           0x00008000
#define PERLIO_F_OPEN           0x00200000
#define PERLIO_F_FASTGETS       0x00400000
#define PERLIO_F_TTY            0x00800000

Csemege

- print "$msg" if $msg && $msg != "";
+ print $msg if $msg && $msg ne "";

Troll ha lennék, meg a Yoda-beszédet is fixálnám. (Tudom, perlism.)

if ($msg && $msg ne "") { print $msg: }