Upgrade to Encode 1.26, from Dan Kogai.
[p5sagit/p5-mst-13.2.git] / ext / Encode / bin / piconv
CommitLineData
3ef515df 1#!./perl
f2a2953c 2# $Id: piconv,v 1.20 2002/04/04 19:50:52 dankogai Exp $
67d7b5ef 3#
4use 5.7.3;
5use strict;
6use Encode ;
7use Encode::Alias;
8my %Scheme = map {$_ => 1} qw(from_to decode_encode perlio);
9
10use Getopt::Std;
11
d31fa6c4 12my %Opt; getopts("hDS:lf:t:s:", \%Opt);
13$Opt{h} and help();
67d7b5ef 14$Opt{l} and list_encodings();
15my $locale = $ENV{LC_CTYPE} || $ENV{LC_ALL} || $ENV{LANG};
d31fa6c4 16$Opt{f} || $Opt{t} || help();
67d7b5ef 17my $from = $Opt{f} || $locale or help("from_encoding unspecified");
18my $to = $Opt{t} || $locale or help("to_encoding unspecified");
19$Opt{s} and Encode::from_to($Opt{s}, $from, $to) and print $Opt{s} and exit;
20my $scheme = exists $Scheme{$Opt{S}} ? $Opt{S} : 'from_to';
21
22if ($Opt{D}){
23 my $cfrom = Encode->getEncoding($from)->name;
24 my $cto = Encode->getEncoding($to)->name;
25 print STDERR <<"EOT";
26Scheme: $scheme
27From: $from => $cfrom
28To: $to => $cto
29EOT
30}
31
32# default
33if ($scheme eq 'from_to'){
34 while(<>){
35 Encode::from_to($_, $from, $to); print;
36 };
37# step-by-step
38}elsif ($scheme eq 'decode_encode'){
39 while(<>){
40 my $decoded = decode($from, $_);
41 my $encoded = encode($to, $decoded);
42 print $encoded;
43 };
44# NI-S favorite
45}elsif ($scheme eq 'perlio'){
46 binmode(STDIN, ":encoding($from)");
47 binmode(STDOUT, ":encoding($to)");
48 while(<>){ print; }
49}else{ # won't reach
50 die "unknown scheme: $scheme";
51}
52
53sub list_encodings{
54 print STDERR join("\n", Encode->encodings(":all")), "\n";
55 exit;
56}
57
58sub help{
59 my $message = shift;
60 use File::Basename;
61 my $name = basename($0);
62 $message and print STDERR "$name error: $message\n";
63 print STDERR <<"EOT";
64$name [-f from_encoding] [-t to_encoding] [-s string] [files...]
65$name -l
66 -l lists all available encodings.
67 -f from_encoding When omitted, the current locale will be used.
68 -t to_encoding When omitted, the current locale will be used.
69 -s string "string" will be converted instead of STDIN.
70EOT
71 exit;
72}
73
74__END__
75
76=head1 NAME
77
78piconv -- iconv(1), reinvented in perl
79
80=head1 SYNOPSIS
81
82 piconv [-f from_encoding] [-t to_encoding] [-s string] [files...]
83 piconv -l
84
85=head1 DESCRIPTION
86
87B<piconv> is perl version of F<iconv>, a character encoding converter
7748829a 88widely available for various Unixen today. This script was primarily
89a technology demonstrator for Perl 5.8.0, you can use piconv in the
67d7b5ef 90place of iconv for virtually any cases.
91
92piconv converts character encoding of either STDIN or files specified
93in the argument and prints out to STDOUT.
94
95Here are list of options.
96
97=over 4
98
99=item -f from_encoding
100
101Specifies the encoding you are converting from. Unlike F<iconv>,
7748829a 102this option can be omitted. In such cases the current locale is used.
67d7b5ef 103
104=item -t to_encoding
105
106Specifies the encoding you are converting to. Unlike F<iconv>,
7748829a 107this option can be omitted. In such cases the current locale is used.
67d7b5ef 108
109Therefore when both -f and -t are omitted, F<piconv> just acts like F<cat>.
110
111=item -s I<string>
112
113uses I<string> instead of file for the source of text. Same as F<iconv>.
114
115=item -l
116
910d1d59 117Lists all available encodings to STDERR.
67d7b5ef 118
d31fa6c4 119=item -h
120
121Show usage.
122
67d7b5ef 123=item -D
124
7748829a 125Invokes debugging mode. Primarily for Encode hackers.
67d7b5ef 126
127=item -S scheme
128
129Selects which scheme is to be used for conversion. Available schemes
130are as follows;
131
132=over 4
133
134=item from_to
135
136Uses Encode::from_to for conversion. This is the default.
137
138=item decode_encode
139
7748829a 140Input strings are decode()d then encode()d. A straight two-step
67d7b5ef 141implementation.
142
143=item perlio
144
7748829a 145The new perlIO layer is used. NI-S' favorite.
67d7b5ef 146
147=back
148
149Like I<-D> option, this is also for Encode hackers.
150
151=back
152
153=head1 SEE ALSO
154
155L<iconv(1)>
156L<locale(3)>
157L<Encode>
158L<PerlIO>
159
160=cut