enhydraの日記: Perl/Tk覚書
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;
}
ってのは良いのか悪いのか、はて。
Perl/Tk覚書 More ログイン