use Win32::SystemInfo; use strict; use warnings; my (%phash, %mhash, $proc, $cpuinfo); $proc = Win32::SystemInfo::ProcessorInfo(); Win32::SystemInfo::ProcessorInfo(%phash); Win32::SystemInfo::MemoryStatus(%mHash, "MB"); $cpuinfo = "Installed Processors: $phash{NumProcessors}\n"; foreach my $i (0..($phash{NumProcessors} - 1)){ $cpuinfo .= "\nProcessor ".($i + 1).":\n"; $cpuinfo .= "Processor level: $proc\n"; $cpuinfo .= "Processor Speed: $phash{"Processor$i"}{'MHZ'} MHz\n"; $cpuinfo .= "Identifier: $phash{"Processor$i"}{'Identifier'}\n"; $cpuinfo .= "Vendor Identifier: $phash{"Processor$i"}{'VendorIdentifier'}\n"; $cpuinfo .= "Processor Name: $phash{"Processor$i"}{'ProcessorName'}\n"; } print $cpuinfo;