![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
いつもお世話になっております。
コンストラクタへ引数を渡しsyntaxチェックを行うとエラーとなります。
ご教授願えないでしょうか。
※Perlは一昨日から初めてです。
[エラー内容]
sample.pm: Bareword "SAMPLE_LOG" not allowed while "strict subs" in use at sample.pm line 278.
[sample.pm]
package sample
lib ../common/
use Log.pm
my $log = Log->new(SAMPLE_LOG);
[Log.pm}
package main
use constant SAMPLE_LOG = 'sample.log';
定数を定義しているのですが・・・・
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
たとえば sample.pm の 1行目は
package sample
となっていますが, 本当にこれでいいのですか? あなたのところでは, セミコロンがなくても普通に動作しているのですか?
その次の
lib ../common/
でも, 「lib ってなんだ」とか「../common/ ってどんな式なんだ」とか疑問になりますよね.
「やりたい事は書いているので、問題はないかと思ってはいる」とのことですが, この例を使って試そうとすると「やりたいこと」にたどり着く前に細かなエラーをつぶしていく必要があります. 確かに細かいところなんだけど, それは逆にいえば「気を付けて質問するつもりはない」という意思表示のようにも取れてしまいます.
そして, その手間をかけても Perl 5.14.2 では
main に constract を定義すると Barewordとなり、
パッケージLog内で constant定義するとsyntax OKとなります。
とはならない.
この回答への補足
度々ご指摘有難う御座います。
すみません。
実際には
package sample → package sample;
lib ../common/ → use lib '../common/';
しかも一番肝心なバージョンが抜けていました。
バージョンは5.8.8です。
いろいろとご指摘有難う御座いました。
なんとか解決しました。
ローカルで色々試した所
パッケージ → パッケージで mainのconstantを使用する場合
my $log = Log->new(main::SAMPLE_LOG);
としなければならないと言う事が分かりました。
ありがとうございました。
No.4
- 回答日時:
そうなると状況が質問とは変わってきちゃうから, 具体的なスクリプトを (もちろん「使っているものをそのままで」とはいわないけど) 出してください.
なお, 実際に出すときには「こんな風に書き換えた」と変更点のみを書きだすと無用な混乱を招くことになるので, 面倒でも改めて全体を出すようにしてください.
この回答への補足
補足が足りずにすみません
package sample
lib ../common/
use Log.pm
my $log = Log->new(SAMPLE_LOG);
[Log.pm}
package main
use constant SAMPLE_LOG = 'sample.log';
package Log;
#コンストラクタ
sub new {
my $this = shft;
my ($name) = @_;
return 1;
}
パッケージsampleから
パッケージLogに引数を渡して、
sample.logの定義があるかを返す処理です。
main に constract を定義すると Barewordとなり、
パッケージLog内で constant定義するとsyntax OKとなります。
Log.pmは他のcgi等から呼ばれるため、
他の使用方法とあわせたいのが正直なところです。
宜しくお願いします。
No.3
- 回答日時:
あ, #2 は #1 のように直してもダメだったときに意味を持ちます. 質問文のままだと, おそらく (コンパイルできたとしても)
期待した動作にはならないでしょう.仰るように
$log = sample::SAMPLE_LOG;
だといけました。
しかし、Log.pm内にはもうひとつパッケージが存在し、
その中でコンストラクタをよんでいいます。
なので、$log = main;;SAMPLE_LOG
は問題ないのですが、
その後のコンストラクタを呼ぶ場合にはどうしたらいいのでしょうか
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Perl Perl の外部モジュールの利用方法 3 2022/07/10 18:34
- UNIX・Linux bashの変数でブランクがあるかチェックする方法教えて下さい。 3 2023/04/06 16:09
- 数学 log底10真数1/75 ただし、 log底10真数2=0.3 log底10真数3=0.5とする 式 2 2022/05/30 22:51
- 数学 微分方程式の積分定数について 5 2023/07/13 08:39
- 数学 n乗はどうなったのでしょうか 1 2023/01/31 19:26
- 数学 写真の数学の質問です。 常用対数ってのがいまいちわかりません。 log(10)3が、なぜlog(10 5 2023/06/10 14:07
- 数学 回答者どもがなかなか答えられないようなので、考えてみました。 ∫[0,π/2]log(sinx)/( 4 2022/08/31 16:30
- 数学 log{f(x)}=xβlogα ↓ f(x)=e∧(xβlogα) こうなるlogの定義 4 2023/04/18 12:10
- 数学 対数関数のグラフ y=log(2)2(x+1)のグラフを書け 模範解答は「1+log(2)(x+1) 2 2023/07/08 01:51
- タブレット log撮影で撮った写真について。 こんにちはカメラ初心者です、わたしは今までほとんどの写真をlog撮 3 2023/07/04 01:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
End Sub が必要です。
-
他クラスからForm1内コントロル...
-
C言語のプログラムが実行できま...
-
フォートランのエラーについて...
-
43:syntax error at end of input
-
対応する関数ヘッダーがありません
-
pythonを使うときのビルド方法
-
Excel VABについて 下記記述が...
-
intel fortranのエラーで困って...
-
C2065: 'EnumDisplayDevices' :...
-
Excel・Word リサーチ機能を無...
-
特定のPCだけ動作しないVBAマク...
-
メッセージボックスのOKボタ...
-
UserForm1.Showでエラーになり...
-
エクセルで特定の列が0表示の場...
-
配列数式の解除
-
教えて下さい
-
Excel マクロ VBA プロシー...
-
お助けください!VBAのファイル...
-
2つ以上の変数を比較して最大数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
End Sub が必要です。
-
フォートランのエラーについて...
-
intel fortranのエラーで困って...
-
C言語のプログラムが実行できま...
-
対応する関数ヘッダーがありません
-
Excel VABについて 下記記述が...
-
VBでエラー'ActiveX component ...
-
他クラスからForm1内コントロル...
-
Makefile と <math.h>
-
VB.NETのStructureの使い方を教...
-
43:syntax error at end of input
-
フォートラン(fortran)のエラー...
-
AccessVBAでVLookupを使いたい
-
(fortran) run-time erro M620...
-
解説サイトに従ったfortran並列...
-
verilogでデマルチプレクサの作...
-
Excel VBA: UserForm.Show で実...
-
構造体のポインタ参照
-
【ルネサスのマイコン】E8aから...
-
typedef による2重定義
おすすめ情報