<br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><div style="font-family: courier new,monospace;" class="gmail_quote">On Wed, Jun 30, 2010 at 11:41 AM, Shlomi Fish <span dir="ltr">&lt;<a href="mailto:shlomif@iglu.org.il">shlomif@iglu.org.il</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hi Fulko,<br>
<div class="im"><br>
On Wednesday 30 Jun 2010 18:06:49 Fulko Hew wrote:<br>
&gt; As the subject line asks...<br>
&gt; what I&#39;d like to do is something like<br>
&gt;<br>
&gt; foreach (@array) {<br>
&gt;     if (condition) {<br>
&gt;         splice @array, this_entry, 1;<br>
&gt;         next;<br>
&gt;     }<br>
&gt;     do processing on this entry;<br>
&gt; }<br>
&gt;<br>
&gt; @array now contains a sub-set of the original<br>
&gt; that I can now further process<br>
&gt;<br>
<br>
</div>It&#39;s always a bad idea to modify the order of an array&#39;s elements while<br>
iterating over it using foreach. Don&#39;t do that.<br></blockquote><div><br>OK, let me give you the specific example...<br>The array contains all of the lines of a file...<br>The foreach is used to loop over then, and &#39;take action&#39; upon them.<br>

But when I&#39;m done I want all the empty lines stripped from the array (&#39;just because!&#39;)<br> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">


I should also note splicing an index out of the middle of an array is an O(N)<br>
operation where N is the number of elements in the array.<br><div class="im"></div></blockquote><div><br>I know, thats why I was looking for a &#39;faster&#39; technique.<br><br>I guess the alternative could be (shown simplified):<br>

<br>my @array;<br>while ($_ = &lt;&gt;) {<br>    next unless $_;      # skip empty lines<br>    push @array, $_;     # but remember non-empty lines<br>    process($_);<br>}<br> </div></div><br style="font-family: courier new,monospace;">