use constant VER_PLATFORM_WIN32_WINDOWS => 1; # Win9x line use constant VER_PLATFORM_WIN32_NT => 2; # WinNT line use constant VER_NT_WORKSTATION => 1; my %oses = ( '9x 4.0 ???' => '95', '9x 4.10 ???' => '98 or 98 SE', '9x 4.90 ???' => 'Me', 'NT 3.51 ???' => 'NT3.51', 'NT 4.? ???' => 'NT4', 'NT 5.0 WS' => '2000', 'NT 5.1 WS' => 'XP', 'NT 5.2 ???' => 'XP Professional x64 Edition, ' .'Server 2003, ' .'Server 2003 R2 or ' .'Home Server', 'NT 6.0 WS' => 'Vista', 'NT 6.0 !WS' => 'Server 2008', 'NT 6.1 WS' => '7', 'NT 6.1 !WS' => 'Server 2008 R2', ); my ($id, $major, $minor, $prod_type) = ( Win32::GetOSVersion() )[4,1,2,8]; my $id_str = join(' ', $id == VER_PLATFORM_WIN32_NT ? 'NT' : '9x', "$major.$minor", $prod_type == VER_NT_WORKSTATION ? 'WS' : '!WS' ], ); my $os = $oses{$id_str};