こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

実行中のOSを知るには?

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という項目が無いなど、が気になるため、
何か他に適切な方法が無いか、ご存知の方、よろしくお願いします。

投稿日時 - 2006-02-02 14:47:58

QNo.1938725

困ってます

質問者が選んだベストアンサー

OSの判定は特殊変数 $^O で調べられます。
手元の Windows XP では MSWin32、Red Hat Linux では linux と表示されました。

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

投稿日時 - 2006-02-02 17:43:39

お礼

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

投稿日時 - 2006-02-02 18:27:15

ANo.2

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

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

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

たとえば、

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

とか。

投稿日時 - 2006-02-02 17:49:22

お礼

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

投稿日時 - 2006-02-02 18:30:01

ANo.1

参考になれば・・・

参考URL:http://www.futomi.com/subroutine/ua.html

投稿日時 - 2006-02-02 15:03:24

お礼

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

投稿日時 - 2006-02-02 18:46:09

あなたにオススメの質問