in reply to walking an array and unshifting

The reason that your script works is that it isn't really changing the array. You're appending an empty set to it.

If there were one or more values after the array name in the unshift call, the script would print "1", then consume all available memory before doing anything else.

update: I should have said "you're not prepending anything to the array.

Also, the script might print more things before running out of memory, if you happen to prepend more than one element at a time, and the second element of that set was not "2" or "4". But the script will still blow up.

Replies are listed 'Best First'.
Re: Re: walking an array and unshifting
by smackdab (Pilgrim) on Jun 09, 2002 at 03:53 UTC
    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???

      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