develooper Front page | perl.wxperl.users | Postings from February 2013

[rt.cpan.org #83110] Wx 2.9 manipulates locale

Thread Next
From:
Mark Dootson via RT
Date:
February 5, 2013 07:40
Subject:
[rt.cpan.org #83110] Wx 2.9 manipulates locale
Message ID:
rt-3.8.HEAD-28853-1360049998-1343.83110-15-0@rt.cpan.org
Tue Feb 05 02:39:58 2013: Request 83110 was acted upon.
Transaction: Correspondence added by MDOOTSON
       Queue: Wx
     Subject: Wx 2.9 manipulates locale
   Broken in: (no value)
    Severity: (no value)
       Owner: Nobody
  Requestors: TAUNGER@cpan.org
      Status: new
 Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=83110 >


Hi,

The difference is, as you suggest, that wxWidgets 2.9.x now sets the 
application locale on start-up to the user's current locale.
It does this by calling the C library setlocale() function as
setlocale(LC_ALL, "");

After reading through perllocale I have the opinion that your solutionis 
the correct one if you don't want locale formatting for numbers.

So,

use POSIX qw( setlocale, LC_NUMERIC );

.......

my $app = My::Wx::AppClass->new;

setlocale(LC_NUMERIC, 'C');

$app->MainLoop;

Perl more or less ignores locale settings if you don't 'use locale', but 
calling setlocale() affects the basic C library printf and sprintf 
functions so a setlocale(LC_NUMERIC, 'C') would seem to be required.

I'm not really sure if this should be built in to the Wx startup code.

Any opinions considered.













On Sun Feb 03 09:23:08 2013, TAUNGER wrote:
> at least the LC_NUMERIC setting
> 
> test case:
> 
> ############################
> use 5.12.0;
> use warnings;
> 
> say 8.3;
> 
> require Alien::wxWidgets;
> 
> say 8.3;
> 
> require Wx;
> 
> say 8.3;
> 
> ############################
> 
> output:
> 
> ############
> 8.3
> 8.3
> 8,3
> ############
> 
> As you can see, after including the Wx-Module, the setting changed.
> 
> It does not only affect perl self. I found this error after i searched
> the reason for wired DBD::SQLite output.
> 
> A call to POSIX::setlocale( LC_NUMERIC, 'C' ) can revert this, but i 
can
> not predict the consequences.
> 
> ---------------------
> 
> OS: Win7 64
> 
> $Wx::VERSION:  0,9916
> Wx::wxVERSION: 2,009004
> 
> Perl -V:
> 
> Summary of my perl5 (revision 5 version 16 subversion 1) 
configuration:
> 
>   Platform:
>     osname=MSWin32, osvers=4.0, archname=MSWin32-x64-multi-thread
>     uname='Win32 strawberry-perl 5.16.1.1 #1 Thu Aug  9 07:49:27 2012 
x64'
>     config_args='undef'
>     hint=recommended, useposix=true, d_sigaction=undef
>     useithreads=define, usemultiplicity=define
>     useperlio=define, d_sfio=undef, uselargefiles=define, 
usesocks=undef
>     use64bitint=define, use64bitall=undef, uselongdouble=undef
>     usemymalloc=n, bincompat5005=undef
>   Compiler:
>     cc='gcc', ccflags =' -s -O2 -DWIN32 -DWIN64 -DCONSERVATIVE 
> -DPERL_TEXTMODE_
> SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -fno-strict-
aliasing
> -mms-bi
> tfields',
>     optimize='-s -O2',
>     cppflags='-DWIN32'
>     ccversion='', gccversion='4.6.3', gccosandvers=''
>     intsize=4, longsize=4, ptrsize=8, doublesize=8, byteorder=12345678
>     d_longlong=define, longlongsize=8, d_longdbl=define, 
longdblsize=12
>     ivtype='long long', ivsize=8, nvtype='double', nvsize=8, 
Off_t='long
> long',
> lseeksize=8
>     alignbytes=8, prototype=define
>   Linker and Libraries:
>     ld='g++', ldflags ='-s -L"C:\strawberry\5-16-1-64\perl\lib\CORE"
> -L"C:\straw
> berry\5-16-1-64\c\lib"'
>     libpth=C:\strawberry\5-16-1-64\c\lib
> C:\strawberry\5-16-1-64\c\x86_64-w64-mi
> ngw32\lib
>     libs=-lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32
> -ladvapi32
>  -lshell32 -lole32 -loleaut32 -lnetapi32 -luuid -lws2_32 -lmpr -lwinmm
> -lversion
>  -lodbc32 -lodbccp32 -lcomctl32
>     perllibs=-lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool
> -lcomdlg32 -ladva
> pi32 -lshell32 -lole32 -loleaut32 -lnetapi32 -luuid -lws2_32 -lmpr
> -lwinmm -lver
> sion -lodbc32 -lodbccp32 -lcomctl32
>     libc=, so=dll, useshrplib=true, libperl=libperl516.a
>     gnulibc_version=''
>   Dynamic Linking:
>     dlsrc=dl_win32.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' '
>     cccdlflags=' ', lddlflags='-mdll -s
> -L"C:\strawberry\5-16-1-64\perl\lib\CORE
> " -L"C:\strawberry\5-16-1-64\c\lib"'
> 
> 
> Characteristics of this binary (from libperl):
>   Compile-time options: HAS_TIMES HAVE_INTERP_INTERN MULTIPLICITY
>                         PERLIO_LAYERS PERL_DONT_CREATE_GVSV
>                         PERL_IMPLICIT_CONTEXT PERL_IMPLICIT_SYS
>                         PERL_MALLOC_WRAP PERL_PRESERVE_IVUV 
PL_OP_SLAB_ALLOC
>                         USE_64_BIT_INT USE_ITHREADS USE_LARGE_FILES
>                         USE_LOCALE USE_LOCALE_COLLATE USE_LOCALE_CTYPE
>                         USE_LOCALE_NUMERIC USE_PERLIO USE_PERL_ATOF
>   Built under MSWin32
>   Compiled at Aug  9 2012 07:55:51
>   %ENV:
>     PERL_BASE="5-16-1-64"
>     PERL_EXE="C:\strawberry\5-16-1-64\perl\bin\perl.exe"
>   @INC:
>     C:/strawberry/5-16-1-64/perl/site/lib
>     C:/strawberry/5-16-1-64/perl/vendor/lib
>     C:/strawberry/5-16-1-64/perl/lib
>     .
> 
> ---
> 
> on an "old" perl (5.14) with Wx 2.8 everything seems fine
> 
> 
> 



Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About