Период Perl против оператора запятой - PullRequest
9 голосов
/ 22 сентября 2011

Кто-нибудь знает, почему

print "$str is " , ispalindrome($str)?"":" not" , " a palindrome\n" 

печатает "мадам палиндром" *

, но

print "$str is " . ispalindrome($str)?"":" not" . " a palindrome\n"

печатает "1"?

1 Ответ

19 голосов
/ 22 сентября 2011

Условный оператор (? :) имеет более высокий приоритет, чем запятая, но ниже периода.Таким образом, первая строка анализируется как:

print("$str is " , (ispalindrome($str) ? "" : " not"), " a palindrome\n")

, а вторая - как:

print(("$str is " . ispalindrome($str)) ? "" : (" not" . " a palindrome\n"))

Последняя строка должна фактически вывести «», а не «1»;это на самом деле то, что вы получили?

...