YAML::Anyにおもねる場合のUTF8フラグ付与

| コメント(0) | トラックバック(1)

Arkによるサンプルアプリケーションですが、病気明けのリハビリを兼ねて、純モデル部分の実装イメージを一通り作りました。といってもトランザクションにすべきところを単純順次処理にしていたりと、まだまだ抜けはいっぱいあります。それが済めばようやくArkとModelの話が出来そうです。

http://eorzea.asia/links/script/simplelinks.cgi
スクリプト(以前のものとほぼ同じで、CGIでArkを稼働したもの)
examples/app/p5-ark-sample-simplelinks/tool/initialization.pl
DBに食わせるコマンド用スクリプト
examples/app/p5-ark-sample-simplelinks/SimpleLinks.data.yml
実際に食わせる元ネタ

上記は、CLIでYAMLからDBに突っ込んだウェブサイトの、最初(ID = 1)のものを表示した結果です。主に負のベクトルを持つ人徳の成せる業(笑)か、会社の後輩に「本当にArkで動かしているのか、単にそれっぽいYAMLファイルをベタに表示しているだけではないのか」というあらぬ疑いを掛けられたので、念のため補足しておきます。

ところで、基本的にYAMLはYAML::Syckでのみ読み書きする人生を送っていたのですが、ちょっと色気を出してYAML::Anyに対応しようとして、UTF8フラグ周りで足下をすくわれました。

つまづいたのは、何も考えずに使っていたら「たまたま」何もせずにエンコードをよしなに取り計らってくれるようなYAML::Anyの採用順が働いていたという点です。食わせるデータが腐っていたので環境を変えたらDBの作成・検索に失敗していたという、何とも情けないことをしてしまいました。委細は以下の通りです。

ものぐさ党員のUTF8フラグ付与方法

Perlのエンコーディング周りの鉄則は、どこでも書かれていることですが、入れるときにデコード・出すときにエンコードです。しかし、都度そのようにデコードして回るのが大変なことがあります。具体的には、正に今回のようなYAMLで設定を読むような場合です。

対応しなければならないと思ったという記憶はありますが、前述の通り、すっかり忘れてしまった上に、忘れたままでも動いていたという恐ろしい状態が続いていました。流石にそれでは環境を変えて動かなくなるのは当然です。

ということで、まだYAML系全種の対応をテストしたわけではありませんが、取り敢えずそれっぽい処理を入れて、いくつかの環境(YAML::Anyにより採用されるいくつかのモジュール)で問題なく動くような振り分けを(examples/app/p5-ark-sample-simplelinks/tool/initialization.plへ)入れておきました。要は%INCを見て、YAML::Anyが選出したYAML処理モジュールを判別しているということです。

なお、補足ですが、YAML::Syckでlocal $YAML::Syck::ImplicitUnicode = 1;するという方法が一番楽です。ところが無印YAMLなどではそれらのスイッチはありませんので、これもまた慣用句である「一旦Dumpしてutf8::decodeしてそれをLoadする」という方法を採っています。いずれも、いちいちバイト列をUTF8文字列にせずに、YAMLファイルを読んでPerlのデータ構造体にした時点で、各要素がUTF8文字列になっていると、エンコード周りの記述を散らかさずに済むという利点があります。

トラックバック(1)

病み上がりで本調子でなかったのかも知れません。などとさり気なく逃げ道を作りつつ、... 続きを読む

コメントする

筆者"Gardejo"について

  • Twitter: @gardejo
  • GitHub: gardejo
  • CodeRepos: gardejo
  • CPAN: MORIYA

このサイトについて

Eorzea System Worksは、架空のシステム開発結社です。

FF14.name (FinalFantasyXIV.name)では、アヴァター(プレイヤーキャラクター)の管理システムやイベント出欠・リマインダシステムや、リンクシェル(LS)運営・管理システムやDKPシステムなどを設計・開発・公開する予定です。

関連サイト

関連サイトでは、他にもFF14に関連するサイトをいくつか紹介しています。

リンク, トラックバック歓迎

このブログへのリンク(どのページでも構いません)やトラックバックを歓迎します。

設計・開発・運用の参考にさせていただきますので、コメントもお気軽にお寄せください!

個別の記事に対するご意見などのほか、目安箱もご用意しています。

このブログ記事について

このページは、Gardejoが2009年8月14日 00:24に書いたブログ記事です。

ひとつ前のブログ記事は「ようやく快気してみたら世の中が変わっていた件」です。

次のブログ記事は「YAML::Anyの使い方の訂正」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

2014年2月

            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28  

やや真面目なサイト