Data::Section::Simpleで__DATA__をカジュアルに使おう!
初めまして、@nqounetです。
2011年はYAPC::ASIAデビュー(参加という意味で)したので、アドベントカレンダーもデビューしたいと思います。
そんな新人の私でもカジュアルに使えそうな Data::Section::Simple を紹介します。
__DATA__
「ヒアドキュメント」って知ってますよね?
my $html = <<"EOM"; <html> <head><title>タイトル</title></head> <body>ボディ</body> </html> EOM
こんなヤツです。
古いCGIファイルを見るとよくありますよね?
でも、ヒアドキュメントを使っているコードが見難いと思ったことはありませんか?
思いますよね。
そんな時には「__DATA__」を使うと簡単にコードが見やすくなります。
#!/usr/local/bin/perl use utf8; use 5.008001; use strict; use warnings; use CGI::Simple; use Encode; my $q = CGI::Simple->new; my $html = do { local $/; <DATA> }; print $q->header( -type => 'text/html', -charset => 'utf8', ); print encode_utf8( $html ); __DATA__ <html> <head><title>タイトル</title></head> <body>ボディ</body> </html>
カジュアルにPerlを使うときの基本は、スクリプトはutf8で書いて、ファイルの2行目くらいに「use utf8;」を書いておきましょう。
もちろんですが、「use strict;」や「use warnings;」も忘れずに。
出力する時は「encode_utf8」が必要ですよ。
ヒアドキュメントを沢山使っている場合はどうするか、ですって?
ご安心ください。
そんな時に便利なモジュールが「Data::Section::Simple」です。
Data::Section::Simple
Data::Section::Simple を使うと、ヒアドキュメントを沢山使っている場合でも「__DATA__」を使ってコードを見やすく出来ます。
#!/usr/local/bin/perl use utf8; use 5.008001; use strict; use warnings; use CGI::Simple; use Data::Section::Simple qw(get_data_section); use Encode; my $q = CGI::Simple->new; my $header = get_data_section('header.html'); my $body = 'ボディ'; my $footer = get_data_section('footer.html'); my $html = join "", $header, $body, $footer; print $q->header( -type => 'text/html', -charset => 'utf8', ); print encode_utf8( $html ); __DATA__ @@ header.html <html> <head><title>タイトル</title></head> <body> @@ footer.html </body> </html>
いやー、便利ですよね〜。
え?
ヒアドキュメントの中に変数を使っているから動かせない、ですって?
ご安心ください。
そんな時はカジュアルにCPANを使って探しましょう。
Text::MicroTemplate::DataSection
Text::MicroTemplate::DataSection を使うと、さらにカジュアルに「__DATA__」を使える感じです。
このモジュールは、テンプレート機能(Text::MicroTemplate)とData::Section::Simpleを組み合わせて、簡単に使えるようにしたモジュールです。
#!/usr/local/bin/perl use utf8; use 5.008001; use strict; use warnings; use CGI::Simple; use Text::MicroTemplate::DataSection qw(render_mt); use Encode; my $q = CGI::Simple->new; my $html = render_mt('index.mt', { title => 'タイトル', body => 'ボディ', }); print $q->header( -type => 'text/html', -charset => 'utf8', ); print encode_utf8( $html ); __DATA__ @@ index.mt <html> <head><title><?= $_[0]->{title} ?></title></head> <body><?= $_[0]->{body} ?></body> </html>
いやー、簡単ですよね〜。
は?
使うモジュールがたくさんあって面倒、ですって?
ご安心ください。
そんな時こそカジュアルにCPANを使って探しましょう。
ウェブ・アプリケーション・フレームワーク
本格的なウェブ・アプリケーション・フレームワークでなくても、例えばMojolicious::Liteのような小さなフレームワークを使うと、useするモジュールの数が劇的に減って、かつ「__DATA__」も一層カジュアルに使えます。
#!/usr/local/bin/perl use utf8; use Mojolicious::Lite; get '/' => sub { $_[0]->render( template => 'index', title => 'タイトル', body => 'ボディ', ); }; app->start; __DATA__ @@ index.html.ep <html> <head><title><%= $title %></title></head> <body><%= $body %></body> </html>
いやー、シンプルですね〜。
気がつけば、ものすごくカジュアルにPerlが使えるようになりました。
カジュアルですが、流行りのフレームワークは自動的にstrictな環境になりますので、見た目以上にフォーマルですよ。
こんな感じで、どんどんカジュアルにPerlを使いましょう。
次は、risouさんです。