http://www.perlmonks.org?node_id=1208816

bartrad has asked for the wisdom of the Perl Monks concerning the following question:

Hi all, I have a problem I just cannot figure out. I'm reading an input line by line and matching stuff to pass into a key. The input data is as follows

dnsname1: static-route 1.1.1.1/30 next-hop 2.2.2.2 preferen +ce 200 bfd-enable tag 685 dnsname1- service-name "XYZ12345-s12345" dnsname2: static-route 3.3.3.3/30 next-hop 4.4.4.4 bfd-enab +le tag 635 dnsname2- service-name "XYZ67891-s67890"

I initially matched just on the static-route line to print it out with the dns name, but actually it would be good to also print out what service it belongs to, which appears on the line below. How would I match on both lines and pass the service-name to a variable as well that I could feed into the same key? The code is riddled with perltidy errors as I've been playing, but this is how far I got.

if (@grep) { my $hop; my $static; my $tag; my $vpna; my $dns; print GREEN "\nFound some static routes...\n", RESET; foreach my $line (@grep) { if $line ( =~ m/^(\S+):\s+static-route (\S+) next-hop (\S+)( pre +ference \d+|)( bfd-enable|) tag (\d+)/ ){ my ( $dns, $static, $hop, $tag ) = ( $1, $2, $3, $6 ); } if $line ( =~ m/^(\S+)-\s+service-name (\S+)/ ){ my ($vpna) = ( $2 ); } $results{$dns}{$vpna}{$static}{$hop} = $tag; } print Dumper \%results; for my $box ( keys %results ) { print BOLD "\n$box\n", RESET; for my $static ( keys %{ $results{$box} } ) { for my $hop ( keys %{ $results{$box}{$static} } ) { print "$static\t next-hop $hop\t"; print "tag $results{$box}{$static}{$hop}\n"; print "\n"; } } } } else { print "No static routes exist for $ip\n"; } }