パスワードを忘れた? アカウント作成
449232 journal

enhydraの日記: Perl/Tk覚書

日記 by enhydra

Perl/Tkはjpegやgifファイルを読み込んで、ボタンやアイコンとして利用することが出来る。この場合以下のようなコードでその動作を見ることが出来る。

#!perl

use Tk;
my $main = MainWindow->new;
$main->Label(
        -image => $main->Photo(-file => '/path/to/image.gif'),
)->pack;
MainLoop;
__END__

しかしPerlの一般的な作法として、プログラムを設置するにあたって一般的なリソースの置き場所というのは定められていない。つまり

    /usr/share/hoge/image/image.gif

というのが出来ない。

ではどうするかというと、モジュールと同じ階層リソースファイルを設置して、以下のコードでパスを得ることが出来る。

Tk::findINC(ref $self, 'image.gif');

この場合、$selfが Hoge::Class::Nameオブジェクトだった場合、
@INC以下の Hoge/Class/Name/ から 'image.gif'を検索してそのフルパスを返してくれる。

本来は独自のWidgetで利用する画像をロードしやすいように

$widget->findINC('image.gif');

といった利用の仕方をするのではないだろうか。仮に$widgetが Tk::MyWidgetってなクラスの場合は

@INC以下に Tk/MyWidget/image.gif とファイルを設置しておけば、ロードすることが出来るって寸法。

ネタ元はこの辺のfaq

それにしてもfindINCメソッドの

sub findINC
{
        my $file = join('/',@_);
        my $dir;
        $file =~ s,::,/,g;
        foreach $dir (@INC) {
                my $path;
                return $path if (-e ($path = "$dir/$file"));
        }
        return undef;
}

ってのは良いのか悪いのか、はて。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

吾輩はリファレンスである。名前はまだ無い -- perlの中の人

読み込み中...