• ベストアンサー

use と require の違いが分かりません。

use と require の違はなんでしょうか? また、require を2度使うとエラーになってしまうのは なぜでしょうか? 教えてください、よろしくお願いいたします。

  • mami3
  • お礼率87% (7/8)
  • Perl
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

require はライブラリから関数をロードする実行文です。 その(requireがある)行に到達したときにロードが実行されます。 use は、どちらかというと宣言文に近い。その行に到達する わけではなく、最初に use としたライブラリを全てロードします。   use Module; は、以下と全く等価です。   BEGIN { require "Module.pm"; import Module; } また、2度使うとエラーになる理由は、   「require が、そのように作られているから」 です(→参照URL)。

参考URL:
http://www.cec.co.jp/usr/hasegawa/Docs/perl-jman/perl-4.019/perl_137.html
mami3
質問者

お礼

use と require の違い分かりました。ありがとうございました。 また、URLも参考になりました。 素早い回答ありがとうございました。

mami3
質問者

補足

参照したURLに、「同じファイル名では、2度インクルードできない」 とあいましたが、全く別のファイル名でも2度 require することは 出来ないのでしょうか?

その他の回答 (1)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

別々のファイルに対してであれば幾つでも require できますよ。 require "Module_A"; require "Module_B"; require "Module_C";  …

mami3
質問者

お礼

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

mami3
質問者

補足

私もそれが出来ると思っていたのに、エラーとなってしまいました。 原因は別のところにあるのかしら? この行をコメントにするとエラーが無くなり、 モジュールからもエラーが出ないので、わからなくなっていました。

関連するQ&A

  • use と requireの違いは?

    use と require(やinclude)の違いは何でしょうか? requireの使い方はほぼ理解できていると思っていますが、useの使い方がわかりません。 useを使っているところでrequireを使えたりするのでしょうか? phpの公式をみてもいまいちピンときません。 useについてわかりやすく教えていただけないでしょうか?

    • 締切済み
    • PHP
  • 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したライブラリにuseを記入

    メール送信のプログラムを作っています。 本体のプログラムmain.cgiから、 メール送信用のサブルーチンを記入した、 email.plというのを require 'email.pl'; とメール送信が必要な場合だけ読み込んでいます。 この email.plに use Encode; や use Jcode; のようにuse文を記入するのは、 Perlの作法としては適切なのでしょうか。 それともuse文はmain.cgiに記入するのが適切なのでしょうか。 email.plにuse文を記入しても動きますし、 main.cgiにuse文を記入した場合とベンチマークを比べたりしましたが あまり変わらないのですが、 useはコンパイルしたときに実行されるので、 実行のときに読み込まれるrequireしたライブラリに記入していいのか不安なのです。 私としては必要なときだけ読み込みたいので、 email.plにuse文を記入したいのですが。 どうぞよろしくお願いします。

  • 条件分岐によってuseやrequireをする

    ある条件を満たすときだけuse(あるいはrequire)をするということはどうしたらできますか。例えば、次のように、perlの版を判別してuseする/しないを分岐したいのですが、ifではできません。目的は、jperl環境で作成したプログラムを最新のperl環境に移行することです。 if ($]=~/^5\.12/){ use encoding 'cp932'; use Encode; use subs qw(length); sub length { CORE::length(encode('cp932',shift)); }    #以下色々な関数を定義する }

    • ベストアンサー
    • Perl
  • 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の使い方のどこがおかしいのでしょう?

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

    • ベストアンサー
    • Perl
  • packageの中からのrequireがうまくいかない

    .pmファイルの中でrequireして別の.plファイルの中の関数を呼びたいのですがうまくいきません。 下記の例でmain.plを実行すると Undefined subroutine &module1::module2::hyoji のようになってしまいます。 どのようにしたら動くでしょうか --main.pl-- use module1; testprint(); --module1.pm-- package module1; sub testprint{   require "module2.pl"   hyoji(); #エラー    module2::hyoji(); # エラー   module1::module2::hyoji(); #エラー }1; module2.pl package module2; sub hyoji{   print "ZZZ"; }1; --main2.pl-- ちなみにこれは動きます require "module2.pl"; module2::hyoji();

    • ベストアンサー
    • Perl
  • 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
  • use strictとグロブ?

    cgi-lib.plのReadParseの引数でParamグロブを使った場合、 use strict;をすると、必ず以下のエラーが表示されます。 use strictはそのまま使いたく、他の部分も厳密にチェックしたいのですが 何かよい方法はありますか? use strict; require 'cgi-lib.pl'; &ReadParse(*Param); my $MODE = $Param{'MODE'}; <----- errro Variable "%Param" is not imported at

    • ベストアンサー
    • Perl