# $Id: /mirror/coderepos/lang/perl/Encode-Argv/trunk/lib/Encode/Argv.pm 50486 2008-04-15T14:50:02.946222Z daisuke $ package Encode::Argv; use strict; use warnings; use 5.8.0; use Encode (); our $VERSION = '0.00002'; sub import { my ($class, $decode_from, $encode_to) = @_; if (! $decode_from) { eval { require Term::Encoding; $decode_from = Term::Encoding::get_encoding(); }; } if ($decode_from) { foreach (@ARGV) { $_ = Encode::decode($decode_from, $_); } } if ($encode_to) { foreach (@ARGV) { $_ = Encode::encode($encode_to, $_); } } } 1; __END__ =head1 NAME Encode::Argv - Automatically Mess With @ARGV's Encoding =head1 SYNOPSIS use Encode::Argv ('cp932'); # Now @ARGV is decoded unicode characters, decoded from cp932 use Encode::Argv ('cp932' => 'euc-jp'); # Now @ARGV is encoded into euc-jp after being decoded from cp932 use Encode::Argv; # Now @ARGV is decoded from whatever Term::Encoding thinks you are # using on your terminal. =head1 DESCRIPTION I saw L and L, and thought, "Well, I can't fix /all/ of their problems, but I can at least start". So here's a module that silently encodes/decodes your @ARGV from/to encodings supported by Encode.pm All you need to do is to simply specify the encodings you want to use: use Encode::Argv ('cp932'); There, you got yourself an unicode @ARGV on ShiftJIS Windows. If in case you don't even want to explicitly specify what encoding to use, you could rely on Term::Encoding to find out what you are using. In that case you don't have to specify anything: use Encode::Argv; If Term::Encoding is not found, no decoding will be performad Of course, this doesn't solve the entire problem, but it's at least a start =head1 AUTHOR Copyright (c) 2008 Daisuke Maki C<< daisuke@endeworks.jp >> =head1 LICENSE This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See http://www.perl.com/perl/misc/Artistic.html =cut