読者です 読者をやめる 読者になる 読者になる

Quote::Codeで Rubyっぽく式展開

perl

Quote-Code-1.01 - quoted strings with arbitrary code interpolation - metacpan.org

はじめに

Perlの文字列中で関数等の結果を展開するとき、ArrayRefで
囲んでそれをデリファレンスする必要がありますが、それを
Rubyっぽく書けるようにしてくれるモジュールです。
ドキュメントを読むと効率的であるとも書いています。
インストールには Perl 5.14以降が必要です。

コード

'qc'で該当の文字列を囲み、展開したい部分を '{}'で囲います。

#!perl
package Obj;
use strict;
use warnings;

sub say {
    my $class = shift;
    my $arg   = shift || 'no message';
    "$arg";
}

1;

package main;
use Quote::Code;

my $hoge = 'hogehoge';

print "This is @{[ Obj->say('traditional style') ]}, $hoge!!\n";
print qc"This is { Obj->say('qc style') }, $hoge!!\n";

実行結果

'{}'に入れないと展開されないので、今までどおり使ってしまうと危険です。

This is traditional style, hogehoge!!
This is qc style, $hoge!!

おわりに

標準でこんな機能欲しいなぁと思わせてくれるモジュールでした。