« [アニメ]グイン・サーガ | [アニメ]ヒカルの碁 »
[perlメモ]OSの判別方法
Posted by kumacchi on 2009年6月9日 , 2 Comments
perlでプログラムを開発時に開発はWindows上ターゲットはlinuxやFreeBSDなどのUNIX系OSだったりすることはよくあることですが、Windows上でテストを行う場合、モジュールはプログラムで扱うファイルのパスが違うためそのままでは実行できないことがよくあります。
基本的にUNIX系のOSはパスを
/home/hogehoge/local/lib
という風に書きますが
Windows系のOSの場合
C:\home\hogehoge\local\lib
の様になるのでパスの書き方が根本的に異なっているわけです。
他にも方法はあるかと思いますが、こういう場合などとりあえずOSを判別してパスを別々に記述するなどして対処する場合などに便利なのがOSを判別する特殊変数です。
$^O
がその特殊変数です。
print "$^O\n";
と書いたプログラムをそれぞれのOSで実行すると下記のようになります。
Windows XPの場合「MSWin32」
Linux系OSの場合「linux」
FreeBSDの場合「freebsd」
という風になりました。
そういうわけで後はこれを利用して処理を分岐すればOKです。
◇参考:Making The Road Wiki – Programming::Perl::特殊変数
(Visited 1,180 times, 1 visits today)
タグ : perlメモ
カテゴリ:
perl・cgi
たまたまググってたらみつけてしまったので、コメントさせていただきます。
ご存知だと思いますが、PATHの書き方なら
http://search.cpan.org/~smueller/PathTools-3.31/lib/File/Spec.pm
を使うのが良いかも。
$ perl -MFile::Spec -e”print File::Spec->catfile(‘a’, ‘b’, ‘c’);”
$ perl -MFile::Spec::Functions -e”print catfile(‘a’, ‘b’, ‘c’);”
PATHの書き方より、OSによりディレクトリ構造が異なるのに対応するために $^O を使うかな???
補足していただいてありがとうございます。
Spec.pm自体はしらなかったのですが、この記事で言いたかったのはズバリ
>PATHの書き方より、OSによりディレクトリ構造が異なるのに対応するために $^O を使うかな???
の様な場合についてのことを言いたかったのですが、記事中ではディレクトリ構造を揃えてしまってるので今読んでみるとそういうふうに取れない記事になってしまってますねw。