http://www.perlmonks.org?node_id=917360

In the line in question, you are dealing with one element of the array, which is a scalar, so you use \$ not @. To demonstrate with a simpler example, @a is an array. \$a[0] is the first element in the array.

-pete
"Worry is like a rocking chair. It gives you something to do, but it doesn't get you anywhere."

Replies are listed 'Best First'.
Re^2: perl error
by topaz (Initiate) on Jul 28, 2011 at 23:50 UTC
you mean i should do some thing like this ? :s
```use strict;

#-- Define in/out files
my \$inf = "test.txt" ;

#-- variables and handles
my \$line; my \$a; my \$b; my @result;

@row = ((0) x 361);
@column = ((0) x 361);
my @Matrix = ( @row, @column);

#--Open the input and output files
open (IN,  "\$inf") || die "Can't read \$inf";

while (\$line = <IN>)
{
@result   = split(/\s+/, \$line);
\$a = \$result[0];
\$a = int(\$phi);
\$b = \$result[1];
\$b = int(\$psi);

@Matrix[\$row[(\$a+180)]][\$column[(\$b+180)]] += 1;

}
Actually, your code has a number of problems.
• that isn't how you initialize a 2-dimensional array. your initialization of @matrix will make a 722 element 1d array. You would need something like: @matrix=map {[(0) x 361]} (0..361);
• From what I can see you want:  \$Matrix[\$a+180][\$b+180] += 1;

I would suggest giving Modern Perl or Learning Perl and Programming Perl a good read to get down some of the fundamentals.

Update: Also you set \$a and \$b to values, then immediately set them to int(\$phi) and int(\$psi) which are undefined. If you were running with strict and warnings the compiler would have shown you that.

-pete
"Worry is like a rocking chair. It gives you something to do, but it doesn't get you anywhere."