How can I detect the operating system in Perl?
Solution 1:
Examine the $^O
variable which will contain the name of the operating system:
print "$^O\n";
Which prints linux
on Linux and MSWin32
on Windows.
You can also refer to this variable by the name $OSNAME
if you use the English module:
use English qw' -no_match_vars ';
print "$OSNAME\n";
According to perlport, $^O
will be darwin
on Mac OS X.
You can also use the Config core module, which can provide the same information (and a lot more):
use Config;
print "$Config{osname}\n";
print "$Config{archname}\n";
Which on my Ubuntu machine prints:
linux
i486-linux-gnu-thread-multi
Note that this information is based on the system that Perl was built, which is not necessarily the system Perl is currently running on (the same is true for $^O
and $OSNAME
); the OS won't likely be different but some information, like the architecture name, may very well be.
Solution 2:
If you need more specific information on Windows this may help.
my $osname = $^O;
if( $osname eq 'MSWin32' ){{
eval { require Win32; } or last;
$osname = Win32::GetOSName();
# work around for historical reasons
$osname = 'WinXP' if $osname =~ /^WinXP/;
}}
Derived from sysinfo.t, which I wrote the original version.
If you need more detailed information:
my ( $osvername, $major, $minor, $id ) = Win32::GetOSVersion();
Solution 3:
Sys::Info::OS looks like a relatively clean potential solution, but currently doesn't seem to support Mac. It shouldn't be too much work to add that though.