- ベストアンサー
実行中の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という項目が無いなど、が気になるため、 何か他に適切な方法が無いか、ご存知の方、よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
OSの判定は特殊変数 $^O で調べられます。 手元の Windows XP では MSWin32、Red Hat Linux では linux と表示されました。 標準モジュールの File::Spec も内部でこの変数を参照しているようですから、参考にしてみてはどうでしょう。
その他の回答 (2)
- twinkleluz
- ベストアンサー率52% (98/185)
環境変数で確実にOSを検知するのはかなり難しいかと思います。 サーバによって取得できる環境変数に違いがありますし (同じRedhatでも設定によって異なる場合がある)。 簡易的になら、winXPでも$ENV{OS}はあるのでそれでもいいかもしれません。 厳密にやろうとすると難しいですね。 OSに依存しそうな処理を書かないことが一番ですが、 どうしても必要な場合には、evalで囲って、処理がコケ たら別OS用の処理をするとかですね。 たとえば、 eval{ ### Linux処理 ### } if($@){ eval { ### Windows処理 ### } } とか。
お礼
別々のOSで一部だけ異なり他がほとんど同じスクリプト処理を 走らせる必要がありましたので、スクリプトファイルを2つ用意する よりも、1つでまとめたいという理由でした。 結果的に#2の方の方法でいくことにしましたが、 evalのテクニックは他でも使えそうです。ヒントをありがとうございました。
- Dooon
- ベストアンサー率20% (36/180)
参考になれば・・・
お礼
一番に頂いていながら、お礼が遅くなりました。すみません。 試してみたのですが、$ENV{'HTTP_USER_AGENT'}が空だったので、上手く出来ませんでした。 なんらかの方法で設定しないといけない環境変数のようですね。 どんなブラウザを使っているか知りたい場合などに使えそうです。 情報ありがとうございました。
お礼
これです! 特殊変数であったのですね。 ”Perl オペレーティングシステム名”でgoogleったら他にも出てきました。ありがとうございました。