Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris

Re: dynamically initializing variables with perl

by busunsl (Vicar)
on Jan 07, 2003 at 07:11 UTC ( #224884=note: print w/replies, xml ) Need Help??

in reply to dynamically initializing variables with perl

Looks like you want to have variables called $C1, $C2, a.s.o.

Normally you use an array for things like that:

my @C; for (my $i=0; $i< $msgcount; $i++) { $C[$i] = param("C$i"); }
or without the for loop:
my @C = map { param("C$_") } 0..$msgcount - 1;
Update: Changed $C[0] to $C[$i]
Thanks to Hofmator for this catch.

Replies are listed 'Best First'.
Re: Re: dynamically initializing variables with perl
by chromatic (Archbishop) on Jan 07, 2003 at 17:45 UTC

    I wouldn't use the map, though it's popped up a few times recently. What if someone passed parameters such as this?

    C1 = 1 C2 = 1 C2 = 0 C2 = 1 C3 = 0

    You'll end up with an array of (1, 1, 0, 1, 0) when you're only expecting three checkboxes.

      I suppose the checkboxes are created dynamically since it is a mail app.
      So they will be named uniquely and this shouldn't be a problem.

        You're right, it shouldn't be a problem, if you trust the client. Never trust the client.

Re: Re: dynamically initializing variables with perl
by db2admin (Acolyte) on Jan 08, 2003 at 05:18 UTC
    Thank you for your help. I tried the for loop but it doesn't initialize the variables $C1, $C2, $C3 even though the $msgcount is a value of 3. Just from looking at it, @C is never populated with any values so I would suppose @C would have to be set to the variables $C1, $C2 ... which I don't think will even be syntatically correct (i.e. @C = ($C1, $C2, ...)).

    The map function does work when the checkbox is set to ON (when checked) but if the checkbox is not set, there is no value returned and the map function will not put anything into the array element for that checkbox. So if I were to delete message 1 and message 3, there is no way to correspond the array elements with a particular message since the array looks like this:

    $C[0] = "ON"; $C[1] = "ON";
    When in reality, it should look like:
    $C[0] = "ON"; $C[1] = ""; $C[2] = "ON";
    I am not aware of an option with the checkbox to have two settings. It's either ON or not ON (i.e. no value).

    Thanks again.

    David K.

      Try the following map (untested):
      my @C = map { param("C$_") || 'OFF' } 0..$msgcount - 1;
      It should give something like:
      $C[0] = "ON"; $C[1] = "OFF"; $C[2] = "ON";
        Wow! that works perfectly! Thank you very much.

        Best Regards,

        David K.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://224884]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (5)
As of 2020-05-27 07:33 GMT
Find Nodes?
    Voting Booth?
    If programming languages were movie genres, Perl would be:

    Results (153 votes). Check out past polls.