perl

Smart::Commentsでモジュールにサンプルコードを仕込む

ソースコードを読んでいると、関数の引数や戻り値の具体的な例がほしいと思うことがよくある。。そこで、実行可能なコメントを仕込むモジュールであるSmart::Commentsを使って、モジュール内にテストを兼ねたサンプルコードを仕込めばいいのではないかと考え…

perl Makefile.PL | cpanm # for devel requires

Makefile.PL自身のためのモジュールをどう管理するかが結構面倒なわけです。M::IのプラグインでいえばModule::Install::AuthorRequiresがあるのですが、これは単にインストールされていないモジュールを報告するだけで、結局インストールは手作業で行わなけ…

Text::Xslateで未設定の変数を検出する

hirose31さんの要望により、Text::Xslate 0.2013で未設定の変数を検出できるようにしました。といってもヘルパ関数を提供しただけで、実際にはtie hashを使った簡単なラッパークラスを用意しただけですが。 未設定の変数を使ったときに「FILL ME/$name」とい…

Simple zcat(1) in Perl with Compress::Raw::Zlib

Perlのzlibインターフェイスは沢山あってよく分からないが、単純に圧縮/解凍をするだけならCompress::Raw::Zlibがシンプルで良さそうだ。 これでzcat(1)を実装すると以下のようになる。 #!perl -w use strict; use Compress::Raw::Zlib; my $z = Compress::R…

YAPC::Asia Tokyo 2010で発表します

いよいよ今夜の前夜祭からYAPC::Asiaが始まりますね! 私は自作のテンプレートエンジンXslateについて話します。 How Xslate works ( 2010-10-16 10:00-10:40 at Main Hall) 予定としては、前半15分で使い方を説明するので、Xslateをまったくご存じない方で…

Let's use the /x modifier!

『Perl ベストプラクティス』はクセの強い本ではあるが、私のプログラミングスタイルが受けた影響は少なくない。なかでも、PBPによってPerlの正規表現の/x修飾子のすばらしさを知ったことは大きい。これはPBP以前は使おうと思ったことがなかったが、今となっ…

Xslateが特定の条件で落ちる件(fixed in 0.2009)

Xslateが特定の条件で落ちるという現象がいくつか確認されていました。 Xslateでテンプレート大きいと困った件 ←修正されました - pepponの日記 http://twitter.com/kaz_hosib/status/26527707914:twitter id:pepponさんの記事を参考に巨大なファイルを生成…

Shibuya.pm #14 でライトニングトークをしてきました

先週Shibuya.pm Tech Talk #14が開催されました。最近セキュリティホールを作りにくいミドルウェアに関心があるので、とてもためになりました。なかでも「バグがあってもセキュリティホールがあるよりははるかにマシ」というid:kazuhoさんの言葉が印象的でし…

MouseX::Foreign (a port of MooseX::NonMoose) released!

ずっとやろうと思っていてやっていなかったMooseX::NonMoose の Mouse版をようやく書き上げました。なかなか完成しなかったのは、いい名前が思いつかなかったのと、Mouse本体に組み込めるかどうかの検討をしたかったからです。検討の結果、Mouse本体に組み込…

Data::MessagePackをXslateのキャッシュ保存用に使ってみる

Text::Xslateのコンパイル済みコードは今まで独自フォーマットで保存しており、これはこれでデバッグしやすくて便利だったが、CLIアプリケーションではこのコンパイル済みコードのロードにほとんどの時間を費やす羽目になっていたのだった。そこで、速度が売…

クロージャにバインドされた値を見たい時

Moose/Mouseのmethod modifiersのようにクロージャを多用するプログラミングをしていると、バインドしている変数の中身も含めてDeparseしたいことがよくあります。 そういうケースでは、Data::Dump::Streamerが使えます。 #!perl -w use strict; use feature…

Re: Perlスクリプトの一行目には何と書くべきなのか

Re: Perlスクリプトの一行目には何と書くべきなのか もしCPAN形式でスクリプトを配布するなら、それは#!/usr/bin/perlないし#!perlとするべきで、env(1)を使うべきではないと思います。 CPAN形式のディストリビューションでは、インストールするスクリプトの…

use_xshelper() # M::I::XSUtil 0.30 feature

STATIC_INLINE の話にあるオレオレXSヘルパヘッダをModule::Install::XSUtilから使えるようにしました。 中身はというと、perl.hなどのXSで必要なヘッダファイルをインクルードして、Devel::PPPortで未サポートのPerl APIを定義して、あとはちょっとだけ便利…

XSでCの文字列操作関数を使用するべきでない理由

またはRe: PerlとC言語の型に対応する値への相互変換 XSでCの文字列操作関数の使用はなるべく避けるべきです。Cの文字列操作関数は危険で使いにくいものです。その代わりに、Perlが提供する安全で使いやすいSV APIを使ったほうが余計なことを考えずに済みま…

テンプレートエンジンの自動エスケープ機能について

最近Xslateの自動エスケープ機能について考えていたのですが、これは「この機能によって安全性が高まる」というものではなく(結果的にそうでないものより安全ではありますが)、むしろテンプレートエンジンとしてはこれこそ正しい振る舞いなのではないかと…

Xslate 0.1058の新機能

HTMLのソースを返す関数で正しくHTMLソースを出力させるには、戻り値をmark_raw()する必要があります。さもないと、自動エスケープ機構が働いてしまうからです。 このために、0.1057以前のXslateはわざわざラッパー関数を書く必要がありました。しかし、繰り…

Xslateのベンチマークについて

id:tokuhiromたちがベンチマークをいろいろいじったのですが*1、ベンチマークにリアリティを持たせるのはなかなか難しいですね。というわけで、ごちゃごちゃになっていたベンチマークスクリプトを、想定する環境を変えて二つに分けました。一つは、"rich env…

How slow "HTML escape" is?

そういえばXslateのHTMLエスケープってどのくらい遅いのだろか、と思い、変数展開のベンチマークに「HTMLエスケープなし」を加えて測ってみたところ、驚くべき結果になった。 以下の"xslate"が<: $value :>で、"xslate/raw"が<: $value | raw :>の速度の比較である。benchmark/interolate.p</:></:>…

Perl6とXslateの関係

Xslateのデフォルトテンプレート構文であるKolonは、Perl5とPerl6からいくつかの特徴を借りてきています。そこで、KolonのPerl6ライクな構文をちょっと紹介します。なお、以下のコードは直接端末にコピー&ペーストで実行できます。実行はRakudo Starをビル…

Xslate.org!

[twitter:@tokuhirom]と[twitter:@lestrrat]さんが中心としたShibuya.pmの面々のおかげでxslateのウェブサイトができました!ありがとうございます! http://xslate.org/ 今後のロードマップとしては、八月半ばに安定版*1の0.20000、YAPC::Asiaに向けて1.000…

How fast system calls are?

「システムコールは遅い」とよくいわれるけれども、実際どのくらい遅いのかというのは測定したことがなかった。しかし実際に測ってみると、システムコールだからといって、Perlの他の操作と比較して必ずしも遅いとは限らないようだ。特に、time(2)*1は非常に…

Yokohama.pm#6 x Perl Casual#3でLTしてきました

Yokohama.pm#6 x Perl Casual#3でLT枠をいただきました。三行でまとめると、「Any::Mooseは効率を上げるために使えるツールなので、試してみることをお勧めしますよ!」ってことです! Any::Moose入門 参考文献: Moose - Japan Perl Association ドキュメン…

Oh, Class::Accessor 0.34 has its own import()!

use base qw(Class::Accessor::Fast Exporter);としているコードでエクスポートが利かなくてはまった。既存のコードは動いているので原因を調べたところ、Class::Accessorの最新版を使ったのがよくなかったらしい。つまり、Class::Accessorの最新版(0.34)でM…

Get the width and height from images

Smartyって画像サイズを自動的に<img />に埋め込んだりするんですね。 というわけで、Perlで画像サイズを得るのに何が速いかベンチマークしてみました。 結果: Image::Info/1.30 Image::Size/3.221 Imager/0.75 GD/2.45 Rate GD Imager Image::Info Image::Size GD…

Xslate now cooperates with Data::Section::Simple

[twitter:@typester]さんがText::MicroTemplate::DataSectionを書いて気になっていたところ、[twitter:@kazeburo]さんからもXslateの対応について要求があったので、version 0.1043でData::Section::Simpleと協調するようにしました。 ただし、依存モジュー…

MouseX::StrictConstructor released!

MouseX::StrictConstructorを書きました。 http://search.cpan.org/dist/MouseX-StrictConstructor (coming soon) http://github.com/gfx/p5-MouseX-StrictConstructor strict constructor自体はずいぶん前から実装されていたのですが*1、Mooseとの互換性を…

Clevyに関する覚書

http://github.com/gfx/p5-Text-Clevy XslateのHEADではApp::xslateからも使えるようになってます*1。 コマンドラインから: $ xslate -E Text::Clevy -e 'Hello, {$ARGV.0} world!' Clevy Hello, Clevy world! $ xslate -E Text::Clevy -e '{$smarty.now|dat…

HTML form management on Xslate

@typesterさんの指摘を受けて再考中。確かに、気軽にrawを書くようになると、結局「うっかりraw」をする可能性が生じて安全性が下がります。テンプレートではrawを使うべきではない、ということを前提にドキュメントと記事を書き直しました。 参考: @fujiwa…

Smarty compatible template engine on Xslate

Xlsateの基本機能が安定してきたので、Smarty互換のパーサを書き始めました。 http://github.com/gfx/p5-Text-Clevy "smart" -> "Smarty" からの連想で、"clever" -> "Clevy" という命名です。 Smartyは非常に機能が多く、パーサーだけでは対応できないため…

Perl 5.13.2 released!

Perlの開発版である5.13.2がリリースされた。 http://search.cpan.org/dist/perl-5.13.2/ 今回はかなり意欲的な変更を含んでいる。 文字列置換における/r修飾子の導入。s/foo/bar/r は元の文字列を変更せず、置換後の文字列を返す。これは特に、mapと共に使…