• ベストアンサー

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

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

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.2

OSの判定は特殊変数 $^O で調べられます。 手元の Windows XP では MSWin32、Red Hat Linux では linux と表示されました。 標準モジュールの File::Spec も内部でこの変数を参照しているようですから、参考にしてみてはどうでしょう。

goku3
質問者

お礼

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

その他の回答 (2)

回答No.3

環境変数で確実にOSを検知するのはかなり難しいかと思います。 サーバによって取得できる環境変数に違いがありますし (同じRedhatでも設定によって異なる場合がある)。 簡易的になら、winXPでも$ENV{OS}はあるのでそれでもいいかもしれません。 厳密にやろうとすると難しいですね。 OSに依存しそうな処理を書かないことが一番ですが、 どうしても必要な場合には、evalで囲って、処理がコケ たら別OS用の処理をするとかですね。 たとえば、 eval{ ### Linux処理 ### } if($@){ eval { ### Windows処理 ### } } とか。

goku3
質問者

お礼

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

  • Dooon
  • ベストアンサー率20% (36/180)
回答No.1

参考になれば・・・

参考URL:
http://www.futomi.com/subroutine/ua.html
goku3
質問者

お礼

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

関連するQ&A

専門家に質問してみよう