This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Moved prototype check to XS code, allowing the .pm file change from yesterday
[perl5.git] / ext / I18N-Langinfo / Langinfo.pm
CommitLineData
4bbcc6e8
JH
1package I18N::Langinfo;
2
3use 5.006;
4use strict;
5use warnings;
6use Carp;
7
8require Exporter;
9require DynaLoader;
10use AutoLoader;
11
12our @ISA = qw(Exporter DynaLoader);
13
74c76037
JH
14our @EXPORT = qw(langinfo);
15
4bbcc6e8 16our @EXPORT_OK = qw(
4bbcc6e8
JH
17 ABDAY_1
18 ABDAY_2
19 ABDAY_3
20 ABDAY_4
21 ABDAY_5
22 ABDAY_6
23 ABDAY_7
24 ABMON_1
25 ABMON_10
26 ABMON_11
27 ABMON_12
28 ABMON_2
29 ABMON_3
30 ABMON_4
31 ABMON_5
32 ABMON_6
33 ABMON_7
34 ABMON_8
35 ABMON_9
36 ALT_DIGITS
37 AM_STR
38 CODESET
39 CRNCYSTR
40 DAY_1
41 DAY_2
42 DAY_3
43 DAY_4
44 DAY_5
45 DAY_6
46 DAY_7
47 D_FMT
48 D_T_FMT
49 ERA
50 ERA_D_FMT
51 ERA_D_T_FMT
52 ERA_T_FMT
53 MON_1
54 MON_10
55 MON_11
56 MON_12
57 MON_2
58 MON_3
59 MON_4
60 MON_5
61 MON_6
62 MON_7
63 MON_8
64 MON_9
65 NOEXPR
66 NOSTR
67 PM_STR
68 RADIXCHAR
69 THOUSEP
70 T_FMT
71 T_FMT_AMPM
72 YESEXPR
73 YESSTR
74);
75
b7b56127 76our $VERSION = '0.04';
4bbcc6e8
JH
77
78sub AUTOLOAD {
79 # This AUTOLOAD is used to 'autoload' constants from the constant()
80 # XS function.
81
82 my $constname;
83 our $AUTOLOAD;
84 ($constname = $AUTOLOAD) =~ s/.*:://;
85 croak "&I18N::Langinfo::constant not defined" if $constname eq 'constant';
86 my ($error, $val) = constant($constname);
87 if ($error) { croak $error; }
88 {
89 no strict 'refs';
90 # Fixed between 5.005_53 and 5.005_61
91#XXX if ($] >= 5.00561) {
92#XXX *$AUTOLOAD = sub () { $val };
93#XXX }
94#XXX else {
95 *$AUTOLOAD = sub { $val };
96#XXX }
97 }
98 goto &$AUTOLOAD;
99}
100
101bootstrap I18N::Langinfo $VERSION;
102
1031;
104__END__
105
106=head1 NAME
107
108I18N::Langinfo - query locale information
109
110=head1 SYNOPSIS
111
112 use I18N::Langinfo;
113
114=head1 DESCRIPTION
115
74c76037
JH
116The langinfo() function queries various locale information that can be
117used to localize output and user interfaces. The langinfo() requires
118one numeric argument that identifies the locale constant to query:
119if no argument is supplied, C<$_> is used. The numeric constants
120appropriate to be used as arguments are exportable from I18N::Langinfo.
4bbcc6e8 121
74c76037
JH
122The following example will import the langinfo() function itself and
123three constants to be used as arguments to langinfo(): a constant for
124the abbreviated first day of the week (the numbering starts from
125Sunday = 1) and two more constants for the affirmative and negative
126answers for a yes/no question in the current locale.
4bbcc6e8
JH
127
128 use I18N::Langinfo qw(langinfo ABDAY_1 YESSTR NOSTR);
129
130 my ($abday_1, $yesstr, $nostr) = map { langinfo } qw(ABDAY_1 YESSTR NOSTR);
131
132 print "$abday_1? [$yesstr/$nostr] ";
133
74c76037
JH
134In other words, in the "C" (or English) locale the above will probably
135print something like:
4bbcc6e8 136
74c76037 137 Sun? [yes/no]
4bbcc6e8 138
b5a1df5a
JH
139but under a French locale
140
141 dim? [oui/non]
142
4bbcc6e8
JH
143The usually available constants are
144
145 ABDAY_1 ABDAY_2 ABDAY_3 ABDAY_4 ABDAY_5 ABDAY_6 ABDAY_7
146 ABMON_1 ABMON_2 ABMON_3 ABMON_4 ABMON_5 ABMON_6
147 ABMON_7 ABMON_8 ABMON_9 ABMON_10 ABMON_11 ABMON_12
148 DAY_1 DAY_2 DAY_3 DAY_4 DAY_5 DAY_6 DAY_7
149 MON_1 MON_2 MON_3 MON_4 MON_5 MON_6
150 MON_7 MON_8 MON_9 MON_10 MON_11 MON_12
151
152for abbreviated and full length days of the week and months of the year,
153
154 D_T_FMT D_FMT T_FMT
155
156for the date-time, date, and time formats used by the strftime() function
b5a1df5a 157(see L<POSIX>)
4bbcc6e8
JH
158
159 AM_STR PM_STR T_FMT_AMPM
160
161for the locales for which it makes sense to have ante meridiem and post
162meridiem time formats,
163
164 CODESET CRNCYSTR RADIXCHAR
165
166for the character code set being used (such as "ISO8859-1", "cp850",
167"koi8-r", "sjis", "utf8", etc.), for the currency string, for the
758f564b
JH
168radix character used between the integer and the fractional part
169of decimal numbers (yes, this is redundant with POSIX::localeconv())
4bbcc6e8
JH
170
171 YESSTR YESEXPR NOSTR NOEXPR
172
173for the affirmative and negative responses and expressions, and
174
74c76037 175 ERA ERA_D_FMT ERA_D_T_FMT ERA_T_FMT
4bbcc6e8
JH
176
177for the Japanese Emperor eras (naturally only defined under Japanese locales).
178
179See your L<langinfo(3)> for more information about the available
180constants. (Often this means having to look directly at the
181F<langinfo.h> C header file.)
182
758f564b
JH
183Note that unfortunately none of the above constants are guaranteed
184to be available on a particular platform. To be on the safe side
185you can wrap the import in an eval like this:
186
187 eval {
188 require I18N::Langinfo;
189 I18N::Langinfo->import(qw(langinfo CODESET));
190 $codeset = langinfo(CODESET()); # note the ()
191 };
192 if (!$@) { ... failed ... }
193
4bbcc6e8
JH
194=head2 EXPORT
195
c893053f 196By default only the C<langinfo()> function is exported.
4bbcc6e8
JH
197
198=head1 SEE ALSO
199
200L<perllocale>, L<POSIX/localeconv>, L<POSIX/setlocale>, L<nl_langinfo(3)>.
201
202The langinfo() is just a wrapper for the C nl_langinfo() interface.
203
204=head1 AUTHOR
205
206Jarkko Hietaniemi, E<lt>jhi@hut.fiE<gt>
207
208=head1 COPYRIGHT AND LICENSE
209
210Copyright 2001 by Jarkko Hietaniemi
211
212This library is free software; you can redistribute it and/or modify
213it under the same terms as Perl itself.
214
215=cut