in reply to Strange "Useless use of constant" message: should not appear at all!

@movements == (0, 1);
You can't compare arrays/lists for equality directly. The == and eq operators work on scalars, so @movement and (0, 1) are both being evaluated in scalar context. Of course, (0, 1) in scalar context simply throws away the 0, which is the source of the error.

If you want to compare these arrays for equality, since they are so simple, you can stringify them:

local $" = ","; if ("@movement" eq "0,1") { ... } elsif ("@movement" eq "1,0") { ... } ...
Or a more general comment, even use a lookup table:
local $" = ","; my %dir = ( "0,1" => "north", "1,0" => "east", "0,-1" => "south", "-1,0" => "west" ); $from = $dir{"@movement"};

blokhead