質問 |
||
| 質問者:sumisumish | 外部ファイルのインクルードについて | |
|---|---|---|
困り度:
|
外部ファイルにデータベースアクセスの為のユーザ情報を書いておき、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. 宜しくお願い致します。 |
|
質問投稿日時:08/03/13 16:58 質問番号:3859491 |
||
回答良回答10pt |
|
| 回答者:sakusaker7 | require で読み込むファイルの中で my してしまうと、その名前は そのファイルに限定された範囲でしか有効になりません。 したがって、require した側で同じ名前の変数を使っても、まったく別物になります。 require されているファイルの中で使っているmy をなくしても出ているエラーというのは 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. これですか? このエラーは use strict した状態でないとでないはずなんですが。 また、このエラーが発生したときはスクリプトの実行は一切されないので > 文字列の取得はできているっぽいのですが、なぜかエラーになってしまいます。 文字列の取得もデータベースへの接続もできるはずがないのですが なにか勘違いしてたりしませんか? もし別の種類のエラーならどのようなエラーなのかの説明をお願いします。 |
|---|---|
| 種類:補足要求 どんな人:経験者 自信:参考意見 |
|
| |
回答日時:08/03/14 01:43 回答番号:No.3 |
|
| この回答への補足 | sakusaker7さん 私の勘違いでした。 外部ファイルの中からmyを外したら、問題なく読み込むことができました。ありがとうございました! |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答良回答20pt |
|
| 回答者:shimix | >myを外してみましたが、やはりダメでした。 そうですか・・。ただ、こちらで確認した限りでは reuqire 'inc.pl'; print $test1 . "<br />"; print $test2 . "<br />"; などとして、 my $test1 = 'test1'; $test2 = 'test2'; を読み込ませると、test2しか表示されないので、いずれにしても「my」はマズイと思われます。 「my」を外したあとでもエラーメッセージは変わりませんか?また print $datasrc; などで表示させると「期待した値」が表示されますか? |
|---|---|
| 種類:アドバイス どんな人:経験者 自信:参考意見 |
|
| |
回答日時:08/03/13 18:56 回答番号:No.2 |
|
| この回答への補足 | shimixさん ご回答ありがとうございます。 やはり、エラーメッセージは変わらなかったです。 文字列の取得はできているっぽいのですが、なぜかエラーになってしまいます。 もちろん、本体のファイル(test.cgi)に直接記述すると問題なく動作しているんですけどね。。。 |
| この回答へのお礼 | myを外したら、問題なく表示させることができました! ありがとうございました。 |
回答 |
|
| 回答者:shimix | >my $datasrc = "oracle9"; >my $username = "test"; >my $password = "password"; requireで読み込む(最後はexitでreturnしている)のに、「my」でいいんでしょうか(Perlはよく知らないので外していたらごめんなさい)。 |
|---|---|
| 種類:アドバイス どんな人:経験者 自信:参考意見 |
|
| |
回答日時:08/03/13 17:41 回答番号:No.1 |
|
| この回答への補足 | shimixさん ご回答ありがとうございます。 myを外してみましたが、やはりダメでした。 また、何かお気づきの点があればお願いいたします。 |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |