人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【Perl5.0】Perl初心者です。
PerlでC言語にあるようなenumを使用したくて、以下のようにenumを宣言したファイル(x.pm)を作成しました。

しかし、別のパッケージ(y.pm)からそれを使用しようとするとコンパイルエラーとなってしまいます。

どのようにすれば解決できるのでしょうか?
よろしくお願いします。

-----------[x.pm]------------------------------
#!/usr/local/bin/perl

use strict;

use enum qw(
:DataType_=0 One Two Three
);

return 1;
-----------[x.pm]------------------------------


-----------[y.pm]------------------------------
#!/usr/local/bin/perl

use strict;
use x;

package y;

sub test1
{
my $z = {
type => DataType_One,
size => 1};
}

return 1;
-----------[y.pm]------------------------------

●質問者: mamekko
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:C言語 enum ONE Perl pm
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● b-wind
●60ポイント ベストアンサー

2種類解決策がある。

『続・初めてのPerl』15章 Exporter - ケーズメモ

正攻法は Export で利用側の名前空間で使用できるようにすること。


x.pm ファイルの方はだいたいこんな感じ。

package x;
use strict;
use warnings;


require Exporter;
use base qw/Exporter/;

use enum qw(
 :DataType_=0 One Two Three
);

our @EXPORT = qw(
 DataType_One DataType_Two DataType_Three
);

1;

enum モジュールは使ったこと内から、@EXPORT に代入する値はちょっと自信ないな。

ようは呼び出し元で使いたい名前を指定してやるだけなんだが。

まぁその辺は適当に試してくれ。


2つめは x.pm でパッケージを指定しておき、呼び出し側ではパッケージ名指定で使用すること。

x.pm

package x;
use strict;
use warnings;

use enum qw(
:DataType_=0 One Two Three
);

1;

y.pm

package y;

use strict;
use warnings;

sub test1
{
my $z = {
type => x::DataType_One,
size => 1};
}

1;

とこんなところだ。

あと細かいところだが、実行ファイルとして直接呼び出されるわけではない .pm ファイルに、

perl コマンドのパスの指定は要らんぞ。

◎質問者からの返答

回答ありがとうございます。

当初は、後者のパターンで組んでいたのですが、毎回x::と打つのが面倒になってきまして、どうにかならないものかと思ってました。

みなさんenumモジュールはあまり使われないのでしょうか?

とにかく、ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ