Mac、Windows、UbuntuにPerlがあります。どれがどれであるかをスクリプト内からどのように確認できますか?前もって感謝します。
編集:私は何をしているのか尋ねられました。これはスクリプトであり、クロスプラットフォームビルドシステムの一部です。このスクリプトはディレクトリを再帰的に作成し、構築するファイルを特定します。一部のファイルはプラットフォーム固有であるため、Linuxでは、_win.cppなどで終わるファイルをビルドしたくありません。
$^O
オペレーティングシステムの名前を含む変数:
print "$^O\n";
Linuxでlinux
とMSWin32
Windowsの場合。
この変数を名前で参照することもできます $OSNAME
英語 モジュールを使用する場合:
use English qw' -no_match_vars ';
print "$OSNAME\n";
perlport 、 $^O
は、Mac OS Xではdarwin
になります。
Config コアモジュールを使用することもできます。これにより、同じ情報(およびそれ以上)を提供できます。
use Config;
print "$Config{osname}\n";
print "$Config{archname}\n";
私のUbuntuマシンで印刷されるもの:
linux
i486-linux-gnu-thread-multi
この情報は、Perlがbuiltであったシステムに基づいていることに注意してください。これは必ずしもPerlが現在実行されているシステムではありません(同じことは- $^O
および $OSNAME
); OSに違いはありませんが、アーキテクチャ名などの一部の情報は非常に異なる可能性があります。
Windowsでより具体的な情報が必要な場合は、これが役立つ場合があります。
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/;
}}
元のバージョンを書いた sysinfo.t から派生しました。
より詳細な情報が必要な場合:
my ( $osvername, $major, $minor, $id ) = Win32::GetOSVersion();
Sys :: Info :: OS は比較的クリーンなソリューションのように見えますが、現在はMacをサポートしていないようです。ただし、それを追加するのはあまり手間がかかりません。
File::Spec
のソースを調べて、オペレーティングシステムに基づいて適切なデリゲートをロードする方法を確認します。 :)
File::Spec
には、OSごとに個別のPerlモジュールファイルがあります。 File::Spec::Win32
、File::Spec::OS2
など...
オペレーティングシステムをチェックし、OSに基づいて実行時に適切な.pm
ファイルをロードします。
# From the source code of File::Spec
my %module = (
MSWin32 => 'Win32',
os2 => 'OS2',
VMS => 'VMS',
NetWare => 'Win32', # Yes, File::Spec::Win32 works on NetWare.
symbian => 'Win32', # Yes, File::Spec::Win32 works on symbian.
dos => 'OS2', # Yes, File::Spec::OS2 works on DJGPP.
cygwin => 'Cygwin',
amigaos => 'AmigaOS');
my $module = $module{$^O} || 'Unix';
require "File/Spec/$module.pm";
our @ISA = ("File::Spec::$module");
変数$ ^ O(ゼロではなく大文字の「O」)には、オペレーティングシステムの名前が保持されます。
あなたが望むものに応じて、それはあなたが望む答えを与えるかもしれないし、そうでないかもしれない-私のシステムでは、どのディストリビューションも言わずに 'linux'を与える。 WindowsやMacOSで何と言っているのかよくわかりません。
こちら ローカルマシンがPerlから実行しているOSを見つける方法のクイックリファレンス。
$ ^ O変数(英語を使用する場合は$ OSTYPE)には、Perlバイナリが構築されたオペレーティングシステムが含まれています。
古典的なワンライナー:
my $windows=($^O=~/Win/)?1:0;# Are we running on windows?
#Assign the $home_directory variable the path of the user's home directory
my $home_directory = ($^O eq /Win/) ? $ENV{HOMEPATH} : $ENV{HOME};
#Then you can read/write to files in the home directory
open(FILE, ">$home_directory/my_tmp_file");
print FILE "This is a test\n";
close FILE;
#And/or read the contents of the file
open(FILE, "<$home_directory/my_tmp_file");
while (<FILE>){
print $_;
}
close FILE;
事前にパッケージ化されたPerlモジュールでの汎用マッピングについては、 Perl::OSType
を確認してください。
Module::Build
によって使用されます。