The code snippets don't correspond to each other.
value 2 doesn't match
/update\s*[table\s*]rmdb_dbo./i'. Moreover, the string 'table in the square brackets seems like a meaningful word, but square brackets introduce character classes, so
[table\s*] in fact matches a single character a, b, e, l, t, asterisk, or whitespace.
Try to post runnable code like the following:
#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };
my %h = (
'connection-id0' => {
username1 => ['value 1', 'value 2'],
username2 => [ 'value5' ],
},
'connection-id1' => {
username1 => ['value 2', 'value 3'],
},
'connection-id2' => {
username1 => ['value 3', 'value 4'],
}
);
for my $connection (keys %h) {
foreach my $userid (keys %{ $h{$connection} }) {
my @ar = @{ $h{$connection}{$userid} };
if (lc $userid eq 'username1') {
say "@ar" if grep /value 2/i, @ar;
}
}
}
I used
grep so the "value 2" might be located anywhere in the array.
map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]