技術資料らしきものPerlカレントディレクトリを変更する

cron等で実行させる時に良いかもね

例えばperlでバックアッププログラム等を書いておいて、ブラウザ越しに実行してみたりして、
「ああ、動いた。あとはcron仕込めばOKOK」
なんて思ってcron仕込んでみたものの、上手く動かない・・・・・

なんていうアンニュイな貴方!(私含む)

requireとか保存先とかで指定しているパスが相対パスになっていませんか???


相対パスでしたが何か?

cronが実行されているディレクトリは、プログラムの置場では無かったりしますから、相対パスが思った所を参照してくれていないよ。
なんていうオチがあったりなかったり。

じゃあフルパスで書き直すかー、ってのも当然アリですが、直す箇所が多かったり、なんか汎用ライブラリ書き直さなければいけなかったり、他のサーバにも使いまわしたかったり、と、なかなか絶対パスで書き直すのが難儀なケースもありえますよね。

じゃあ現在の位置を変えてみよう。

chdir
というコマンドがあります。
これで指定した場所がカレントディレクトリとなりますので、ここでプログラム置場のディレクトリを指定すればOKOKです。

え?結局ここでプログラム置場のフルパスを書かなければいけないのって?
実はそんなことは無いのです。

File::Basenameを使う

先頭辺りに、

use File::Basename;
chdir dirname($0);

とやってあげれば、プログラムの場所がカレントディレクトリになります。

File::Basenameに、dirname() という関数があって、$0 にプログラム本体のフルパスが入ってるんですなー。便利ですなー。

Perl関連リンク

サイト

Binbo-Special > 技術情報らしきもの > Perl
当サイトです。

書籍

すぐわかる オブジェクト指向 Perl
ちょっと変わり種?だなぁ、と思う本。読みやすいです。やっぱりPerlでオブジェクト指向なんて面倒くさいなぁと思う事うけあい(笑)

2008/07/28

▲一番上へ