アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。

Perlでサブルーチンを呼び出す場合、 &hogehoge; としますが、
このhogehogeの部分に変数を持っていきたいのですが、
やり方が分からず困っております。
試しに &{$hensu}; とやってみましたが、動きませんでした。

何かやり方はありますでしょうか。
解決策をご存じの方、ご教授よろしくお願いいたします。

A 回答 (5件)

Linux マシンで(bashから)これ試してみたら無事 Hello が出ましたよ。



perl -Mstrict -e 'my $name = "mysub"; my $s = \&{$name}; &$s("Hello"); sub mysub {print "$_[0]\n"}'

Perl のバージョンは v5.8.6 です。あと先にも書いた方法ですが、 eval 使ってもできましたよ。

perl -Mstrict -e 'my $name = "mysub"; eval qq(&$name("Hello")); sub mysub {print "$_[0]\n"}'

これはどちらも strict です。エラーは一切出ません。
    • good
    • 0
この回答へのお礼

遅くなり申し訳ありません。
参考になりました。
ありがとうございます。

お礼日時:2006/01/18 10:56

{


no strict "refs";
#必要な処理
}

・・・と、ブロックで囲んで必要な部分のみ無効にしてしまうとか。
    • good
    • 0

サブルーチンへのリファレンスをハッシュに設定して、それをコールするのが素直と思われます。

こんな感じ:

use strict;
sub hogehoge( $ ){ print 'msg: ', $_[0], "\n"; }
my %Proc = ( 'hoge' => \&hogehoge );
my $call = 'hoge';
$Proc{ $call }->( 'test' );
    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳ありません。
この方法を基にプログラミングできました。
誠に有り難うございました。

お礼日時:2006/01/18 10:55

現在 Perl 5.8.6 で試してみましたが、&{$hensu} の方法で呼び出せました。

&{$hensu}() も同じです。

これがだめなら eval を使えばいいと思います。

例)
$hensu = 'hogehoge';
eval "&$hensu;";

この回答への補足

ご回答ありがとうございます。

#1さんの補足に書きましたが、strictモードでの状況下でした。
失礼いたしました。

補足日時:2005/12/16 20:09
    • good
    • 0

がると申します。



Perlの5.6系ですと、

#!/usr/bin/perl -w
sub foo
{
print "aaa \n";
}

my $a = "foo";
&{$a}();

というプログラムでちゃんと起動するのですが。
このプログラムを実行されるとどんな感じになりますでしょう?

この回答への補足

ご回答ありがとうございます。

失礼いたしました。
strict モードでの状況で動かないようです。
strict なしで動かしてみたところ、動作しました。
strict の場合、
> Can't use string ("hogehoge") as a subroutine ref
> while "strict refs" in use at index.cgi line 52.
と出てしまい、サブルーチンが実行されません。
perlのバージョンは5.8.5です。

strictで同じようなことを行える方法はありませんでしょうか?

補足日時:2005/12/16 20:02
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!