If you're using $_, you can just say if (/blahblah/) { instead of if ($_ =~ /blahblah/) {. $_ is the default 'it' ... use it as such.
If it wasn't for the traps thing, you could write everything as:
But, because of the 'SNMP Traps Generated' string, that doesn't work.while (<DATA>) { chomp; next unless /^(\S+):\s+(.+)\s*$/; my ($key, $val) = (uc $1, $2); if ($key eq 'DATE') { push @data, $hash if defined $hash; $hash = {}; } $hash->{$key} = $val; }
But, can we make it work?
Why do it this way? If the data adds new things to track, it's easier to handle them. Plus, this way is quicker. While that's often not a big issue, what if this script is to be run every 15 minutes on a huge server? It does no good if the script takes 16 minutes to run ...use strict; my $hash = undef; my $trap = undef; my @data = (); while (<DATA>) { chomp; next unless /^\s*(\S+):\s+(.+)\s*$/o || /^\s*Trap (\S+):\s+(.+)\s*$/o || /^\s*SNMP (\S+) Generated:\s*$/o; my ($key, $val) = (uc $1, $2); if ($key eq 'DATE') { if (defined $hash) { if (defined $trap) { push @{$hash->{TRAPS}{TRAP_LIST}}, $trap; $trap = undef; } push @data, $hash if defined $hash; } $hash = {}; } elsif ($key eq 'TRAPS') { $hash->{TRAPS} = { TRAP_LIST => [] }; $trap = {}; next; } if ($key eq 'GENERIC' || $key eq 'SPECIFIC' || $key eq 'OID') { $hash->{TRAPS}{$key} = $val; } elsif (defined $trap) { $trap->{$key} = $val; if ($key eq 'DATA') { push @{$hash->{TRAPS}{TRAP_LIST}}, $trap; $trap = {}; } } else { $hash->{$key} = $val; } } if (defined $hash) { if (defined $trap) { push @{$hash->{TRAPS}{TRAP_LIST}}, $trap; $trap = undef; } push @data, $hash if defined $hash; } use Data::Dumper; print Data::Dumper->Dump([\@data]); __DATA__ Date: Mon Feb 17 13:14:19 2003 SServer: formula3 Device: 111.222.123.124 CString: public Port: 162 SNMP Traps Generated: Trap OID: 1.3.6.1.4 Generic: 2 Specific: 0 Varbind: 1.3.6.1.2.1.2.2.1.1 Type: 2 Data: 10 Varbind: 1.3.6.1.2.1.2.2.1.1 Type: 2 Data: 20 Varbind: 1.3.6.1.2.1.2.2.1.7 Type: 2 Data: 20 Varbind: 1.3.6.1.2.1.2.2.1.8 Type: 2 Data: 30 Date: Mon Feb 17 13:14:22 2003 SServer: formula3 Device: 111.164.121.125 CString: public Port: 162 SNMP Traps Generated: Trap OID: 1.3.6.1.4 Generic: 3 Specific: 0 Varbind: 1.3.6.1.2.1.2.2.1.1 Type: 2 Data: 12 Varbind: 1.3.6.1.2.1.2.2.1.1 Type: 2 Data: 20
------
We are the carpenters and bricklayers of the Information Age.
Don't go borrowing trouble. For programmers, this means Worry only about what you need to implement.
In reply to Re2: recomendations needed for type of data structure
by dragonchild
in thread recomendations needed for type of data structure
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |