I have Perl on Mac, Windows and Ubuntu. How can I tell from within the script which one is which? Thanks in advance.
Edit: I was asked what I am doing. It is a script, part of our cross-platform build system. The script recurses directories and figures out what files to build. Some files are platform-specific, and thus, on Linux I don't want to build the files ending with _win.cpp, etc.
Perl System () Function: What It Does Perl's system() function executes a system shell command. Here the parent process forks a child process, and then waits for the child process to terminate. The command will either succeed or fail returning a value for each situation.
The command will be executed just as if you typed it into a shell on your computer. When you use system, the input to the command you're executing (if any) comes from the same input stream as your perl program reads from; similarly, the output of the command (if any) goes to the same output stream as your perl program.
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.
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();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With