• ベストアンサー

外部ファイルの関数を使うには?

mauraの回答

  • ベストアンサー
  • maura
  • ベストアンサー率46% (48/104)
回答No.2

use stricts; require "dame.pl"; use vars qw(%hash_hensuu); これで外部ファイルのGlobal変数を使うことが出来ます。 ”パッケージや変数の輸出”では、ないですが。。

関連するQ&A

  • use strict;

    Global symbol "@exec_test_list" requires explicit package name at ./ctest.pl line 384. Global symbol "@exec_test_no" requires explicit package name at ./ctest.pl line 384. Global symbol "@protocol_list" requires explicit package name at ./ctest.pl line 397. Global symbol "@protocol_list" requires explicit package name at ./ctest.pl line 406. Global symbol "$name" requires explicit package name at ./ctest.pl line 413. use strict;を書くと以上のようなエラーメッセージが 出力されます。どうしたら、以上のようなエラーを 回避できるでしょうか?教えてください。

    • ベストアンサー
    • Perl
  • 外部ファイルのインクルードについて

    外部ファイルにデータベースアクセスの為のユーザ情報を書いておき、DB接続が発生するファイルにのみ、インクルードさせたいと考えております。下記のようなプログラムを記述したのですが、エラーが出てしまいました。自分でネットで調べたのですが、間違っていないように感じます。何か、間違っていますでしょうか? my $dbh = DBI->connect部(グローバル変数が読み込めない)でエラーが発生しております。 #!/usr/local/bin/perl use DBI; require 'db.conf'; $ENV{ORACLE_HOME}='/opt/app/oracle/product/9'; my $dbh = DBI->connect($datasrc, $username, $password) || die DBI::errstr; my $sql = "SELECT * FROM NAME"; my $sth = $dbh->prepare($sql) || die $dbh->errstr; $sth->execute || die $dbh->errstr; ~ 省略 ~ ---------db.confの中身(パーミッション755)--------- my $datasrc = "oracle9"; my $username = "test"; my $password = "password"; 1; #return true ----------エラーログ------------------ Global symbol "$datasrc" requires explicit package name at /web/hthome/cgi/test.cgi line 7. Global symbol "$username" requires explicit package name at /web/hthome/cgi/test.cgi line 7. Global symbol "$password" requires explicit package name at /web/hthome/cgi/test.cgi line 7. 宜しくお願い致します。

    • ベストアンサー
    • 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は同時に記述してはいけないのでしょうか? 同時に記述しないと目的のプログラムを実現する方法が大きく変わってきてしまうので、非常に困ってしまいます。 もし、ご存知の方がいらっしゃったら教えてください。 宜しくお願い致します。

  • オープンソースの投票管理システム

    オープンソースの投票管理システム このプログラムを使用したことある方いらっしゃいますか? http://plus-code.net/cgi-flash-enquete/web_enquete01/ 解説通りに設定しているのですが、こんなエラーメッセージが出てしまいます。 Software error: Global symbol "$ref_array_hash" requires explicit package name at perl/Cf/Part/Enquete.pm line 870. Global symbol "$ref_array_hash" requires explicit package name at perl/Cf/Part/Enquete.pm line 871. Compilation failed in require at index.cgi line 17. BEGIN failed--compilation aborted at index.cgi line 17. 見てもさっぱり何ですが、これはつまりプログラム自体に問題があるということでいいんでしょうか。。それならそれで諦めもつくのですが‥

    • 締切済み
    • CGI
  • CGIの設置について

    設置後にCGIページを開くと下記の様に表示されてしまいCGIが起動しません。 Software error: Global symbol "$ref_array_hash" requires explicit package name at perl/Cf/Part/Enquete.pm line 870. Global symbol "$ref_array_hash" requires explicit package name at perl/Cf/Part/Enquete.pm line 871. Compilation failed in require at index.cgi line 17. BEGIN failed--compilation aborted at index.cgi line 17. perl/Cf/Part/Enquete.pmの部分は 870|for (my $j=0;$j<scalar(@$ref_array_hash);$j++) { 871| $flag = @$ref_array_hash->[$j]{d_times}; です。 index.cgi line 17.の部分は 17|use Cf::Part::Enquete; と記載されております。 どの部分を訂正すれば動くのでしょうか?

    • 締切済み
    • CGI
  • Perlで use strict して our変数

    Perl 初心者です。初めて質問します。 test_sub.pl で宣言した変数を test_main.pl から参照したくて悩んでいます。 環境 : WindowsXP / ActivePerl 5.14.2 -------------------- * test_sub.pl -------------------- #!/usr/bin/perl use strict; our $hoge = 'HOGE'; 1; -------------------- * test_main.pl -------------------- #!/usr/bin/perl use strict; require 'test_sub.pl'; print "Content-type: text/html\n\n"; print $hoge; -------------------- これを実行すると、 Global symbol "$hoge" requires explicit package name at C:/public_html/cgi-bin/test_main.pl line 7.\r というエラーが出ます。 require する前に、test_main.pl のほうで our($hoge); と宣言したり 参照する際に print $main::hoge; とパッケージを指定したりすればいけるのですが、 これらをしないとできないものなのでしょうか。 use strict; を書かなければ最初のソースでも動くのですが use strict は書きたい… 継承のようなことをしたいのです。 ちなみに以下試してみたソースです。 -------------------- * test_main.pl -------------------- #!/usr/bin/perl ######################################## # NG use strict; require 'test_sub.pl'; print "Content-type: text/html\n\n"; print $hoge; ######################################## # OK our変数を宣言しておくといける =pod use strict; our ($hoge); require 'test_sub.pl'; print "Content-type: text/html\n\n"; print $hoge; =cut ######################################## # OK 参照する際にパッケージ名を指定すればいける =pod use strict; require 'test_sub.pl'; print "Content-type: text/html\n\n"; print $main::hoge; =cut ######################################## ######################################## # NG =pod use strict; use base qw(test_sub); print "Content-type: text/html\n\n"; print $hoge; =cut ######################################## -------------------- * test_sub.pm -------------------- #!/usr/bin/perl package test_sub; use strict; our $hoge = 'HOGE'; 1; -------------------- NG パタンはどちらも Global symbol "$hoge" requires explicit package name のエラーとなります。 もしご存じの方がいらっしゃいましたら教えてください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 自分で定義した関数をすぐに使いたい

    自分で定義した関数を最初から実装されているabs()やsqrt()のように何もせず(呼び出さずに)使用することはできないのでしょうか。 現在,"C://Perl/function/~.pl"といったようにfunctionという名前のフォルダに自分で作成した関数を保存しています。そしてその関数を使うときには, require("C://Perl/function/var.pl") &パッケージ名::サブルーチン名(引数); などとして使用していますが,呼び出す関数が1つ2つなら良いですが統計学に関する関数がないためほとんど自分で定義したものをつかっています。そうすると使用したい関数が多くなるほど,呼び出す手間が多くなってしまうのですが何か良い手段はないものでしょうか(モジュールを作成してもそれほど手間が省けるようにも思えないのですが、、、)。

    • ベストアンサー
    • 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
  • 自作関数  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 print文で日本語表示するには

    perlのプログラムで use utf8が宣言されていない時(test1.pl)は、 print文で日本語が正しく表示されるのですが、 use utf8が宣言されている時(test2.pl)は、 print文で日本語が正しく表示されないかエラーになります。 encode('utf-8', $string)やencode('cp932', $string) も試してみましたがうまくいきませんでした。 どのようにすればよいでしょうか。 ---test1.pl------------------------------------------------ #!C:/perl/bin/perl use strict; my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $year += 1900; $mon += 1; my $string="$year年$mon月$mday日 $hour時$min分$sec秒\n"; print $string; ----------------------------------------------------------- 実行結果 OK 2018年12月26日 9時36分6秒 ----------------------------------------------------------- ---test2.pl------------------------------------------------ #!C:/perl/bin/perl use strict; use utf8; use Encode; my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $year += 1900; $mon += 1; my $string="$year年$mon月$mday日 $hour時$min分$sec秒\n"; print $string; #print encode('utf-8', $string); #print encode('cp932', $string); --------------------------------------------------- 実行結果 NG (PC1 Windows7 ActivePerl) Wide character in print at D:\test\test2.pl line 11. Global symbol "$year年" requires explicit package name (did you forget to declare "my $year年"?) at D:\test\test2.pl line 8. Global symbol "$mon月" requires explicit package name (did you forget to declare "my $mon月"?) at D:\test\test2.pl line 8. Global symbol "$mday日" requires explicit package name (did you forget to declare "my $mday日"?) at D:\test\test2.pl line 8. Global symbol "$hour時" requires explicit package name (did you forget to declare "my $hour時"?) at D:\test\test2.pl line 8. Global symbol "$min分" requires explicit package name (did you forget to declare "my $min分"?) at D:\test\test2.pl line 8. Global symbol "$sec秒" requires explicit package name (did you forget to declare "my $sec秒"?) at D:\test\test2.pl line 8. Execution of D:\test\test2.pl aborted due to compilation errors. ----------------------------------------------------- 実行結果 NG (PC2 Windows7 ActivePerl) Malformed UTF-8 character (unexpected continuation byte 0x94, with no precedingstart byte) at C:\test\test2.pl line 8. (略) Malformed UTF-8 character (unexpected continuation byte 0x95, with no precedingstart byte) at C:\test\test2.pl line 8. 2018 N12 26 9 5 4 b ----------------------------------------------------- 期待している実行結果 2018年12月26日 9時36分6秒 ----------------------------------------------------- よろしくお願いします。

    • ベストアンサー
    • Perl