in reply to Re: walking an array and unshifting
in thread walking an array and unshifting

After reading your post, I am concerned ;-)

I thought that each "unshift" was removing the first entry in the array(ie $array|0|)...where does the "empty set" come in???

  • Comment on Re: Re: walking an array and unshifting

Replies are listed 'Best First'.
Re: Re: Re: walking an array and unshifting
by graff (Chancellor) on Jun 09, 2002 at 03:56 UTC
    perldoc -f unshift unshift ARRAY,LIST Does the opposite of a "shift". Or the opposite of a "push", depending on how you look at it. Prepends list to the front of the array, and returns the new number of elements in the array. unshift(ARGV, '-e') unless $ARGV[0] =~ /^-/; Note the LIST is prepended whole, not one element at a time, so the prepended elements stay in the same order. Use "reverse" to do the reverse.
    addendum: If you choose to use shift instead of unshift, you will not run out of memory, and you will see only one element ("1") printed out, which is maybe what you were expecting in the first place.
      OUCH, can't believe I made that mistake...I am done for the night...I meant shift....I am trying to walk the array and remove some value that meet a certain criteria. I just switched to using a temp array to save the "good" ones...

      If I walk them backwards, can I pop them off while enumerating ???

      thanks
        Now that you've explained what you want to do...

        Take a look at splice. shift and pop remove values from the ends of an array, not the current position.

        From perlsyn section "Foreach Loops":

        If any part of LIST is an array, foreach will get very confused if you add or remove elements within the loop body, for example with splice. So don't do that.

        As merlyn and tadman imply below, the "right" way to do it depends on what else you are doing in that chunk of code, and on your future use of @list (both pre- and post-modification).