Avatar billede sarid Nybegynder
04. april 2003 - 11:47 Der er 12 kommentarer og
1 løsning

Komme ud af en while (<>) { ... }

Hvordan kommer jeg ud af en while løkke? jeg har en følgende kode:

while (<>)
{
    $request = $request."/".sprintf("%1x", $DocumentID);
    print($request."\n");
    $response = do_request($request);
    if ($response =~ m/^5/) {
        # Vil gerne ud af denne while løkke!
    } else {
        if ($response !~ m/404/) { # If the response is a 404 then the doc has been deleted
            push(@RESULTS, "+ $response for $request");
        } else {
            push(@RESULTS, "The file: $request has been deleted");
        }
    }
    $DocumentID += 4;
}

mange tak!
Avatar billede logos Nybegynder
04. april 2003 - 12:14 #1
brug kommandoen "last" til at bryde helt ud af dit loop, på samme måde som du ville bruge "next" til at bryde den igangværende iteration af loopet.

while (<>)
{
    $request = $request."/".sprintf("%1x", $DocumentID);
    print($request."\n");
    $response = do_request($request);
    if ($response =~ m/^5/) {
        last;
    } else {
        if ($response !~ m/404/) { # If the response is a 404 then the doc has been deleted
            push(@RESULTS, "+ $response for $request");
        } else {
            push(@RESULTS, "The file: $request has been deleted");
        }
    }
    $DocumentID += 4;
}
Avatar billede erikjacobsen Ekspert
04. april 2003 - 12:16 #2
if ($response =~ m/^5/) {
    last;  # Vil gerne ud af denne while løkke!
    } else {
Avatar billede erikjacobsen Ekspert
04. april 2003 - 12:16 #3
(...alt for langsom i dag...)
Avatar billede sarid Nybegynder
04. april 2003 - 12:19 #4
Hvis jeg bruger last eller next, kommer jeg kun ud af if sætningen og ikke while løkken.
Avatar billede erikjacobsen Ekspert
04. april 2003 - 12:23 #5
Du kommer ud af while-sætningen med en last !
Avatar billede erikjacobsen Ekspert
04. april 2003 - 12:26 #6
Ovenstående virker som det står, men du kan præcisere hvilken while eller
forløkke du mener med en label (skitse):

LOOP:
while (<>) {
  print "***$_***\n";
  if (/^m/) {
      last LOOP;
  }

}
Avatar billede sarid Nybegynder
04. april 2003 - 12:30 #7
Det gøre jeg.  Problemerne ligger i min while (<>) { .. }:

$j = 0;
for ($i=0; $i<=10; $i++)
{
  print("First for: $i\n");
  while (<>)
  {
    if ($i == $j) {
      $j++;
      print("Leaving second: $j:\n");
      last;   
´  }
  }   
}

Jeg kommer ikke videre.  Jeg når kun til "First for: 0"  Hvorfor?
Avatar billede sarid Nybegynder
04. april 2003 - 12:43 #8
Ahh..

<> venter selvfølgelig på input fra STDIN.. det er bare ikke noget at vente på.  Hvordan ser sådan en ud?  Jeg skal bare har en uendelig, som ikke venter noget input.

Undskyld misforståelsen.
Avatar billede sarid Nybegynder
04. april 2003 - 12:44 #9
while (true) { ... }.

Tak for Hjælpen!!
Avatar billede sarid Nybegynder
04. april 2003 - 12:46 #10
Hvem vil gerne har pointerne??
Avatar billede logos Nybegynder
04. april 2003 - 13:08 #11
gem dem til en anden gang :-)
Avatar billede erikjacobsen Ekspert
04. april 2003 - 13:23 #12
Ingen points til mig, tak
Avatar billede sarid Nybegynder
12. april 2003 - 17:11 #13
Det skal jeg nok huske :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester