That piece of doc expains dosish platforms, so it is closely related to Win32::GetOSVersion function.
perldoc Win32 contains an answer to your question:
Win32::GetOSVersion()
[CORE] Returns the array (STRING, MAJOR, MINOR, BUILD, ID), where
the elements are, respectively: An arbitrary descriptive string, t
+he
major version number of the operating system, the minor version
number, the build number, and a digit indicating the actual
operating system. For the ID, the values are 0 for Win32s, 1 for
Windows 9X and 2 for Windows NT/2000/XP. In scalar context it
returns just the ID.
Currently known values for ID MAJOR and MINOR are as follows:
OS ID MAJOR MINOR
Win32s 0 - -
Windows 95 1 4 0
Windows 98 1 4 10
Windows Me 1 4 90
Windows NT 3.51 2 3 51
Windows NT 4 2 4 0
Windows 2000 2 5 0
Windows XP 2 5 1
Windows .NET Server 2 5 1
Unfortunately as of June 2002 there is no way to distinguish betwe
+en
.NET servers and XP servers without using additional modules.
Courage, the Cowardly Dog | [reply] [d/l] |
Thanks, that's exactly what i needed to know.
Win32::GetOSVersion() in scalar context will get the job done :)
$|=$_="1g2i1u1l2i4e2n0k",map{print"\7",chop;select$,,$,,$,,$_/7}m{..}g
| [reply] |
It appears to be some kind of Windows family ID. The actual value appears to be meaningless, since WinCE definitely isn't of a higher level than Windows XP, for example.
I interpret it as follows:
0 | Windows 3.1, 3.11, WFW | The 16 bit Windows generation |
1 | Win95/98/ME | Win95 and descendants |
2 | WinNT3.x, WinNT4.x, Win2k, WinXP | the NT family |
3 | WinCE | Windows Control Edition, for handheld devices. |
I can't say I can even find a trace of it in Config.pm, nor in the \%Config hash it creates. I wouldn't trust those values anyway, as they are likely the values at the time perl was compiled. For example, on my system, $Config{osversion} is '4.0', even though I'm on Win98. As you can see, I should have gotten '4.1' or '4.10'.
I think using an API call, through Win32::API, would be the safest way. As for which API call... there is GetVersion(). You'll get the value of the last column, live this time, and at least one bit saying whether this is NT or not. But still, GetVersionEx() looks like the better choice.
use Win32::API;
my $tpl = 'V5Z128';
my $struc = pack $tpl, 5*4+128, (0) x 4, '';
my $GetVersionEx = new Win32::API('kernel32', 'GetVersionExA', ['P'],
+'N');
$GetVersionEx->Call($struc);
my($OSVersionInfoSize, $MajorVersion, $MinorVersion, $BuildNumber, $Pl
+atformId, $CSDVersion) = unpack $tpl, $struc;
print << "END";
major: $MajorVersion
minor: $MinorVersion
build: $BuildNumber
platform: $PlatformId
"$CSDVersion"
END
| [reply] [d/l] |
s/Windows Control Edition/Windows Compact Edition/;
:)
| [reply] |