Условный оператор (? :
) имеет более высокий приоритет, чем запятая, но ниже периода.Таким образом, первая строка анализируется как:
print("$str is " , (ispalindrome($str) ? "" : " not"), " a palindrome\n")
, а вторая - как:
print(("$str is " . ispalindrome($str)) ? "" : (" not" . " a palindrome\n"))
Последняя строка должна фактически вывести «», а не «1»;это на самом деле то, что вы получили?