From: Oisin Peavoy <[EMAIL PROTECTED]>
> I have a Perl program which I'm having some difficulty with, 
> essentially I'm
> trying to `shift()' all the ellements in an array untill an element
> containing a forward slash is encountered. Howerver, the method I'm
> using is producing incorrect results.
> 
> If the forward slash is placed infront of "fairy" or "dust" the
> program executes correctly, if it's placed infront of one of the other
> words in the list the program doesn't produce the correct results.
> 
> Can anyone help with this? What am I doing wrong?
> 
> ---CODE---
> my @array = ("fairy", "goblin", "emerald","dust","/dice");
> 
> foreach (@array){
>      if(/(\/)+.+/){
>          print "last\n";
>          last;
>      }else{
>       print "shift\n";
>       shift @array;
>      }
> }
> print "@array";

The problem is that the foreach() doesn't notice that you shifted off 
an item from the array and moves the pointer anyway. You want to do 
something like this instead:

while (@array) {
        last if $array[0] =~ m{/};
        shift(@array);
}

That is if I understand your request correctly.

The m{/} is just another, more readable way to write /\//. That is a 
regexp that matches any string containing a slash. Both the .+ and 
the () in your regexp was unnecessary.

HTH, Jenda
===== [EMAIL PROTECTED] === http://Jenda.Krynicky.cz =====
When it comes to wine, women and song, wizards are allowed 
to get drunk and croon as much as they like.
        -- Terry Pratchett in Sourcery


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to