Perl-5.8 ����

Last Updated at $Date: 2005/12/04 04:00:59 $.

���Υڡ����ϡ�Perl-5.8.2 ��Ȥ���Ǻ��ä����ȤʤɤγФ��񤭤Ǥ���


���ܸ��ޤॹ����ץȤ��

Perl-5.8.x �����ܸ�򰷤�������ץȤ�񤯾�硤�礭��2�̤����ˡ������ޤ���

  1. ���ܸ� EUC �ǥ�����ץȤ�񤯡�
  2. UTF-8 �ǥ�����ץȤ�񤯡�

�ɤ������ˡ�Ǥ⡤ (1)�ե������������� (2)�ǡ����١������������� (3)�ץ��������̿���3�Ĥ˵���Ĥ��ơ� ����Ū�˥Х������ʸ������Ѵ������ꡤ�ޤ��դ�ʸ�����Х�������Ѵ�����ɬ�פ�����ޤ���

�ºݤˤϡ������3�Ĥ����ơ֥ե�����ϥ�ɥ�פȤ�����ݲ������Τǡ� �ޤȤ�ư������Ȥ��Ǥ��ޤ�����

���ܸ� EUC �ǥ�����ץȤ��

���ܤˤʤ�Τϡ�encoding �ץ饰�ޤǤ���

use encoding "euc-jp";
print "����ˤ���\n";

use encoding "euc-jp" �Ȥ�������ϡ� (1)ɸ�������Ϥ�ʸ�������ɤȤ������ܸ� EUC ��Ȥ��� (2)������ץȤ����ܸ� EUC �ǵ��Ҥ���Ƥ���ȸ��ʤ����Ȥ�����̣������ޤ��� �ޤ���encoding �ץ饰�ޤˤ�����ϡ��������Х�ʸ��̤�����ޤ���

�������äơ����λ�������Ǥ�ɸ�२�顼���Ϥˤ����������Ϥ���ޤ���

use encoding "euc-jp";
warn "ʸ����������Ϥ��Ǥ�\n";

����������򤱤뤿��ˤϡ�binmode �ؿ���Ȥäơ� ɸ�२�顼���Ϥ�ʸ�������ɤ�����Ū�����ꤷ�Ƥ����ޤ���

use encoding "euc-jp";
binmode STDERR, ":encoding(euc-jp)";
warn "����˽��Ϥ���ޤ�����?\n";

�ܤ����ϡ���������򻲾Ȥ��Ƥ��������� �Ȥꤢ������use encoding ... binmode ... �ϥ��ǥ�����Ȥ��ƳФ��Ƥ����ޤ��礦��

encoding �ץ饰�ޤϥ������Х�ʸ��̤�����ޤ����顤�ʲ����������դ�ɬ�פǤ���

������Υ������פ��� encoding �ץ饰�ޤ�̵�������뤳�ȤϤǤ��ޤ���

�ؿ� foo �����������ϡ�ñ�ʤ�Х�����Ȥ��ư��ä��ߤ����ȹͤ��ơ� �ʲ��Τ褦�ʻ���򤷤Ƥ�ư���ޤ���

sub foo {
    no encoding;
    $str = "���ܸ�EUC�ΥХ�����šŤȤϲ�ᤵ��ʤ�";
}
��¾��ʸ�������ɤǵ��Ҥ��줿�⥸�塼������ѤǤ��ޤ���

ISO-2022-JP �� Shift-JIS �ʤ�¾��ʸ�������ɤǵ��Ҥ���Ƥ���⥸�塼��� ���ܸ� EUC �ǵ��Ҥ���Ƥ���Ȱ�礷�Ƹ��ʤ���Ƥ��ޤ��ޤ��� �������äơ������Υ⥸�塼����ǻȤ��Ƥ���ʸ���ϡ�����˲�ᤵ��ʤ��Ǥ��礦�� ��������UTF-8 �ǵ��Ҥ���Ƥ��ơ����ġ� utf8 �ץ饰�ޤ����ꤵ��Ƥ���⥸�塼������ѤǤ��ޤ���

use utf8;
# ... UTF-8 �ǵ��Ҥ��줿�⥸�塼��
1;
��encoding �ץ饰�ޤ�ʣ������ꤹ�뤳�ȤϤǤ��ޤ���

ʣ���� encoding �ץ饰�ޤ����ꤵ�줿���ϡ��Ǹ�Υץ饰�ޤ�������̣������ޤ���

UTF-8 �ǥ�����ץȤ��

���ܤˤʤ�Τϡ�utf8 �ץ饰�ޤǤ���

# �ʲ��Υ�����ץȤ� UTF-8 ����¸���뤳�ȡ�
use utf8;
print "UTF-8 �Ǥ���ˤ���\n";

���Υ�����ץȤϡ�ɸ�������ϤȤ��̿��ˤ� UTF-8 ��Ȥ��ޤ��� �����ƥ����Τ� Unicode �������Ȥ��������οͤϤ�����ɤ��Ǥ��礦���� �ޤ���¿���οͤ����ܸ� EUC ��ȤäƤ���Ǥ��礦�� ���ξ��ϡ��ʲ��Τ褦�ˡ� ɸ�������Ϥ����ɸ�२�顼���Ϥˤ����ܸ� EUC ��Ȥ��褦�˻��ꤷ�Ƥ���������

# �ʲ��Υ�����ץȤ� UTF-8 ����¸���뤳�ȡ�
use utf8;
binmode STDOUT, ":encoding(euc-jp)";
binmode STDERR, ":encoding(euc-jp)";
binmode STDIN, ":encoding(euc-jp)";
print "UTF-8 �Ǥ���ˤ���\n";

���ܸ��ޤ�ե�����򳫤�

����

�Ȥ߹��ߴؿ� open �ν񼰤���ĥ����ơ� �ɤ߹��ߡ��񤭹��ߤ� encoding ������Ǥ���褦�ˤʤäƤ��ޤ��� ���γ�ĥ�񼰤����Ѥ���Τ����Ǥ����Ū����ˡ�Ǥ���

open( F, "<:encoding(euc-jp)", "filename" ) or die;
print <F>;
close F;

�ܤ�������ϡ�perldoc -f open �ޤ��� perldoc perlopentut ���Ƥߤ�������ޤ���

binmode �ؿ���Ȥ�

���� open �ѤߤΥե�����ϥ�ɥ���оݤȤ��ơ� encoding �����(�ѹ�)������ϡ�binmode �ؿ���Ȥ��ޤ���

binmode STDOUT, ":encoding(euc-jp)";

open �ץ饰�ޤ�Ȥ�

open ��ƤӽФ����Ӥ˻��ꤹ��Τ����ݤ��� �Ȥ������ϰʲ��Τ褦�� open �ץ饰�ޤǻ��ꤷ�ޤ���

use open IO => ":encoding(euc-jp)";
open( F, "< filename" ) or die;
print <F>;
close F;

open �ץ饰�ޤˤ������ pipe �ξ��ˤ�ͭ���ˤʤ�ޤ��� �ʲ�����Ǥϡ�ISO-2022-JP �� encode ���줿ʸ���� kcc ���Ϥ���ޤ���

use encoding "euc-jp";
use open OUT => ":encoding(iso-2022-jp)";
open( P, "| kcc -c" ) or die;
print P "������ޤ�ʸ\n";

��ĥ���줿 open �ؿ��θƽФ��ξ��(= ������3�İʾ���ꤵ��Ƥ�����)�ˤϡ� open �ץ饰�ޤˤ������ͭ���ˤϤʤ�ޤ���

# ���Υ�����ץȤϴ����̤��ư��ʤ���
use encoding "euc-jp";
use open IO => ":encoding(euc-jp)";
open( F, "<", "filename" ) or die;
while( <F> ){
    m/����ɽ��/ and  print;
}

̵̾�Υե�����ϥ�ɥ�

����Ū�ʥե�����ϥ�ɥ�̾�����Ѥ��Ƥ���ȡ� �ե�����ϥ�ɥ�̾�ξ��ͤ����ˤʤ롤 �Ȥ������ϼ��Τ褦�˽񤭤ޤ���

open( my $fh, "< filename" ) or die;
print <$fh>

�ʤ����ѿ� $fh �Υ������פϴؿ� open ��°����֥��å��Ȱ��פ��Ƥ��ޤ���

use strict;
if( open( my $fh, "not-exist-file" ) ){
    print <$fh>;
} else {
    print $fh;
}
# ������ print $fh �Ƚ񤯤ȡ�compile error �ˤʤ롥

���μ¸���̤���ʬ�����̤ꡤopen �˼��Ԥ������Ǥ� $fh �����Ƥ϶��ǤϤʤ��Τǡ��ʲ��Υ�����ץȤ�ư��ޤ���

# ���Υ�����ץȤϴ����̤��ư��ʤ���
open( my $fh, "not-exist-file" );
if( $fh ){
    # �����˽������ܤäƤ��ޤ���
    print <$fh>;
} else {
    print "Cannot open file\n";
}

Perl-5.6 ��Ʊ���褦�ˡ�IO::File �⥸�塼��ޤ��� FileHandle �⥸�塼����Ѥ��뤳�Ȥ�Ǥ��ޤ���

use IO::File;
my $fh = IO::File->new( $0, "<" ) or die;

# ʸ�������ɤ���ꤹ����� binmode �ؿ���Ȥ�
binmode( $fh, ":encoding(euc-jp)" );

# ��������open �γ�ĥ���줿�񼰤�ʸ�������ɤ���ꤷ�褦�Ȥ���ȡ����顼�ˤʤ�
my $fh2 = IO::File->new( $0, "<:encoding(euc-jp)" ) or die;

Ϣ����������ܸ��Ȥ�

Perl-5.8 �������Ǥϡ����Ƥ�ʸ���� Unicode ��ɽ������Ƥ��ޤ��� �������äơ�Ϣ������Υ������ͤȤ��Ƥ⡤���ܸ�����̤˻Ȥ����Ȥ��Ǥ��ޤ���

use encoding "euc-jp";
my %hash;
$hash{"����"} = "��";
while( my( $key, $value ) = each %hash ){
    print "$key:$value\n";
}

�Ȥ�������DB_File ���饹�� GDBM_File ���饹�ȷ���դ���줿(tie ���줿)Ϣ�������Ȥ����Ȥ���ȡ� ��¸�����Ĥ���ʸ��������줺���ԲĻ׵Ĥ�ư��򤹤�褦�ˤʤ�ޤ���

use DB_File;
use encoding "euc-jp";
tie( %hash, 'DB_File', "filename", O_CREAT ) or die;
$hash{"����"} = "��";
while( my( $key, $value ) = each %hash ){
    print "$key:$value\n";
}
# ���Υ�����ץȤ�¹Ԥ��Ƥ⡤�ޤȤ��ʸ����������ޤ���

�ʲ��Τ褦�ˡ�����Ū�� decode ����С�������ʸ�����������뤳�Ȥ��Ǥ��ޤ���

use DB_File;
use Encode qw/ decode_utf8 /;
use encoding "euc-jp";
tie( %hash, 'DB_File', "filename", O_CREAT ) or die;
$hash{"����"} = "��";
while( my( $key, $value ) = each %hash ){
    printf( "%s:%s\n", &decode_utf8($key), &decode_utf8($value) );
}

�ǡ����١����ȸ��äƤ⡤�ե�����Ȥ������Ϥ�ԤäƤ��뤳�Ȥ��Ѥ��Ϥ���ޤ��󤫤顤 �ե�����򳫤�����Ʊ�ͤˤ������ encode/decode ��Ԥ�ɬ�פ�����櫓�Ǥ��� DB_File �⥸�塼��ξ��ϰʲ��Τ褦�ˡ� �������ͤ��ɤ߽񤭤���Ȥ��Υե��륿�����ꤹ��ȡ������̤��ư���褦�ˤʤ�ޤ���

use DB_File;
use Encode qw/ encode decode /;
use encoding "euc-jp";
    
$db = tie( %hash, 'DB_File', "filename", O_CREAT ) or die;
$db->filter_store_key  ( sub { $_ = encode("euc-jp", $_) } );
$db->filter_store_value( sub { $_ = encode("euc-jp", $_) } );
$db->filter_fetch_key  ( sub { $_ = decode("euc-jp", $_) } );
$db->filter_fetch_value( sub { $_ = decode("euc-jp", $_) } );

$hash{"����"} = "��";
while( my( $key, $value ) = each %hash ){
    print "$key:$value\n";
}

���Τ褦�ʥե��륿���������Ƥ��ʤ��⥸�塼���Ȥ�ɬ�פ�������ˤϡ� ��ñ�ʥ�åѡ���񤱤в��Ǥ��ޤ��� GDBM_File �⥸�塼��Υ�åѡ������ʲ��˼����ޤ���


���ܸ��ޤ�����ɽ��

�ʲ��Τ褦�����ƤΥ�����ץȤ����ܸ� EUC ����¸���Ƽ¹Ԥ��Ƥߤޤ���

my $str = "����";
$str =~ s/��//;
print "$str\n";

������ꤷ�ʤ���С����Τ褦�ʷ�̤�������Ǥ��礦��

$ perl sample.perl
��

���η�̤ϡ�¿�Х���ʸ����ʸ���������θ����������ɽ���������Ԥ��Ƥ��ޤäƤ��뤳�Ȥ򼨤��Ƥ��ޤ���

Perl ��¿�Х���ʸ����ʸ���������θ�����뤿��ˤϡ�������������̤ꡤ ��������ˡ��¿�Х���ʸ����ޤॹ����ץȤ��ɬ�פ�����ޤ���

Unicode ���ʤ��������Ƥ���ʸ�����̾�������Ѥ���ȡ� �ʲ��Τ褦������ɽ����񤯤��Ȥ��Ǥ��ޤ���

ʿ��̾�˰��פ�������ɽ��
$str =~ m/(\p{Hiragana}+)/;
�Ҳ�̾�˰��פ�������ɽ��
$str =~ m/(\p{Katakana}+)/;
�������˰��פ�������ɽ��
$str =~ m/(\p{Punctuation}+)/;
�����˰��פ�������ɽ��
$str =~ m/(\p{Han}+)/;

�ܤ����ϡ�perldoc perljp ���ƤߤƲ�������


ʸ�������ɤμ�ưȽ��

Encode::Guess �⥸�塼���Ȥ��ޤ��� �Ȥ����ˤϡ� (1)ʸ�������ɤ���ꤹ��ؿ� guess_encoding ������Ū�˸ƤӽФ���ˡ�ȡ� (2)��ư�����Ԥ����Ȥ���ꤹ�����̤�ʸ�������� Guess ����ꤹ����ˡ�� ��2�̤꤬����ޤ���

��1����ˡ�μ���Ȥ��ơ���ñ�� nkf ���ޥ�ɤ� perl �Ǽ������Ƥߤ�ȡ��ʲ��Τ褦�ˤʤ�ޤ���

#!/usr/bin/perl
use Encode qw/ from_to /;
use Encode::Guess;
use Getopt::Long qw/ :config no_ignore_case /;
use open IO => ":bytes";
use strict;
my $in;
my $out = "euc-jp";
&GetOptions( 'JIS'      => sub { $in = "7bit-jis"; },
             'EUC'      => sub { $in = "euc-jp"; },
             'SHIFTJIS' => sub { $in = "shiftjis"; },
             'jis'      => sub { $out = "7bit-jis"; },
             'euc'      => sub { $out = "euc-jp"; },
             'shiftjis' => sub { $out = "shiftjis"; } );
my $data = join( undef, <> );
unless( $in ){
    my $enc = guess_encoding( $data, qw/ euc-jp shiftjis 7bit-jis / );
    if( ref $enc ){
        $in = $enc->name;
    } else {
        die "Cannot estimate encoding: $enc\n";
    }
}
&from_to( $data, $in, $out );
print $data;

ʸ�������ɤ�ư���ꤹ�� guess_encoding �ؿ��ϡ������Ȥ��ơ� �����оݤȤʤ�ǡ�����ʸ�������ɤο����ϰϤ���ޤ���

��2����ˡ�����ʤ�����̤�ʸ�������� Guess ����ꤹ����ϡ� ʸ�������ɤο����ϰϤ�Ŭ������ˡ����˻��ꤷ�Ƥ���ɬ�פ�����ޤ��� ��äȤ��ñ����ˡ�ϡ��ʲ��Τ褦�� Encode::Guess �⥸�塼��ΰ����Ȥ��ƻ��ꤹ����ˡ�Ǥ���

use Encode qw/ decode encode /;
use Encode::Guess qw/ euc-jp shiftjis 7bit-jis /;
print encode( "euc-jp", decode( "Guess", join( undef, <> ) ) );

�ʲ��Τ褦�ˡ�set_suspects �ؿ����Ѥ��ƻ��ꤹ�뤳�Ȥ�Ǥ��ޤ���

use Encode::Guess;
Encode::Guess->set_suspects( qw/ euc-jp shiftjis 7bit-jis / );

����¾�ξ���ϡ� ��äȾܤ����ڡ����򸫤Ƥ���������


�Ť� Perl �Ǥ�¹ԤǤ���褦�˽�

encoding �ץ饰�ޤϡ�Perl-5.6 �� Jperl �ˤ�¸�ߤ��ʤ��Τǡ� ���̤� encoding �ץ饰�ޤ�Ȥä�������ץȤ�¹Ԥ��褦�Ȥ���ȡ� �ʲ��Τ褦�ʥ��顼�ˤʤ�ޤ���

Can't locate encoding.pm in @INC.
BEGIN failed--compilation aborted at sample.perl line 3.

�ʲ��Τ褦�ˡ�BEGIN �֥��å������Ѥ��ơ� Perl �ΥС�����󸡺���ԤäƤ��� require & import ��Ԥ��褦�ˤ���ȡ� encoding �ץ饰�ޤ�¸�ߤ��ʤ� Perl �Ǥ�ư��������ץȤ��񤱤ޤ���

use English qw/ $PERL_VERSION /;
BEGIN {
    if( $PERL_VERSION > 5.008 ){
	require encoding;
	encoding->import( "euc-jp" );
    }
}

���ܸ������ɽ����ȤäƤ���ʤɤ���ͳ�ǡ� Perl-5.8.x �ޤ��� Jperl ������Ȥ��������ϰʲ��Τ褦�˽񤭤ޤ���

use English qw/ $PERL_VERSION /;
BEGIN {
    if( $PERL_VERSION > 5.008 ){
	require encoding;
	encoding->import( "euc-jp" );
    } elsif( split( //, "��" ) == 1 ){
	require I18N::Japanese;
	I18N::Japanese->import();
    } else {
	die "Your Perl does not support Japanese characters.";
    }
}

̤��������

���ܸ��ޤॳ��ƥ�Ĥ� HTML::TreeBuilder �ǽ�������ˤ�?

���ܸ���ʬ�� Unicode ��ʸ�����λ��Ȥ��Ѵ�����Ƥ��ޤ���

use strict;
use encoding "euc-jp";
use Encode qw/ decode encode_utf8 /;
use HTML::TreeBuilder;
use LWP::UserAgent;

my $ua = LWP::UserAgent->new();
my $response = $ua->get( "http://namazu.org/~tsuchiya/" );
if( $response->is_success ){
    my $tree = HTML::TreeBuilder->new;
    $tree->parse( encode_utf8( decode( "iso-2022-jp", $response->content ) ) );
    # print $tree->as_HTML;
    print decode_utf8( $tree->as_text );
}

HTML::Parser �⥸�塼��� handler ��Ŭ�ڤ����ꤹ��Ф����Τ��⤷��ʤ���

NDO::Weblog �ε��Ҥˤ��С����Τ�����Ǥ���餷�����Ȥꤢ������encode_utf8 ��Ƥ�ǡ���� UTF-8 �ʥХ�����ˤ��Ƥ��� parse ���ʤ���Фʤ�ʤ��褦���� ������ˡ�ǡ�����Ū�� encode/decode ���뤳�Ȥˤ�ꡤas_text() �᥽�åɤǤν��ϤϽ����褦�ˤʤä���as_HTML() �����Ѥ����ꡤ Ʃ��Ū�˽�����Ԥ���ˡ���ޤ�ʬ����ʤ���


[Top] / [��λȤäƤ��� Perl Scripts] / [Perl-5.8 �Ф���]