言語別 YAML用ライブラリ徹底解説

第5回 Perl編

この記事を読むのに必要な時間:およそ 2.5 分

今回は,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が文字列も数値も区別しないという言語仕様のため,これでも使う上では問題ないそうです。

著者プロフィール

桑田誠(くわたまこと)

プログラマー。Javaに対するLL,XMLに対するYAMLなど,複雑なことをシンプルにするような技術に興味をもつ。

URLhttp://www.kuwata-lab.com/

コメント

  • Re:

    >作者のIndy
    ingyじゃ?

    Commented : #1  とおりすがり (2008/11/08, 03:26)

コメントの記入