• ベストアンサー

require

if($name =~ /^a$/) {require './pl/a.pl';} elsif($name =~ /^b$/) {require './pl/b.pl';} ↑のような要領で大量にrequireを書いた場合は動作が重くなりました。 以下のようにした場合は、$nameの部分が読み込まれないみたいなのですが、どのようにすればいいのでしょうか? require './pl/$name.pl';

  • Perl
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「反映されない」ってどういう意味なんでしょうか? 何かメッセージは出ていませんか?

cocolink
質問者

お礼

再度確認してみましたところ、うまく動作しておりました。先ほどは500エラーになっていたのですが、どこか記入ミスをしていたのかも知れません。おかげ様で無事解決致しました。有難うございました。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

シングルクオートでは中の変数が展開されないんですけど.

cocolink
質問者

お礼

ご回答ありがとうございます。以下のようにもしてみましたが$nameの部分が反映されませんでした。基本もわかっていない素人で申し訳ございませんが、よろしくお願いいたします。 $type .= './pl/';$type .= $name;$type .= '.pl'; require $type;

関連するQ&A

  • requireの使い方のどこがおかしいのでしょう?

    言語はperlです。 789.cgiから456.plを呼び出したいのですが、シンタックスエラーが出てきます。 789.cgiのrequireに関する行をコメントにしたら実行されるのですが…。 requireを使わずに、サブルーチン自体を789.cgiの中に書き込むことには成功しているのですが、 イマイチrequireを使った呼び出しのコツがわかりません。 どなたかご教授下さい。 以下にスクリプトを示しておきます。 よろしくお願いします。 *****以下789.cgi***** #!/usr/local/bin/perl use CGI::Carp qw(fatalsToBrowser); require "456.pl"; $a=12; $b=15; $d="xxxxxxxx"; $d=&plus(); print "content-type:text/html\n\n"; print <<"HTML_HTML"; <html> <head> <title> ヒアドキュメント </title> <body> ***** <br> $d <br> ***** <br> $a <br> ***** <br> $b <br> ***** </body> </html> HTML_HTML ***********以下456.pl************ sub plus { my $a=10; my $b=10; $c=$a+$b; return $c; }

    • ベストアンサー
    • CGI
  • requireについて教えてください。

    こんにちは、require について教えてください。 require されるファイルの最終行は 1 を書くのが一般的ですが、 他の値を書くと何か問題があるのでしょうか? 以下の実験をしてみました。 -- require されるファイル array.pl -- #! usr/bin/perl -w use strinct; ['a','b','c',] -- 実行するスクリプト -- #! /usr/bin/perl use strict; my $array_ref = get_array_ref('array.pl'); print "$_n" foreach ( @{$array_ref} ); exit(); sub get_array_ref {   return eval {require $_[0]}; } -- 結果 -- a b c 結果はうまく行ったのですが、eval も含めてこの様な使い方は 間違っていませんでしょうか? よろしくお願いします。

  • Requireできない...

    requireされる側のファイルに、 $name = "A"; などと特定の文字A(仮に)を変数に代入しておくと、requireしたときにScript Errorになります。この1行というより、この文字Aを消すだけでエラーは解消されるのですが、これはどういう理由からでしょうか。 特殊な文字ではないので、よくわかりませんでした。

    • ベストアンサー
    • Perl
  • requireで同じライブラリを複数回、呼び出すとどうなるか

    perlでの話なのですがrequireを使って、 例えば、以下のようにした場合、 同じファイルを何回もコンパイルすることになるのでしょうか。 どなたか教えていただけないでしょうか。 @xx=(1,2,3); for(@xx){ require "xx.pl"; } どうしてもCGIがサーバーに与える負荷を軽減したいので、 無駄なコンパイルならば、一回だけrequireするようにしたいのです。

    • ベストアンサー
    • Perl
  • useとrequireでエラー

    初歩的な質問で失礼いたします。 下記の記述でプログラムを実行すると正常にプログラムが動きます。(省略以降は全く同一のプログラムです) ■実行問題なし1 #!/usr/local/bin/perl require 'cgi-lib.pl'; require 'jcode.pl'; --------省略--------------- ■実行問題なし2 #!/usr/local/bin/perl use strict; use DBI; --------省略--------------- しかし、下記の記述だとエラーが発生していまいます。 #!/usr/local/bin/perl use strict; use DBI; require 'cgi-lib.pl'; require 'jcode.pl'; --------省略--------------- エラーログは、下記の通りです。 Global symbol "$in" requires explicit package name at search.cgi line 21. Global symbol "$parameter" requires explicit package name at search.cgi line 23. Global symbol "$name" requires explicit package name at search.cgi line 23. Execution of search.cgi aborted due to compilation errors. requireとuseは同時に記述してはいけないのでしょうか? 同時に記述しないと目的のプログラムを実現する方法が大きく変わってきてしまうので、非常に困ってしまいます。 もし、ご存知の方がいらっしゃったら教えてください。 宜しくお願い致します。

  • require_once で読み込まれたか?

    初心者です。教えて頂けますか? require_once で読み込んだと思われるファイルの機能を使用したのですが、 機能した様子がありません。 require_once で読み込めない場合エラーが出るのでしょうか? 以下の様にしても駄目でした。 どの様にすれば良いでしょうか?よろしくおねがいします。 <?php $result = require_once("Auth/Auth.php"); if( $result == True ){ print("True"); } else { print("False"); } ?>

    • ベストアンサー
    • PHP
  • strict と require と グローバル変数

    また基本的なことをお伺いします。 ↓メインスクリプト(main.pl) ------------------------------ #!perl use strict; require("x.pl"); print "X = $x\n"; ------------------------------ ↓サブスクリプト(x.pl) ---------------------- our $x = "XXX"; ---------------------- これをそのまま、main.plを実行すると、 Global symbol "$x" requires explicit package name at main.pl line 4. のようにエラーが出ます。 この対処として、色々試したのですが、 例えば、次のようにすれば、とりあえず回避はできました。 ↓メインスクリプトにて、 ------------------------------ #!perl use strict; our $x; ←★ここで宣言を入れておく。 require("x.pl"); print "X = $x\n"; ------------------------------ <質問です> 1)この回避策は妥当でしょうか。他に正しい方法がありましたら、教えてください。 2)そもそも、use strictは、requireの展開よりも先に実行されてしまうものでしょうか。 以上、よろしくお願いします。 Win-2000sp4+ActivePerlのV5.8.7で使っています。

    • ベストアンサー
    • Perl
  • 自作関数  require_onceを書く場所

    関数を使い始めて間もないので、基本的な記述方法についてご教授願います。 以下のような書き方はしますか? //ファイル名Aには関数名A、ファイル名Bには関数名Bを記述 if(条件){    require_once("ファイル名A")    $変数x = 関数名A(引数y) }else{    require_once("ファイル名B")    $変数x = 関数名B(引数y) } もしくはこのように書くべきでしょうか? //ファイル名Cには関数名A、関数名Bを記述 require_once("ファイル名C")    if(条件){    $変数x = 関数名A(引数y) }else{    $変数x = 関数名B(引数y) }

    • ベストアンサー
    • PHP
  • Perl require 共通の変数 外部ファイル

    ファイルが多くなってきて、その中でも共通の変数があるので 外部ファイルにまとめたい・・・ ~test.pl~ #!/usr/bin/perl require("testcommon.pl"); print qq(Content-type: text/html\n\n); print <<END; <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=$CHARSET"> <title>外部CGIファイル読み込み</title> </head> <body> END print qq($test<br>$data<br>$NEW); print <<END; </body> </html> END exit; 1; ~testcommon.pl~ #!/usr/bin/perl $test = "テスト"; $data = "テストです"; $CHARSET = "UTF-8"; $NEW ="サーバー"; 1; まずこれが現在テスト中で サーバーAでは、これでいけているのですが、 サーバーBでは、これではいけず、 エラーログを見ると 「@INC~/usr/local/lib64/perl5~」 とでてます。これがどのような意味をささしているのかわからないです。 いつも1行目に書く「#!/usr/bin/perl」の部分を書き換えてみたのですが・・・ さらにサーバーBでは、ログファイルなど開く際、フルパスでないと開けません。 require("testcommon.pl");←これですと インターネットサーバーエラーとなってしまいます。 これはエラーログを見るとフルパスで指定と書いていたので、 require("/path/path/path/testcommon.pl"); のようにしました。 これで、一応表示はできたのですが、 testcommon.plで新しい変数を書き加えると、($NEW123 = "追加したい変数";) 表示されません。 またCHARSETでUTF-8を指定してますが、 更新や、再度ページに入ったりすると、 CHARSETの変数が反応していなかったりしています。ページでソースを確認すると 変数の部分が空欄になってます。 これは require("/path/path/path/testcommon.pl"); が読み込んでいなかったり読み込んでいたり もしくは、一度なにをしたのかわからないですが、このフルパスの場所に testcommon.plのファイルをおいて、そのときのままになっている など、原因、対処がわからず困っております。 ※というより結論としては、 共通の変数を1つのファイルでしようしたいということです。 ~common.pl~ $a = 123; $b = "テスト"; $c = 2; ~test1.pl~ $TEST = $a * $c; print "$b$TEST\n"; #結果「テスト246」 ~test2.pl~ $TEST123 = $a + $c; print "$TEST123$b; #結果「125テスト」 このような感じ・・・(+_+)

  • require_onceが動いていない

    Cache_Liteを使ってキャッシュ処理を組もうとしています。 実行すると、ブラウザ上には何も表示されない状態です。 試しにキャッシュ処理を除いた部分のPHP処理を実行すると、 その処理は正しく実行されることが確認できました。 いろいろ調べてみると、どうやらrequire_onceが動いていないであろうということに行き当たりました。 いろいろ試して見たのですが、なぜ、require_onceが動作していないのかわからずに先に進むことができない状態でいます。 どの部分を確認して試すべきか、教えていただけないでしょうか。 ■実行環境は以下の通りです。  OS:Windows XP Pro.  PHP: PHP5 5.1.4  サーバ: Apache 2.0.58 ■PHP,PEARは正常にインストールされています。  コマンドプロンプトでpear list を実行すると、  "Cache_Lite 1.7.2 stable"と表示されているので、  Cache_Liteそのものはインストールされています。 ■ソース --------------------------------------------------------- require_once('Cache/Lite.php'); //キャッシュ処理 $options = array( 'cacheDir' => '/tmp/cache', 'lifeTime' => 86400, 'caching' => true, 'automaticCleaningFactor' => 20, 'automaticSerialization' => true, 'pearErrorMode' => 'CACHE_LITE_ERROR_DIE' ); $cache = new Cache_Lite($options); $id = 'RTSK001'; if ($data = $cache->get($id)) {   //キャッシュがある場合の処理     } else { //キャッシュがない場合の処理 $Cache_Lite->save($data,$id); } ------------------------------------------------------ ■その他  ちなみに、このPHPはhtmlページよりSSIによって呼び出しています。  SSIによるPHPの呼び出しは動作しています。

    • ベストアンサー
    • PHP

専門家に質問してみよう