Perl の文字列の内側の記事の補足

前回の記事が期せずしてホッテントリ入りしたので,ちょっとマズいと思い。

  • 前回の記事が難しいと思ったとしても,それは恥ずべきことではありません。
    • あくまで Perl の内部構造の話ですから*1
  • ただ,Perl で文字列を扱う/文字コードを扱うのは難しい,と思われるのは本位ではないです。
    • というのは,本当は,難しく考えなくでも動くように作られてますから。

拙い表現なもので上から目線に感じられたらごめんなさい。


もうちょっと詳しく書きます。

  • Perl の文字列の扱いは,なるべく後方互換性を確保しながら,進化してきました。
  • そのため,いろいろな思想,組み方でも動くようにできています。たとえば
    • 文字コード,何それ,気にしない
    • すべてバイナリ列だとみなす(上とほぼ同じ意味ですが)
    • 内部コーディングを EUC-JP octet stream にする
    • 内部コーディングを UTF-8 octet stream にする
    • 内部コーディングを UTF8 flagged string にする
    • 内部では「文字列」を扱う,必要に応じて外部入出力では bytes stream / some-encoding octet stream に変換する
    • etc, etc, ...
  • つまり TMTOWTDI。どのやり方が「間違っている」ということではありません。
  • ただし,後方互換性を「なるべく」確保しつつ,「よりよい扱い方」ができるように「進化・変化」してきています。
  • ですから legacy な書き方をしていると,「進化」にそぐわない部分で壁にぶつかる可能性があります。
    • ぶつかってから色々調べるのでも全然遅くないです。理解も深まります。
  • 根っこの思想(←私自身まだきちんと整理できていないのですが,いつか書きたいです*2)さえ理解すれば,文字列処理機構なんて空気のようなものです。
    • そして呼吸をするがごとくコードを書けるように,様々な便利な機構が用意されています,ようです。


私自身,

  • Perl 5 になっても長い間 4 Perl を使ってきましたし
  • Encode モジュールがでてきても長い間 jcode.pl を使ってきましたし
  • utf8 flag って頭の中がハッキリするから便利だーと思ってきましたし

それでも,それぞれのフェーズでうまく動くプログラムを書くことができました。それは私の技量というより,Perl の包容力のおかげでした。

そんなちょっとした先輩気取りから Perl newbies への助言と思っていただければ幸いです。


私は,いまさらながら腰を据えて perlunicode, perluniintro, perlunitut, perlunifaq, perluniadvice を読み込んでいこうか,と考えているところです。

さぁエクスキューズは書いたぞー。

*1:さまざまな code fragments でテストしつつ,根本的メカニズムを帰納的に推測して理解を深めるタイプなので,どうしても現象面から内部構造について書いてしまいます。勉強するのなら,よく書かれたドキュメントを読むほうが大事だと思います(変な内部知識や偏見に染まらないので)。

*2:私に限らず,わかっている人々が書くのが理想ですね……「http://trombik.mine.nu/~cherry/w/index.php/2008/02/20/1158/catalyst-manual-tutorial-utf8」等々に期待!