Data-Section-Simple-0.02 > Data::Section::Simple

名前

Data::Section::Simple - Read data from __DATA__

Data::Section::Simple - __DATA__セクションからのデータの読み出し

概要

  use Data::Section::Simple qw(get_data_section);

  # Functional interface -- reads from caller package __DATA__
  my $all = get_data_section; # All data in hash reference
  my $foo = get_data_section('foo.html');

  # OO - allows reading from other packages
  my $reader = Data::Section::Simple->new($package);
  my $all = $reader->get_data_section;

  __DATA__

  @@ foo.html
  <html>
   <body>Hello</body>
  </html>

  @@ bar.tt
  [% IF true %]
    Foo
  [% END %]
  use Data::Section::Simple qw(get_data_section);

  # 関数インタフェース -- 呼び出し元パッケージの __DATA__セクションからの読み出し
  my $all = get_data_section; # All data in hash reference
  my $foo = get_data_section('foo.html');

  # オブジェクト指向 - 他のパッケージからの読み出しも可能
  my $reader = Data::Section::Simple->new($package);
  my $all = $reader->get_data_section;

  __DATA__

  @@ foo.html
  <html>
   <body>Hello</body>
  </html>

  @@ bar.tt
  [% IF true %]
    Foo
  [% END %]

説明

Data::Section::Simple is a simple module to extract data drom __DATA__ section of the file.

Data::Section::Simpleはファイルの __DATA__セクションから データの抽出を行うシンプルなモジュールです.

LIMITATIONS

As the name suggests, this module is a simpler version of the excellent Data::Section. If you want more functionalities such as merging data sections or changing header patterns, use Data::Section instead.

This module does not implement caching (yet) which means in every get_data_section or get_data_section($name) this module seeks and re-reads the data section. If you want to avoid doing so for the better performance, you should implement caching in your own caller code.

名前が示すとおり, このモジュールは, 優れたモジュールである Data::Sectionを シンプルにしたものです. もしデータセクションの統合やヘッダパターンの 変更など, より多くの機能を利用したい場合は代わりに Data::Sectionを 利用してください.

このモジュールはキャッシュ機能を(まだ)実装していません, つまり get_data_section , get_data_section($name)を行うたびに, データセクションの探索と 再読込が行われます. このことを回避し, パフォーマンスを向上させたいので あれば, あなたのコード側でキャッシュ機能を実装すべきです.

バグ

If you data section has literal __DATA__ in the data section, this module might be tricked by that. Although since its pattern match is greedy, __DATA__ appearing before the actual data section (i.e. in the code) might be okay.

This is by design -- in thoery you can tell the DATA handle before reading it, but then reloading the data section of the file (handy for developing inline templates with PSGI web applications) would fail because the pos would be changed.

If you don't like this design, again, use the superior Data::Section.

もしデータセクション内に __DATA__というリテラルが存在したら, このモジュールはそれに騙されてしまいます. しかしパターンマッチは最長マッチで 行うので, __DATA__が, 実際のデータセクションより前に (すなわち i.e. コード内)出現すれば, 問題ないでしょう.

これは設計の問題です -- 理論的にはデータを読み取る前に DATAハンドルにtell することは可能ですが, ファイル(PSGIウェブアプリケーションの開発時 のお手軽なファイル内テンプレート)のデータセクションの再読込に失敗することに なります. なぜなら位置が変わってしまうからです.

もしこの設計が好まないのであれば, 繰り返しになりますが, より高機能な Data::Sectionを利用してください.

作者

Tatsuhiko Miyagawa <miyagawa@bulknews.net>

コピーライト

Copyright 2010- Tatsuhiko Miyagawa

The code to read DATA section is based on Mojo::Command get_all_data: Copyright 2008-2010 Sebastian Riedel

Copyright 2010- Tatsuhiko Miyagawa

DATAセクションからの読み出しのコードは Mojo::Commandの get_all_dataを ベースにしています: Copyright 2008-2010 Sebastian Riedel

ライセンス

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

SEE ALSO

Data::Section Inline::Files