argra****@users*****
argra****@users*****
2008年 8月 25日 (月) 03:46:36 JST
Index: docs/perl/5.10.0/perltoot.pod diff -u docs/perl/5.10.0/perltoot.pod:1.3 docs/perl/5.10.0/perltoot.pod:1.4 --- docs/perl/5.10.0/perltoot.pod:1.3 Sat Jun 21 17:46:23 2008 +++ docs/perl/5.10.0/perltoot.pod Mon Aug 25 03:46:35 2008 @@ -199,7 +199,7 @@ 違っているでしょうが、原則は同じです)。 ディレクトリ名のベースとなるモジュールとの間にどのような公式な関係も 想定してはいけません。 -これは、単に、グループ別けを便利にしているだけで、継承や変数の +これは、単に、グループ分けを便利にしているだけで、継承や変数の アクセシビリティなど、その他諸々に、何の効果も与えません。 =begin original @@ -221,7 +221,7 @@ オブジェクトを作るためには、クラスに、I<コンストラクタメソッド> が必要です。 コンストラクタは、普通のデータ型ではなく、おろしたてのクラスのオブジェクトを 返します。 -この魔法は、bless() 関数によって、扱われます。 +この魔法は bless() 関数によって扱われます。 bless() の唯一の目的は、リファレンスをオブジェクトとして使えるように することです。 銘記:オブジェクトであることは、実際には、メソッドが、そのオブジェクトを @@ -237,9 +237,9 @@ =end original -コンストラクタは、好きなように名付けても構いませんが、ほとんどの -Perl プログラマは、コンストラクタを、new() と呼ぶのを好むようです。 -ですが、new() は、予約語ではありませんし、クラスにはそういったものを供給する +コンストラクタは好きなように名付けても構いませんが、ほとんどの +Perl プログラマはコンストラクタを、new() と呼ぶのを好むようです。 +ですが、new() は予約語ではありませんし、クラスにはそういったものを供給する 義務もありません。 コンストラクタとして、クラスと同じ名前の関数を使うプログラマにがいることも 知られています。 @@ -320,11 +320,11 @@ =end original -これと同じモデルは、複数のクラスでよく使われてますが、 +これと同じモデルは複数のクラスでよく使われてますが、 とはいっても、クラスの外から、皆がオブジェクトにワルツを踊らせて、 そのデータメンバにずうずうしく直接にアクセスすることは、 プログラミングの礼儀正しさの頂点をよく考えたものではありません。 -概して、オブジェクトは、I<オブジェクトメソッド> を使ってアクセスする、 +概して、オブジェクトは I<オブジェクトメソッド> を使ってアクセスする、 不可解なクッキーと考えるべきです。 見た目には、メソッドは、ブラケットや、ブレイスの代わりに、 関数名を使って、リファレンスをデリファレンスしているように見えます。 @@ -346,12 +346,12 @@ =end original 言語には、クラスのメソッドのための正式な総合のインターフェースを -提供しているものもありますが、Perl は、そうではありません。 +提供しているものもありますが、Perl はそうではありません。 使う人がそれぞれのクラスのドキュメントを読むのを当てにしています。 定義されていないメソッドをオブジェクトで呼んだら、Perl は、文句を 言おうとはしませんが、プログラムは、実行中に例外をおこすでしょう。 同じように、引数に素数を期待するメソッドに、素数でない数字を引数にして -呼んだとしても、コンパイラがそのことをとらえてくれることは期待できません。 +呼んだとしても、コンパイラがそのことを捕らえてくれることは期待できません。 (たぶん、あなたは、コンパイラにあなたの好むすべてを期待するでしょうが、 そんなことは起こりません。) @@ -588,7 +588,7 @@ オブジェクトの話の終わりは、I<デストラクタですが>、このメソッドは、 オブジェクトがその命を無くすときに暗黙のうちに呼ばれます。 オブジェクトごとの後かたづけのコードがデストラクタにあり、デストラクタは、 -(Perlでは)DESTROYと呼ばれなければいけません。 +(Perl では)DESTROY と呼ばれなければいけません。 =begin original @@ -611,8 +611,8 @@ 自動的に起こります。 素早いですが、幾分、怠惰なリファレンスに基づいた、ガベージ コレクションシステムです。 -呼ぶべきものが何かわかるように、Perl は、デストラクタが、DESTROY と -名付けられることを、主張します。 +呼ぶべきものが何かわかるように、Perl は、デストラクタが DESTROY と +名付けられることを要求します。 Perl はデストラクタを呼ぶ適切な時期を考えますが、現在のところいつ 呼ばれるかははっきり定義されていません。 このために、デストラクタは、それがいつ呼ばれるかを当てに @@ -699,7 +699,7 @@ そのため、次のことが保証されます。 プログラムが終了していない唯一の場合をのぞいて、オブジェクトが、 I<最終的に>適切に、破壊されます。 -(他のアプリケーションに、埋め込んで Perl を走らせているなら、この徹底した +(他のアプリケーションに埋め込んで Perl を走らせているなら、この徹底した ガベージコレクションの通過は、普段より少々頻繁に - スレッドが終了する度に - 起こります)。 @@ -753,8 +753,8 @@ このマークは、慣例的に次のことを示します。 そのメソッドがそのクラスだけ、および、密接なその知合い、つまりサブクラスの プライベートなものであることを示します。 -ですが、この区別は Perl 自身によって、強制されてはいません。 -そう振る舞うことは、プログラマしだいです。 +ですが、この区別は Perl 自身によって強制されてはいません。 +そう振る舞うことは、プログラマ次第です。 =begin original @@ -2503,10 +2503,8 @@ =end original -However the code that implements UNIVERSAL::isa does not -search in UNIVERSAL itself, only in the package's actual - @ ISA. -(TBT) +しかし、UNIVERSAL::isa を実装したコードは UNIVERSAL 自身では検索せず、 +パッケージの実際の @ISA のみを検索します。 =head1 Alternate Object Representations @@ -3295,7 +3293,6 @@ =end original -Take care that the C<Jobbie> object is not created automatically by the C<Jobbie> オブジェクトは C<Fred> クラスの new() メソッドで自動的には 作成されないので、C<Fred> の実態を作成するときに C<Jobbie> オブジェクトを 指定することに注意してください。 Index: docs/perl/5.10.0/perlunitut.pod diff -u /dev/null docs/perl/5.10.0/perlunitut.pod:1.1 --- /dev/null Mon Aug 25 03:46:36 2008 +++ docs/perl/5.10.0/perlunitut.pod Mon Aug 25 03:46:35 2008 @@ -0,0 +1,528 @@ + +=encoding euc-jp + +=head1 NAME + +=begin original + +perlunitut - Perl Unicode Tutorial + +=end original + +perlunitut - Perl における Unicode のチュートリアル + +=head1 DESCRIPTION + +=begin original + +The days of just flinging strings around are over. It's well established that +modern programs need to be capable of communicating funny accented letters, and +things like euro symbols. This means that programmers need new habits. It's +easy to program Unicode capable software, but it does require discipline to do +it right. + +=end original + +The days of just flinging strings around are over. It's well established that +modern programs need to be capable of communicating funny accented letters, and +things like euro symbols. This means that programmers need new habits. It's +easy to program Unicode capable software, but it does require discipline to do +it right. +(TBT) + +=begin original + +There's a lot to know about character sets, and text encodings. It's probably +best to spend a full day learning all this, but the basics can be learned in +minutes. + +=end original + +文字集合とテキストエンコーディングに関しては学ぶべきことがたくさんあります。 +おそらくこれら全てを学ぶのに丸一日を使うのが最良ですが、基本は数分で +学べます。 + +=begin original + +These are not the very basics, though. It is assumed that you already +know the difference between bytes and characters, and realise (and accept!) +that there are many different character sets and encodings, and that your +program has to be explicit about them. Recommended reading is "The Absolute +Minimum Every Software Developer Absolutely, Positively Must Know About Unicode +and Character Sets (No Excuses!)" by Joel Spolsky, at +L<http://joelonsoftware.com/articles/Unicode.html>. + +=end original + +These are not the very basics, though. It is assumed that you already +know the difference between bytes and characters, and realise (and accept!) +that there are many different character sets and encodings, and that your +program has to be explicit about them. Recommended reading is "The Absolute +Minimum Every Software Developer Absolutely, Positively Must Know About Unicode +and Character Sets (No Excuses!)" by Joel Spolsky, at +L<http://joelonsoftware.com/articles/Unicode.html>. +(TBT) + +=begin original + +This tutorial speaks in rather absolute terms, and provides only a limited view +of the wealth of character string related features that Perl has to offer. For +most projects, this information will probably suffice. + +=end original + +This tutorial speaks in rather absolute terms, and provides only a limited view +of the wealth of character string related features that Perl has to offer. For +most projects, this information will probably suffice. +(TBT) + +=head2 Definitions + +(定義) + +=begin original + +It's important to set a few things straight first. This is the most important +part of this tutorial. This view may conflict with other information that you +may have found on the web, but that's mostly because many sources are wrong. + +=end original + +まず、いくつかのことをはっきりさせることが重要です。 +これはこのチュートリアルで最も重要な部分です。 +この考え方はあなたが web で見つけたその他の情報と矛盾するかもしれませんが、 +ほとんどの場合、それは web で見つけた情報の方が間違っているためです。 + +=begin original + +You may have to re-read this entire section a few times... + +=end original + +このセクション全体を何回か読み直す必要があるかもしれません… + +=head3 Unicode + +=begin original + +B<Unicode> is a character set with room for lots of characters. The ordinal +value of a character is called a B<code point>. + +=end original + +B<Unicode> is a character set with room for lots of characters. The ordinal +value of a character is called a B<code point>. +(TBT) + +=begin original + +There are many, many code points, but computers work with bytes, and a byte can +have only 256 values. Unicode has many more characters, so you need a method +to make these accessible. + +=end original + +There are many, many code points, but computers work with bytes, and a byte can +have only 256 values. Unicode has many more characters, so you need a method +to make these accessible. +(TBT) + +=begin original + +Unicode is encoded using several competing encodings, of which UTF-8 is the +most used. In a Unicode encoding, multiple subsequent bytes can be used to +store a single code point, or simply: character. + +=end original + +Unicode is encoded using several competing encodings, of which UTF-8 is the +most used. In a Unicode encoding, multiple subsequent bytes can be used to +store a single code point, or simply: character. +(TBT) + +=head3 UTF-8 + +=begin original + +B<UTF-8> is a Unicode encoding. Many people think that Unicode and UTF-8 are +the same thing, but they're not. There are more Unicode encodings, but much of +the world has standardized on UTF-8. + +=end original + +B<UTF-8> は Unicode のエンコーディングです。 +多くの人々は Unicode と UTF-8 は同じだと考えていますが、違います。 +Unicode のエンコーディングには他にもありますが、世界のほとんどでは標準として +UTF-8 が使われています。 + +=begin original + +UTF-8 treats the first 128 codepoints, 0..127, the same as ASCII. They take +only one byte per character. All other characters are encoded as two or more +(up to six) bytes using a complex scheme. Fortunately, Perl handles this for +us, so we don't have to worry about this. + +=end original + +UTF-8 treats the first 128 codepoints, 0..127, the same as ASCII. They take +only one byte per character. All other characters are encoded as two or more +(up to six) bytes using a complex scheme. Fortunately, Perl handles this for +us, so we don't have to worry about this. +(TBT) + +=head3 Text strings (character strings) + +(テキスト文字列(文字の文字列)) + +=begin original + +B<Text strings>, or B<character strings> are made of characters. Bytes are +irrelevant here, and so are encodings. Each character is just that: the +character. + +=end original + +B<テキスト文字列>、または B<文字の文字列> は文字からなります。 +バイト列はここでは無意味で、エンコーディングがあります。 +各文字は単に文字です。 + +=begin original + +Text strings are also called B<Unicode strings>, because in Perl, every text +string is a Unicode string. + +=end original + +テキスト文字列は B<Unicode 文字列> とも呼ばれます; なぜなら、Perl では +テキスト文字列は Unicode 文字列だからです。 + +=begin original + +On a text string, you would do things like: + +=end original + +テキスト文字列では、以下のようにします。 + + $text =~ s/foo/bar/; + if ($string =~ /^\d+$/) { ... } + $text = ucfirst $text; + my $character_count = length $text; + +=begin original + +The value of a character (C<ord>, C<chr>) is the corresponding Unicode code +point. + +=end original + +文字の値 (C<ord>, C<chr>) は対応する Unicode コードポイントです。 + +=head3 Binary strings (byte strings) + +(バイナリ文字列(バイト文字列)) + +=begin original + +B<Binary strings>, or B<byte strings> are made of bytes. Here, you don't have +characters, just bytes. All communication with the outside world (anything +outside of your current Perl process) is done in binary. + +=end original + +B<バイナリ文字列>、または B<バイト文字列> はバイト列からなります。 +ここでは、文字はなく、単にバイトだけがあります。 +外側の世界(現在の Perl プロセスの外側のあらゆるもの) との通信はバイナリで +行われます。 + +=begin original + +On a binary string, you would do things like: + +=end original + +バイナリ文字列では、以下のようにします: + + my (@length_content) = unpack "(V/a)*", $binary; + $binary =~ s/\x00\x0F/\xFF\xF0/; # for the brave :) + print {$fh} $binary; + my $byte_count = length $binary; + +=head3 Encoding + +(エンコード) + +=begin original + +B<Encoding> (as a verb) is the conversion from I<text> to I<binary>. To encode, +you have to supply the target encoding, for example C<iso-8859-1> or C<UTF-8>. +Some encodings, like the C<iso-8859> ("latin") range, do not support the full +Unicode standard; characters that can't be represented are lost in the +conversion. + +=end original + +B<エンコード> は I<テキスト> から I<バイナリ> への変換です。 +エンコードするには、C<iso-8859-1> や C<UTF-8> のような、エンコード先の +エンコーディングが必要です。 +C<iso-8859> ("latin") のような一部のエンコーディングは、Unicode 標準に +完全に対応していません; 表現できない文字は変換時に失われます。 + +=head3 Decoding + +(デコード) + +=begin original + +B<Decoding> is the conversion from I<binary> to I<text>. To decode, you have to +know what encoding was used during the encoding phase. And most of all, it must +be something decodable. It doesn't make much sense to decode a PNG image into a +text string. + +=end original + +B<デコード> は I<バイナリ> から I<テキスト> への変換です。 +デコードするには、エンコード時に使われたエンコーディングが何かを知っている +必要があります。 +そしてそもそも、それはデコード可能である必要があります。 +PNG イメージをテキスト文字列にデコードしてもほとんど意味はないです。 + +=head3 Internal format + +(内部形式) + +=begin original + +Perl has an B<internal format>, an encoding that it uses to encode text strings +so it can store them in memory. All text strings are in this internal format. +In fact, text strings are never in any other format! + +=end original + +Perl has an B<internal format>, an encoding that it uses to encode text strings +so it can store them in memory. All text strings are in this internal format. +In fact, text strings are never in any other format! +(TBT) + +=begin original + +You shouldn't worry about what this format is, because conversion is +automatically done when you decode or encode. + +=end original + +この形式がどのようなものであるかを気にする必要はないはずです; なぜなら +変換はデコードやエンコードの際に自動的に行われるからです。 + +=head2 Your new toolkit + +(新しいツールキット) + +=begin original + +Add to your standard heading the following line: + +=end original + +あなたの標準ヘッダに以下の行を追加します: + + use Encode qw(encode decode); + +=begin original + +Or, if you're lazy, just: + +=end original + +あるいは、あなたが怠け者なら、単に以下のようにします: + + use Encode; + +=head2 I/O flow (the actual 5 minute tutorial) + +(I/O の流れ(実際の 5 分間チュートリアル)) + +=begin original + +The typical input/output flow of a program is: + +=end original + +典型的なプログラムの入出力の流れは以下のものです: + +=begin original + + 1. Receive and decode + 2. Process + 3. Encode and output + +=end original + + 1. 受信してデコードする + 2. 処理する + 3. エンコードして出力する + +=begin original + +If your input is binary, and is supposed to remain binary, you shouldn't decode +it to a text string, of course. But in all other cases, you should decode it. + +=end original + +もし入力がバイナリで、バイナリのままにしておく必要があるなら、これを +テキスト文字列にデコードするべきではありません。 +しかし、それ以外の全ての場合では、デコードするべきです。 + +=begin original + +Decoding can't happen reliably if you don't know how the data was encoded. If +you get to choose, it's a good idea to standardize on UTF-8. + +=end original + +もしデータがどのようにエンコードされたか分からないなら、デコードには +信頼性がありません。 +もしあなたが選択するのなら、UTF-8 に標準化するのはいい考えです。 + + my $foo = decode('UTF-8', get 'http://example.com/'); + my $bar = decode('ISO-8859-1', readline STDIN); + my $xyzzy = decode('Windows-1251', $cgi->param('foo')); + +=begin original + +Processing happens as you knew before. The only difference is that you're now +using characters instead of bytes. That's very useful if you use things like +C<substr>, or C<length>. + +=end original + +処理は今まで通りに行います。 +唯一の違いは、バイトではなく文字を使うことです。 +これは C<substr> や C<length> のようなものを使うときにとても便利です。 + +=begin original + +It's important to realize that there are no bytes in a text string. Of course, +Perl has its internal encoding to store the string in memory, but ignore that. +If you have to do anything with the number of bytes, it's probably best to move +that part to step 3, just after you've encoded the string. Then you know +exactly how many bytes it will be in the destination string. + +=end original + +It's important to realize that there are no bytes in a text string. Of course, +Perl has its internal encoding to store the string in memory, but ignore that. +If you have to do anything with the number of bytes, it's probably best to move +that part to step 3, just after you've encoded the string. Then you know +exactly how many bytes it will be in the destination string. +(TBT) + +=begin original + +The syntax for encoding text strings to binary strings is as simple as decoding: + +=end original + +テキスト文字列をバイナリ文字列にするための文法はデコード時と同じぐらい +単純です: + + $body = encode('UTF-8', $body); + +=begin original + +If you needed to know the length of the string in bytes, now's the perfect time +for that. Because C<$body> is now a byte string, C<length> will report the +number of bytes, instead of the number of characters. The number of +characters is no longer known, because characters only exist in text strings. + +=end original + +もし文字列のバイト数が必要なら、今がそれをする最良のタイミングです。 +なぜなら C<$body> はバイト文字列なので、C<length> は文字数ではなく、 +バイト数を返します。 +文字というものはテキスト文字列でのみ存在するので、もはや文字数というものは +わからなくなっています。 + + my $byte_count = length $body; + +=begin original + +And if the protocol you're using supports a way of letting the recipient know +which character encoding you used, please help the receiving end by using that +feature! For example, E-mail and HTTP support MIME headers, so you can use the +C<Content-Type> header. They can also have C<Content-Length> to indicate the +number of I<bytes>, which is always a good idea to supply if the number is +known. + +=end original + +And if the protocol you're using supports a way of letting the recipient know +which character encoding you used, please help the receiving end by using that +feature! For example, E-mail and HTTP support MIME headers, so you can use the +C<Content-Type> header. They can also have C<Content-Length> to indicate the +number of I<bytes>, which is always a good idea to supply if the number is +known. +(TBT) + + "Content-Type: text/plain; charset=UTF-8", + "Content-Length: $byte_count" + +=head1 SUMMARY + +(まとめ) + +=begin original + +Decode everything you receive, encode everything you send out. (If it's text +data.) + +=end original + +(扱っているのがテキストデータなら)受け取ったもの全てを decode して、 +送り出すもの全てを encode しましょう。 + +=head1 Q and A (or FAQ) + +=begin original + +After reading this document, you ought to read L<perlunifaq> too. + +=end original + +この文書を読んだ後、L<perlunifaq> も読むべきです。 + +=head1 ACKNOWLEDGEMENTS + +(謝辞) + +Thanks to Johan Vromans from Squirrel Consultancy. His UTF-8 rants during the +Amsterdam Perl Mongers meetings got me interested and determined to find out +how to use character encodings in Perl in ways that don't break easily. + +Thanks to Gerard Goossen from TTY. His presentation "UTF-8 in the wild" (Dutch +Perl Workshop 2006) inspired me to publish my thoughts and write this tutorial. + +Thanks to the people who asked about this kind of stuff in several Perl IRC +channels, and have constantly reminded me that a simpler explanation was +needed. + +Thanks to the people who reviewed this document for me, before it went public. +They are: Benjamin Smith, Jan-Pieter Cornet, Johan Vromans, Lukas Mai, Nathan +Gray. + +=head1 AUTHOR + +(著者) + +Juerd Waalboer <#####@juerd.nl> + +=head1 SEE ALSO + +L<perlunifaq>, L<perlunicode>, L<perluniintro>, L<Encode> + +=begin meta + +Created: Kentaro Shirakta <argra****@ub32*****> + +=end meta +