2011-03-15 1 views
2

Quand je mets mon locale-it_IT.UTF-8 (export LC_ALL = it_IT.UTF-8) et exécutez ce scriptutilisation - question

#!/usr/bin/env perl 
use warnings; 
use 5.012; 
use POSIX qw(strftime); 

say strftime "%A %B %e %H:%M:%S %Y", localtime; 

Je reçois cette sortie:

martedì marzo 15 08:50:07 2011 

mais la lecture de ce (à partir de The-use-locale-pragma):

By default, Perl ignores the current locale. The use locale pragma tells Perl to use the current locale for some operations: ... The POSIX date formatting function (strftime()) uses LC_TIME .

pourquoi mes paramètres régionaux ont-ils une influence sur la sortie strftime sans l'utilisation du pragma locale?

+0

Il semble que 'POSIX' et locales est juste un coin sombre de Perl. Voir aussi http://stackoverflow.com/questions/3214418/is-locale-setting-global-in-perl –

Répondre

5

POSIX::strftimePOSIX::strftime est un wrapper fin autour de l'appel de fonction réel strftime C dans time.h qui utilise les paramètres régionaux en cours. Perl ne passe pas par l'effort pour le rendre conforme.

DateTime has a strftime equivalent implémenté en Perl qui sera conforme au pragma de paramètres locaux de Perl.