締切済み

packageでうまく行かないところがあります。

  • すぐに回答を!
  • 質問No.404608
  • 閲覧数28
  • ありがとう数0
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 10% (60/582)

2つのファイルがあります。
1つは「a.cgi」
2つは「a.pl」

a.cgiはperlで動くCGIです。
a.plもperlですが、packageにしてあります。

a.cgiの中でa.plを使っている場面があります。
a.plでDBを呼び出し値を取り出しているようになっています。そこで問題が発生しました。

a.plで値を取り出したのは良いのですがその値をa.cgiに持ってこようと思っているのですが値を返す事ができません。確実にa.plで値を取り出している事は確認していますが、a.cgiに戻ったときに値を持ってきていません。

私が試みた方法として

return ($a);

return ('$a');

などで試みたのですができませんでした。
どうか教えて頂けないでしょうか?
お願いします。

回答 (全2件)

  • 回答No.2

ベストアンサー率 52% (13/25)

(1)
a.pl内にsubが定義されていて、その関数をa.cgiから呼び出しているが、
returnで返した戻り値が設定されていない。
(a.plのpackage とのインターフェイスは関数のみ)

(2)
package宣言されたファイルa.pl内の変数を参照できない
(a.plのpackageとのインターフェイスは変数)

(1)、(2)どちらで困ってるのか分かりませんが。

(1)
単に$aに値が設定されていないため。あるいは、呼び出し側でその
値を正しく処理していないため。
コーディングミスである可能性が高い。
確実に取り出していることを確認した方法で、return直前に$aに設定されてる
値を確認する。
呼び出し側でその値を受けた変数に設定されていることを確認する。

ちなみに'$a'は、$aという文字列(リテラル)であって、$aの内容では
ありません。

(2)
$a=AAA::func();
print "$a\n";
print "$b\n";
print "$AAA::b\n";

package AAA;
sub func
{
$b = 'abc';
return $b;
}

できたとしても、通常プログラミングではやりません。
  • 回答No.1

ベストアンサー率 75% (398/526)

a.pl では package を使っているとのことですので、恐らく「名前空間」の違いにより変数の値を参照できていないのだと思います。

例えば、a.pl で「package NS1;」と宣言していれば、a.cgi から a.pl 内の変数「$a」を参照するには「$NS1::a」とする必要があります。

# a.pl 内の処理を関数化し、a.cgi から呼び出すようにした方がよいと思いますよ。
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

ピックアップ

ページ先頭へ