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


in reply to Palindrome array

The ugly truth is both don't work!

eq forces scalar context and is meant to compare strings

So in the first code you are checking if the sizes (after stringification) are equal.

DB<107> @a = 1..3 => (1, 2, 3) DB<108> @a eq "3" => 1

in the second you have scalar from reverse on RHS

DB<123> (reverse @a) => (3, 2, 1) DB<124> scalar (reverse @a) => 321 DB<125> "321" eq (reverse @a) => 1

please stop doing weird things!

you can try the (less weird) smart match operator ~~ to compare arrays.

DB<129> @a=(3,1,3) => (3, 1, 3) DB<130> @a ~~ [reverse @a] => 1 DB<131> @a ~~ [3,1,3] => 1 DB<132> @a=1..3 => (1, 2, 3) DB<133> @a ~~ [reverse @a] => ""

a poor man's solution with eq is to explicitly stringify on both sides.

DB<143> @a=(3,1,3) => (3, 1, 3) DB<144> @ar=reverse @a => (3, 1, 3) DB<145> "@a" => "3 1 3" DB<146> "@a" eq "@ar" => 1

But this depends on the nature of your array elements, don't be too surprised about:

DB<151> "@a" => "3 1 3" DB<152> @b=(3,"1 3") => (3, "1 3") DB<153> "@a" eq "@b" => 1

Cheers Rolf