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


in reply to perl error

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."
        Many thanks for your advice :) I will try my best
        He definitely wants $row[$a+180] rather than $row($a+180) in the matrix operation, but I really think he wants just $a+180, since he never fills @row and @column with anything other than 0.


        -pete
        "Worry is like a rocking chair. It gives you something to do, but it doesn't get you anywhere."
        Yes ofcourse, sorry I missed that :s Many thanks for your help :)