![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_05.png?8acaa2e)
同パッケージ内の関数を呼び出すことができません。
以下のようなディレクトリ構成で試験しています。
├main.pl
└Contents
└news.pm
<main.pl>
----------------
use Contents::news;
print Contents::news->get($param);
exit(0);
<news.pm>
----------------
package Contents::news;
sub get(@){
#任意の処理
return extract();
}
sub extract(@){
#任意の処理
return $output;
}
1;
上記の例で、main.plからContents::newsパッケージの
get関数を呼び出すことはできるのですが、
そこから、extract関数を呼び出そうとすると
「Undefined subroutine &Contents::news::extract called at Contents/news.pm line xx.」
とエラーが出て落ちてしまいます。
どのようにすればextractを呼び出すことができるのでしょうか?
No.2ベストアンサー
- 回答日時:
「普通は$this->extract ()って感じで呼び出すのでは?」とか、
「うちのperl v5.6.1では普通に動くけどなぁ」とか言うのは置いといて、
この場合、extractの頭に&をつけるほかに、getの前にextractを宣言しておく方法もあります。
こんな感じ
<news.pm>
----------------
package Contents::news;
sub extract (@);
sub get(@){
#任意の処理
return extract();
}
sub extract(@){
#任意の処理
return $output;
}
1;
もちろん宣言だけではなく、定義自体をしてしまってもOK
(順番を変える)
<news.pm>
----------------
package Contents::news;
sub extract(@){
#任意の処理
return $output;
}
sub get(@){
#任意の処理
return extract();
}
1;
ただ、上記のコードの場合、extract(@)で値が渡されることを宣言しているので、extract()の呼び方ではPrototype mismatchになります。
(実際は何らかの値を渡してると思うので、問題ないと思いますが)
回答ありがとうございました。
下のレスの通りです。申し訳ございませんでした。
「関数が見つからない」というエラーメッセージに
惑わされていたようです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- ラジオ AMラジオの周波数が10kHzから9kHzごとに変更された日のこと 8 2022/11/23 11:19
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- C言語・C++・C# C言語のwhileを含む関数について 2 2022/12/16 12:28
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- その他(プログラミング・Web制作) FORTRAN77の配列(除算) 2 2023/02/01 14:34
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- MySQL php テーブルを作れない 2 2022/11/17 18:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
初回起動のみ判別したい
-
arduino の割り込み処理について
-
C#でDataFridViewの行をすべて...
-
VB6で、長い時間かかる処理...
-
Application.ScreenUpdating = ...
-
int(input("○○"))の使い方
-
PerlでXMLを解析して出力する。
-
PICで世界時計を作りたいのですが
-
整数でないとき
-
CGI メールフォームからBCCのア...
-
CGI初心者です
-
1つのプログラム内で"html出力...
-
JSONで文字列が長い時
-
確認画面に空白がでます
-
optionのselectedは更新時は効...
-
perlがうごきません
-
awkの正規表現での最左最短マッ...
-
javaのパッケージ構成で各パッ...
-
実行時エラー 3020の対策
-
前日の日付取得するには?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語のflagの使い方が分かりま...
-
VB6で、長い時間かかる処理...
-
初回起動のみ判別したい
-
arduino の割り込み処理について
-
回数を指定しないで空白行まで...
-
実行中の変数の中身をイミディ...
-
スカラー変数に処理を入れる
-
perl:ループのカウンタ変数の値...
-
処理終了後、他のページへジャ...
-
$postflag=1とか$flag=1とかっ...
-
VBAのCallステートメントについて
-
プログラミング、VB.NET(初歩です)
-
同パッケージ内の関数を呼び出...
-
10000通りのシリアル番号を生成...
-
C言語のプログラミング
-
問題作成のWebアプリの作り方を...
-
SetDlgItemInt( ) c++
-
フラグをたてる、、の意味を教...
-
内部処理中にNow Loadingみたい...
-
フォームの太字を置き換える
おすすめ情報