in reply to Re (tilly) 1: associative array problem
in thread associative array problem

It is an array a multidimensional array at that, the script is from a much more complex script it is just a simulation of the problem. So instead of getting the values from STDIN ex.

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($names, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; if ($INPUT{$names}) { $INPUT{$names} = $INPUT{$names}.",".$val +ue; } else { $INPUT{$names} = $value; } }
I have assigned it directly to array! & Instead of including the file and accessing it and load it in an array using loops I just directly given its values for the sake of the simulation.

I don?t understand what you mean my CGI? But if its on the extension its the same!

Replies are listed 'Best First'.
Re (tilly) 3: associative array problem
by tilly (Archbishop) on Nov 02, 2001 at 20:52 UTC
    You are parsing your CGI input directly, and doing it in a broken way. What I was talking about is using the standard CGI module to parse your input for you, more flexibly, meeting the whole standard, without security holes, with support for file uploads, with support for command line debugging, etc, etc, etc. Read use CGI or die; for details on what people typically get wrong (yes, you made the typical mistakes), and for simple examples of how to use the module.

    As for the problem you complained about, I already told you why you have the behaviour you do, and how to automatically catch the error that leads to it. And what I meant by saying that you're using an array instead of a hash is that you are using strings like '01' as indexes into an array. I strongly recommend either making that a hash, or just using numbers. As it stands your choice of index and data structure are passing conflicting messages. Experienced programmers see conflicts like that and label them as mistakes. What kind of mistake may not be obvious, but they are mistakes.

    UPDATE
    BTW you may find it better to just use a nested hash. For instance if you just assign your values like:

    $STUDQT{'32000012'}{mname}[1] = 0;
    without initializing $STUDQT{'32000012'}{mname}, Perl will no longer misbehave on you. (Of course strict.pm is still strongly recommended to catch other incidences of the same mistake. Catching bugs early is a Good Thing.)