dポイントプレゼントキャンペーン実施中!

perlスクリプト内で、今動作しているOSの種類(WinかLinuxか)によって、処理を切り替えたいのですが、
(例えば、Win上で動いていれば「C:\temp」を参照、Linuxで動いていれば「/tmp」を参照などのようにしたい)
どのようにスイッチするのが良いでしょうか?

Winには、ActivePerl-5.6.xを導入して使用。
Linuxは、RedHat8や9とします。

思いつくところでは、ENV変数にて、
if( $ENV{"OS"} eq "Windows_NT" ){
win処理
}else{
Linux処理
}
のようにすることですが、判定文がいつも正しく動くか、
(OSがWindowsでもXPになったとたんに、動かなくなるとか)
Linux側ではENV変数にOSという項目が無いなど、が気になるため、
何か他に適切な方法が無いか、ご存知の方、よろしくお願いします。

A 回答 (3件)

OSの判定は特殊変数 $^O で調べられます。


手元の Windows XP では MSWin32、Red Hat Linux では linux と表示されました。

標準モジュールの File::Spec も内部でこの変数を参照しているようですから、参考にしてみてはどうでしょう。
    • good
    • 0
この回答へのお礼

これです!
特殊変数であったのですね。
”Perl オペレーティングシステム名”でgoogleったら他にも出てきました。ありがとうございました。

お礼日時:2006/02/02 18:27

環境変数で確実にOSを検知するのはかなり難しいかと思います。


サーバによって取得できる環境変数に違いがありますし
(同じRedhatでも設定によって異なる場合がある)。
簡易的になら、winXPでも$ENV{OS}はあるのでそれでもいいかもしれません。
厳密にやろうとすると難しいですね。

OSに依存しそうな処理を書かないことが一番ですが、
どうしても必要な場合には、evalで囲って、処理がコケ
たら別OS用の処理をするとかですね。

たとえば、

eval{ ### Linux処理 ### }
if($@){
eval { ### Windows処理 ### }
}

とか。
    • good
    • 0
この回答へのお礼

別々のOSで一部だけ異なり他がほとんど同じスクリプト処理を
走らせる必要がありましたので、スクリプトファイルを2つ用意する
よりも、1つでまとめたいという理由でした。
結果的に#2の方の方法でいくことにしましたが、
evalのテクニックは他でも使えそうです。ヒントをありがとうございました。

お礼日時:2006/02/02 18:30

参考になれば・・・



参考URL:http://www.futomi.com/subroutine/ua.html
    • good
    • 0
この回答へのお礼

一番に頂いていながら、お礼が遅くなりました。すみません。
試してみたのですが、$ENV{'HTTP_USER_AGENT'}が空だったので、上手く出来ませんでした。
なんらかの方法で設定しないといけない環境変数のようですね。
どんなブラウザを使っているか知りたい場合などに使えそうです。
情報ありがとうございました。

お礼日時:2006/02/02 18:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!