Looping through array with foreach - Programmers Heaven

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

Looping through array with foreach

dbrandtdbrandt Posts: 43Member
Here's what I want to do.

[code]
foreach (@array)
{
if #condition is true
delete #current array element in loop
}
[/code]

So how do I get the current element in the loop? "Delete $_" doesn't work...

Comments

  • SouldrinkerSouldrinker Posts: 143Member
    : Here's what I want to do.
    :
    [code]:
    foreach (@array)
    {
    my $var = $_;
    if #condition is true
    delete $var;
    }
    [/code]:
    :
    : So how do I get the current element in the loop? "Delete $_"
    : doesn't work...
    :

    as far as I know, you have to read out $_ in the first line of your loop
    best regards,

    sebastian besteman
    ceo
    solvention

    http://solvention.de
    [email protected]
  • JonathanJonathan Posts: 2,914Member
    The problem is that delete on an array requires an index, not the value of the element itself. So you need to do a normal for loop...

    [code]for (0..$#array) {
    if (condition involving $array[$_]) {
    delete $array[$_];
    }
    }[/code]

    However, a far more elegant way to do this is use grep.

    [code]@array = grep { !condition } @array;[/code]

    I write !condition because what goes in the block is the condition that has to be true to keep the value, so you need to invert your condition.

    Jonathan
    ###
    for(74,117,115,116){$::a.=chr};(($_.='qwertyui')&&
    (tr/yuiqwert/her anot/))for($::b);for($::c){$_.=$^X;
    /(p.{2}l)/;$_=$1}$::b=~/(..)$/;print("$::a$::b $::c hack$1.");
Sign In or Register to comment.