http://qs321.pair.com?node_id=619713


in reply to Re: how to pull in all params that are numbered
in thread how to pull in all params that are numbered

You should iterate the parameter list with for, not with while - while will result in an infinite loop.
  • Comment on Re^2: how to pull in all params that are numbered

Replies are listed 'Best First'.
Re^3: how to pull in all params that are numbered
by sulfericacid (Deacon) on Jun 18, 2007 at 17:53 UTC
    Actually it didn't result in an infinite loop and I asked in the chatterbox prior to posting and two other people said that param() should stop the loop once it's iterated through with for(). I could be wrong but when I tested it, it worked and stopped once the page loaded.


    "Age is nothing more than an inaccurate number bestowed upon us at birth as just another means for others to judge and classify us"

    sulfericacid
      The problem is that while does not iterate over a list, it simply checks for a true value. For example, while (1){} will run forever, whereas for (1){} will run once.

      The same behaviour occurs when test being evaluated is param(). Additionally, while (param()){} will not modify $_. Perhaps you tested the script without any arguments, in which case it would have behaved as expected.

      Here is a simple test:

      #!/usr/bin/perl use strict; use warnings; use CGI qw(param); my $runs =0; my @num; print "Content-type: text/plain\n\n"; while(param()) { printf "run %d\n", $runs++; if ($runs > 10) { print "Ran over 10 times\n"; exit; } }
      You can verify it by adding the parameters on the commandline, e.g.
      perl foo.pl a=b