package PerlIO::via::PinyinConvert; use Lingua::ZH::PinyinConvert qw/convert/; use 5.006; use strict; our $VERSION = '0.01'; our $from; our $to; sub import { shift; my %arg = @_; $from = $arg{from} || die "From what?\n"; $to = $arg{to} || die "To what?\n"; } sub PUSHED { my ($class,$mode,$fh) = @_; my $buf = ''; return bless \$buf,$class; } sub FILL { my ($obj,$fh) = @_; my $line = <$fh>; return (defined $line) ? convert($from, $to, $line) : undef; } sub WRITE { my ($obj,$buf,$fh) = @_; $$obj .= convert($from, $to, $buf); return length($buf); } sub FLUSH { my ($obj,$fh) = @_; print $fh $$obj or return -1; $$obj = ''; return 0; } 1; __END__ =head1 NAME PerlIO::via::PinyinConvert - PerlIO layer for Lingua::ZH::PinyinConvert =head1 SYNOPSIS use PerlIO::via::PinyinConvert from => "tongyong", to => "hanyu"; binmode(STDOUT, ":via(PinyinConvert)"); print 'ni hao ma?'; =head1 DESCRIPTION L<PerlIO::via::PinyinConvert> is a layer for Lingua::ZH::PinyinConvert. Users can combine this with L<Text::Unidecode>. use utf8; use Text::Unidecode; use PerlIO::via::PinyinConvert from => "hanyu", to => "tongyong"; print unidecode( "\x{5317}\x{4EB0}\n" ); =head1 SEE ALSO L<Lingua::ZH::PinyinConvert> L<Text::Unidecode> =head1 COPYRIGHT xern <xern@cpan.org> This module is free software; you can redistribute it or modify it under the same terms as Perl itself. =cut