1
2
3
4
5
6
7
8
9
10
11
12
$VAR1 = {
'Helfer1' => {
'Mail' => 'Mail@adresse',
'RicDump' => '0',
'EnableMail' => '1',
'EnableTS' => '0',
'Kommentar' => '',
'HandyTS' => '+49xxxxxx',
'RIC' => '1234560,1234561,1234562,1234563',
},
....
};
$lookup{$ric} = \@emails # oder statt @emails auch @helfer, wenn mehr Daten gebraucht werden
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
my $hash = { 'Helfer1' => { 'Mail' => 'Mail1@adresse', 'RicDump' => '0', 'EnableMail' => '1', 'EnableTS' => '0', 'Kommentar' => '', 'HandyTS' => '+49xxxxxx', 'RIC' => '1234560,1234561,8,123462,123453', }, 'Helfer3' => { 'Mail' => 'Mail3@adresse', 'RicDump' => '0', 'EnableMail' => '1', 'EnableTS' => '0', 'Kommentar' => '', 'HandyTS' => '+49xxxxxx', 'RIC' => '1234560,1234561,1234562,1234563,99', }, }; my $externeRIC = "99"; my $sendMail = join ",", map { $hash->{$_}->{Mail} } grep { $externeRIC ~~ [ split /,/, $hash->{$_}->{RIC} ] } keys %$hash;
grep { $externeRIC ~~ [ split /,/, $hash->{$_}->{RIC} ] }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
my $sendMail = join ",", # setze diese Werte als kommagetrennte Zeichenkette zusammen # # aus den Werten des map map { $hash->{$_}->{Mail} # erzeuge ein Array aus Mailadressen mit den gefundenen Schlüsseln } # aus den Werten des grep # grep { # suche alle Schlüssel $externeRIC # bei denen externeRIC ~~ # übereinstimmt (smartmatch) [ # mit dem Array split /,/, $hash->{$_}->{RIC} # aus den mit Komma gesplitteten Werten von RIC ] } # keys %$hash; # iteriere über alle Schlüssel des Hashes
Guest perlensammler22gibts eine Möglichkeit, ohne Schleife