今回は,Perl用のライブラリとして,YAML.pm,YAML::Syck.pm,YAML::XSの3つのライブラリを紹介します。
YAML.pm
YAML.pmはPerlで実装されたYAML用ライブラリです。作者のIndyはYAML仕様の策定者です(注1)。
| ダウンロード | http://search.cpan.org/CPAN/authors/ id/I/IN/INGY/YAML-0.66.tar.gz |
|---|---|
| ドキュメント | http://search.cpan.org/~ingy/ YAML-0.66/lib/YAML.pm |
| バージョン | 0.66 |
| 作者 | Brian Ingerson,Ingy döt Net |
- 注1
- そのわりには,YAML.pmは仕様をあまり満たしていません。
インストール
インストールは,管理者権限で「cpan YAML」を実行するだけです(リスト1)。
リスト1 YAML.pmのインストール
$ sudo cpan YAML
使い方
YAML.pmの基本的な使い方は,リスト2のとおりです。YAML.pmが提供するのは次の2つだけであり,YAMLストリームの読み込みはできません。
- YAML::Load($string)
- YAMLドキュメントを読み込む
- YAML::Dump($data)
- データをYAMLドキュメントに変換する
リスト2 YAML.pmの基本的な使い方(ex-yamlpm.pl)
use strict;
use YAML ();
use Data::Dumper ();
## YAMLドキュメントの読み込み
my $filename = "example.yaml";
open(IN, $filename) or die("cannot open file.");
read(IN, my $input, (-s $filename));
close(IN);
my $ydoc = YAML::Load($input);
print Data::Dumper::Dumper($ydoc);
## または
## my $ydoc = YAML::LoadFile($filename);
## データをYAMLドキュメントへ変換
print YAML::Dump($ydoc);
タグを変更する
YAML::Syck.pmでタグを変更する方法はないようです。
日本語の扱い
日本語でも問題なく使えるようです。
不具合
筆者が試した限りでは,以下のような不具合がありました。
- YAML::Load()
- 8進数や16進数が解釈されない
- 「null」が解釈されず,文字列の「"null"」となる
- 「true」「false」「yes」「no」「on」「off」が解釈されず文字列のまま
- 日付や日時(timestamp)が解釈されず文字列のまま
- ルート要素がフロースタイルやスカラーだとエラー
- マッピングのマージが未サポート
- マッピングのキーに日本語を指定するとエラーになる場合がある(リスト3)
リスト3 日本語をキーにするとエラー
- 姓: フグ田
名: サザエ
その他
YAML.pmではパース後のスカラー値はすべて文字列になります。たとえば「[123, 3.14, true]」というYAML文字列をパースすると「['123', '3.14', 'true']」という結果になります。これはYAML.pmの仕様であり,Perlが文字列も数値も区別しないという言語仕様のため,これでも使う上では問題ないそうです。

