2009-09-14 40 views

Trả lời

15

Từ perldoc perlvar:

  • $OSNAME
  • $^O

Tên của hệ điều hành dưới whic h bản sao Perl này được xây dựng, như được xác định trong quá trình cấu hình. Giá trị giống hệt với $Config{'osname'}. Xem thêm Config và chuyển đổi dòng lệnh -V được ghi trong perlrun.

Trong nền tảng Windows, $^O không phải là rất hữu ích: vì nó luôn là MSWin32, nó không cho biết sự khác biệt giữa 95/98/ME/NT/2000/XP/CE/.NET. Sử dụng Win32::GetOSName() hoặc Win32::GetOSVersion() (xem Win32perlport) để phân biệt giữa các biến thể.

+0

Tuyệt vời! Cảm ơn! – knorv

+1

Còn Cygwin thì sao? $^O = 'cygwin' – mob

+0

@mobrule - Nếu chúng ta đang sử dụng Cygwin, có quan trọng không? Tôi không có một hộp Windows để kiểm tra nó ra trên, nhưng nếu bạn đang sử dụng Cygwin bạn về cơ bản có được tốt nhất của cả hai từ (đối với hầu hết các phần) vì vậy nó thực sự không quan trọng. Nếu bạn muốn biết làm thế nào Cygwin ảnh hưởng đến '$^O' bạn nên chạy Perl dưới Cygwin và tìm hiểu. –

6
$^O eq 'MSWin32' 

(Nguồn: perlvar manpage)

3

Sử dụng Devel::CheckOS. Nó xử lý tất cả các trường hợp logic và đặc biệt cho bạn. Tôi thường làm điều gì đó như:

use Devel::CheckOS qw(die_unsupported os_is); 

die "You need Windows to run this program!" unless os_is('MicrosoftWindows'); 

gia đình Các 'Microsoft Windows' biết về những thứ như Cygwin, vì vậy nếu bạn đang trên Windows nhưng không phải tại dấu nhắc cmd, os_is() sẽ vẫn cung cấp cho bạn câu trả lời đúng.

-1

Điều này rất nhanh chóng và dơ bẩn, và sẽ không đặt cược đó là 100% di động, nhưng vẫn hữu ích trong một pinch. Kiểm tra sự hiện diện của dấu gạch chéo ngược trong biến PATH Env, vì PATH là phổ biến cho cả Windows và Unix. Vì vậy - trong Perl:

if ($ENV{PATH}=~m{\\}) { 
    #Quick and dirty: It's windows! 
    print "It's Windows!"; 
} else { 
    print "It's Unix!"; 
} 
+0

Trừ khi, tất nhiên, bạn đang sử dụng Cygwin. Sau đó, mã của bạn nhầm tưởng rằng nó đang chạy unix. – tjd

Các vấn đề liên quan