2008年07月02日 03:00 [Edit]

perl - Tie::Expression - Let any %hash interpolate any expression.

cpan

今まで私がCPANizeしたモジュールの中で、最も短いかも。

404 Blog Not Found:perl - qq(@{[ Interpolate->any->given('expression') ]})

spiritlooseのはてなダイアリー - 文字列中で式を実行
結果は
print "@{[$foo->bar]}";
print "${\$foo->bar}";
こんな感じ。

これじゃかっこいくないので。


というわけで、こうです。

use Tie::Expression;
tie my %expression, 'Tie::Expression';
print "PI = $expression{ 4 * atan2(1,1) }.\n";

仕組みは、呆れるほど簡単です。これしかない。

package Tie::Expression;
use warnings;
use strict;
our $VERSION = sprintf "%d.%02d", q$Revision: 0.1 $ =~ /(\d+)/g;
sub TIEHASH($) { bless \eval { my $scalar }, shift }
sub FETCH($$) { $_[1] }
1;

同封のPercent::Underscoreを使えば、さらに手軽です。

use Percent::Underscore;
print "PI = $_{ 4 * atan2(1,1) }.\n";

Rubyの#{ ... }よりたった一文字長くなりますが、それを言えばPerlはsigilで必ず一文字損してますし。

Enjoy!

Dan the Perl Monger


この記事へのトラックバックURL

この記事へのトラックバック
Tie::Expressionモジュールは、文字列中で式を実行したい時に使えます。 http://blog.livedoor.jp/dankogai/archives/51074461.html 小飼氏は『仕組みは、呆れるほど簡単です。』との事でしたが・・・私にとっては、呆れるほど難しいかったので調べてみました。 モジュール
[Perlノート] Tie::Expressionモジュールの私的説明メモ【燈明日記】at 2008年07月02日 22:53
この記事へのコメント
$VERSIONはその書き方がおしゃれなんでしょうか?
Posted by hassylin at 2008年07月03日 19:32