• ベストアンサー

useのあとに$変数を置けますか?

いまは外部pmプログラム(tensa.pm)を use tensa; としています。 これを変数に置き換えることはできますか? $tensa = tensa.pm; use $tensa; とやったらエラーが出てしまったのですが・・・。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

直接はできません。なぜなら、useは中間コードへのコンパイル時に行われるものであり、そのときには変数の内容を参照することはできないからです。 ただし抜け道はありまして、 use strict; my $module = "CGI"; eval qq!use $module!; print $CGI::VERSION; のように "use モジュール名" という文字列を evalしてやることで目的のことはできます。 なお、UNIVERSAL::require というモジュールをuseすることにより、 "モジュールを表す文字列/変数"->use で、動的にuseすることが可能になります。 ただしこれは標準モジュールではないので、CPAN等から入手する必要があります。

参考URL:
http://search.cpan.org/~mschwern/UNIVERSAL-require-0.10/lib/UNIVERSAL/require.pm
Scotty_99
質問者

お礼

回答ありがとうございました。疑問が解消されました。 そんな方法があるなんてすごいですね。 なんでそんな詳しく知っているのでしょう? 私はアマチュアですが、そんな技術つけたいですね。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

> そんな方法があるなんてすごいですね。 > なんでそんな詳しく知っているのでしょう? > 私はアマチュアですが、そんな技術つけたいですね。 日本にだって Perl Hackerはたくさん居ますよ(わたしはとてもそこには 入りません)。そういう人はblogを良く書いていたりしますので、そういったところで情報を集めておくと役に立つこともあります。 とりあえずはてなダイアリーにはごろごろいらっしゃいますから、暇なときにでも見てみては? 後は英語でも頑張ってドキュメントを読む(笑) perldoc.jpというところに日本語訳されたものが(全体の一部分ですけど)ありますから、perlfaqあたりを読んでみると良いでしょう。

参考URL:
http://perldoc.jp/docs/perl/5.6.1/
すると、全ての回答が全文表示されます。
回答No.1

出来ないと思います。 ロードされるタイミングの問題ですから、 requireならいけると思います。 #素朴な疑問なのですが、なぜ変数なのでしょう・・。

Scotty_99
質問者

お礼

回答ありがとうございました。疑問が解消できてよかったです。 >requireならいけると思います。 そうなんですよね。変数の問題が起きてしまって。 >#素朴な疑問なのですが、なぜ変数なのでしょう・・。 他人が書いたプログラムを改造しているのですが、 記述のルールでrequireなどすべて変数で表示されて いるので統一したいと思いました。 必要のないことなんですよね。

すると、全ての回答が全文表示されます。

関連するQ&A