プロが教えるわが家の防犯対策術!

初歩的な質問で失礼いたします。
下記の記述でプログラムを実行すると正常にプログラムが動きます。(省略以降は全く同一のプログラムです)

■実行問題なし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は同時に記述してはいけないのでしょうか?
同時に記述しないと目的のプログラムを実現する方法が大きく変わってきてしまうので、非常に困ってしまいます。

もし、ご存知の方がいらっしゃったら教えてください。
宜しくお願い致します。

A 回答 (2件)

use と requireを同時に使ったのが理由ではありません。


#1の方の回答にある通り、use strict; をはずせばこのエラーは
なくなると思いますが、

use strict;
use DBI;
require 'cgi-lib.pl';
require 'jcode.pl';

なんでCGI.pmとかJcode.pm を使わないのでしょう?
これらを使えばuse strict していても問題ないはずです。

あとは
our $in;
our $parameter;
our $name;
を先頭付近に追加してもいけるかな?

この回答への補足

sakusaker7さん

ご回答ありがとうございました。
確かに、use strict;を外すと、この部分については動作するのですが、DB接続の記述で今度はエラーが発生していまします。その為、下記のようにしてプログラムを実行してみました。

use strict;
use DBI;
require 'cgi-lib.pl';
require 'jcode.pl';

our $in;
our $parameter;
our $name;
our $dbh;
----------省略--------------------
しかし、下記のエラーで実行できませんでした。
Global symbol "$in" requires explicit package name at /web/search.cgi line 7.
Global symbol "$parameter" requires explicit package name at /web/search.cgi line 8.
Global symbol "$name" requires explicit package name at /web/search.cgi line 9.
Global symbol "$dbh" requires explicit package name at /web/search.cgi line 10.
Execution of /web/search.cgi aborted due to compilation errors.

前画面から受け取ったデータの文字列を使い、DB検索をするような事を実現するためには、やはりCGI.pmもしくはJcode.pmを利用しないとダメでしょうか?

質問ばかりですみません。

補足日時:2008/03/12 14:14
    • good
    • 0
この回答へのお礼

すみません。私の勘違いでした。
use strict;をコメントアウトすることで
問題解決いたしました。
ご迷惑をおかけしました。
ありがとうございました!

お礼日時:2008/03/12 14:53

use Strict を外すとどうなりますか?



strict - 安全ではないコンストラクトを制限する Perl プラグマ
http://perldoc.jp/docs/perl/5.8.1/strict.pod

この回答への補足

ありがとうございます。下記のコードにして実行してみました。

#!/usr/local/bin/perl
#use strict;
use DBI;
require 'cgi-lib.pl';
require 'jcode.pl';

$ENV{ORACLE_HOME}='/opt/app/oracle/product/';
$ENV{NLS_LANG} = 'JAPANESE_JAPAN.JA16SJIS';
$ENV{NLS_LANGUAGE} = 'JAPANESE';

my $datasrc = "xxx";
my $username = "BBB";
my $password = "AAA";

my $sql = "SELECT NAME FROM PROFILE";
my $sth = $dbh->prepare($sql) || die $dbh->errstr;
$sth->execute || die $dbh->errstr;

$| = 1;
read STDIN,$in,$ENV{'CONTENT_LENGTH'};
# 文字列を分解
($parameter, $name) = split /=/, $in;
---------------省略-----------------
しかし、エラーが「Can't call method "prepare" on an undefined value at /web/search.cgi line 20.」
と出てしまいました。
前の画面から文字列の受け渡しを行い、その文字列をSQLにセットし、特定のレコードを取得するには、上記のライブラリ構成では難しいでしょうか?

周りに相談する相手もいなくて、初歩的な質問で本当にすみません。

補足日時:2008/03/12 13:55
    • good
    • 0
この回答へのお礼

すみません。私の勘違いでした。
use strict;をコメントアウトすることで
問題解決いたしました。
ご迷惑をおかけしました。
ありがとうございました!

お礼日時:2008/03/12 14:53

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


このQ&Aを見た人がよく見るQ&A