in reply to Re^2: foreach argument modification inside loop, followed by return from loop
in thread foreach argument modification inside loop, followed by return from loop
Do you think it will be more clear if it will return number of element to remove, and we remove it outside for loop?
Yes, IMHO. My approach, using my own conventions, would be something like this (untested):
sub do_finish { my $self = shift; my ($jobid_to_delete) = @_; delete $self->{jobs_h}->{$jobid_to_delete}; my $i_to_delete; my $ar_jobs_a = $self->{jobs_a}; JID: for my $i (0 .. $#$ar_jobs_a) { my $jid = $ar_jobs_a->[$i]{jobid}; next JID unless $jid == $jobid_to_delete; $i_to_delete = $i; last JID; } splice @$ar_jobs_a, $i_to_delete, 1 if defined $i_to_delete; return @$ar_jobs_a ? 'ok' : 'done'; }
Update: Renamed $jobid to $jobid_to_delete in interests of self-documentation.
In Section
Seekers of Perl Wisdom