Hi, also ich hab hier einen kleinen Code welcher an sich auch geht. Jedoch würde ich das gern optimieren und so weit es geht nur über die Referenz arbeiten.
my $public_chat = {};
sub onFlood2 {
$public_chat->{'Manuel'} = [[time(), 'Flood ?', 1], [time()-8, 'Spam!', 4], [time()-20, 'Unknown', 1]];
$public_chat->{'Robert'} = [[time(), 'Bla Bla', 2], [time()-8, 'FLOOOD', 7], [time()-20, 'Lalala', 1]];
# Durchlaufe jeden Benuter
foreach (keys %$public_chat)
{
my $user_ref = $public_chat->{$_};
for (my $i=0; $i < @$user_ref; $i++)
{
if ($user_ref->[$i][2] > 3)
{
delete $user_ref->[$i];
}
}
}
print Dumper(\$public_chat);
######
#
# try to do it with ref !
$public_chat->{'Manuel'} = [[time(), 'Flood ?', 1], [time()-8, 'Spam!', 4], [time()-20, 'Unknown', 1]];
$public_chat->{'Robert'} = [[time(), 'Bla Bla', 2], [time()-8, 'FLOOOD', 7], [time()-20, 'Lalala', 1]];
foreach (keys %$public_chat)
{
my $user_ref = $public_chat->{$_};
foreach my $data_ref (@$user_ref)
{
if ($data_ref->[2] > 3)
{
# Yes, its same about top "delete"
print "Same ?: ".Dumper(\$data_ref);
# but how can i delete this from original ?
# not work
#delete $data_ref;
#not work
#delete @$data_ref;
# not work
#delete $data_ref->{};
}
}
}
}
&onFlood2();
Die 1te foreach schleife macht alles richtig, sie löscht Einträge welchen im Array an 3ter (2 Index) einen höheren wert als 3 hat. In der 2ten foreach bekomme ich zwar den richtigen Eintrag aber finde keine Möglichkeit diesen zu löschen (es muss löschen und nicht nur leeren sein).
Ich hab auch schon versucht das ganze mit "grep" zu verbessern aber lange beim gleichen Problem das ich die Ref nicht löschen kann.
über Ideen oder Lösungen würde ich mich freuen
mfg Spoocy