in reply to hash question

I don't understand the output you want, but it is simple to stuff it all into a hash-of-hashes data structure (perldsc). UPDATE: I mistakenly left the "next" line in there from the OP's code. It is unnecessary, and I have commented it out.
#!/usr/bin/env perl use Data::Dumper; use strict; use warnings; my %data; while (<DATA>) { #next unless /^aixFsMountPoint|aixFsSize|aixFsFree/i; if ( /(\w+).(\d+)\s*=\s*(.*)/ ) { $data{$1}{$2} = $3; } } print Dumper(\%data); __DATA__ actual STDOUT: aixFsMountPoint.1 = "/" aixFsMountPoint.2 = "/usr" aixFsMountPoint.3 = "/var" aixFsMountPoint.4 = "/tmp" aixFsMountPoint.5 = "/local.home" aixFsMountPoint.6 = "/admin" aixFsMountPoint.7 = "/proc" aixFsMountPoint.8 = "/opt" aixFsMountPoint.9 = "/var/adm/ras/livedump" aixFsMountPoint.10 = "/net" aixFsMountPoint.11 = "/net/nim01at/opt/CBC-CFG" aixFsMountPoint.12 = "/net/nim01at/opt/CBC-CFG" aixFsSize.1 = 3072 aixFsSize.2 = 8512 aixFsSize.3 = 10240 aixFsSize.4 = 4096 aixFsSize.5 = 64 aixFsSize.6 = 128 aixFsSize.7 = 0 aixFsSize.8 = 4096 aixFsSize.9 = 3072 aixFsSize.10 = 0 aixFsSize.11 = 7168 aixFsSize.12 = 7168 aixFsFree.1 = 2631 aixFsFree.2 = 3232 aixFsFree.3 = 2373 aixFsFree.4 = 1923 aixFsFree.5 = 46 aixFsFree.6 = 127 aixFsFree.7 = 0 aixFsFree.8 = 3000 aixFsFree.9 = 3071 aixFsFree.10 = 0 aixFsFree.11 = 3463 aixFsFree.12 = 3463
prints...
$VAR1 = { 'aixFsFree' => { '6' => '127', '11' => '3463', '3' => '2373', '7' => '0', '9' => '3071', '12' => '3463', '2' => '3232', '8' => '3000', '1' => '2631', '4' => '1923', '10' => '0', '5' => '46' }, 'aixFsMountPoint' => { '6' => '"/admin"', '11' => '"/net/nim01at/opt/CBC-CFG"', '3' => '"/var"', '7' => '"/proc"', '9' => '"/var/adm/ras/livedump"', '12' => '"/net/nim01at/opt/CBC-CFG"', '2' => '"/usr"', '8' => '"/opt"', '1' => '"/"', '4' => '"/tmp"', '10' => '"/net"', '5' => '"/local.home"' }, 'aixFsSize' => { '6' => '128', '11' => '7168', '3' => '10240', '7' => '0', '9' => '3072', '12' => '7168', '2' => '8512', '8' => '4096', '1' => '3072', '4' => '4096', '10' => '0', '5' => '64' } };

Replies are listed 'Best First'.
Re^2: hash question
by CountZero (Bishop) on Aug 23, 2011 at 21:59 UTC
    Wouldn't it be more careful to look for a literal "." rather than any character?

    In other words, use

    /(\w+)\.(\d+)\s*=\s*(.*)/
    rather than use
    /(\w+).(\d+)\s*=\s*(.*)/

    CountZero

    A program should be light and agile, its subroutines connected like a string of pearls. The spirit and intent of the program should be retained throughout. There should be neither too little or too much, neither needless loops nor useless variables, neither lack of structure nor overwhelming rigidity." - The Tao of Programming, 4.1 - Geoffrey James

      Wouldn't it be more careful to look for a literal "." rather than any character?
      Yes, that is what I meant to do. I forgot to back-whack the .
Re^2: hash question
by Jim (Curate) on Aug 23, 2011 at 21:05 UTC

    Here's the same thing, but with a single regular expression pattern...

    while (<DATA>) { next unless m{ ^ ( aixFsMountPoint | aixFsSize | aixFsFree ) # $1 \. ( \d+ ) # $2 \s* = \s* ( .* ) # $3 }ix; $data{$1}{$2} = $3; }

    But there are plenty of excellent config file (INI file) modules on CPAN for doing this work.

    Also, beware the use of the i modifier to match case-insensitively tokens you're then going to use as the keys of a hash.

    aixFsMountPoint ≠ aixfsmountpoint ≠ AIXFSMOUNTPOINT

Re^2: hash question
by dbs (Sexton) on Aug 23, 2011 at 20:07 UTC
    I had attempted another try using
    while (<$SN>) { next unless /^aixFsMountPoint|aixFsSize|aixFsFree/i; my(@tmp) = split("=", $_, 0); my ($id) = $tmp[0]; my ($fs) = $tmp[1]; $snmpo{$id} = $fs; }
    But I like the regexp way better! thx!!!