#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my %SysInfo; get_cpu_info(\%SysInfo); get_mem_info(\%SysInfo); # Debug print Dumper(\%SysInfo); open(OUTFILE, "> ./sysinfo.txt") or die("$!"); foreach my $section (keys %SysInfo) { printf(OUTFILE "=== %s ===\n",$section); foreach my $name (keys( %{$SysInfo{$section}} )) { printf(OUTFILE "%s\t==>\t%s\n",$name, $SysInfo{$section}{$name}); } } close(OUTFILE); exit(0); sub get_cpu_info { my ($refSi) = @_; open(CPUINFO, "/proc/cpuinfo") or die("$!"); my @relevant_lines = grep(/(^processor|^cpu MHz)/, ); close(CPUINFO); my $current_cpu; foreach my $info (@relevant_lines) { if ($info =~ /processor\s*:\s*(\d+)/) { $current_cpu = $1; } elsif ($info =~ /cpu MHz\s*:\s+(\S+)/) { $$refSi{'Central Processing Units'}{$current_cpu} = $1; } } } sub get_mem_info { my ($refSi) = @_; open(MEMINFO, "/proc/meminfo") or die("$!"); my @relevant_lines = grep(/(^MemTotal|^MemFree|^Buffers|^Cached)/, ); close(MEMINFO); foreach my $info (@relevant_lines) { if ($info =~ /^(\w+):\s+(\d+)\s+(\w+)$/) { my $name = $1; my $amount = $2; my $unit = $3; $$refSi{'Memory Information'}{$name} = "$amount $unit"; } } }