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
|
---|
In Section
Seekers of Perl Wisdom