Ваш вопрос в конечном итоге «почему @backwards находится в скалярном контексте в строке 6», что
Напрашивается вопрос: «Как я могу определить контекст термина?».
Контекст определяется термином «что вокруг» (то есть его «контекст»).
Как я могу определить контекст термина? Глядя на оператора / функцию, которая
использует термин.
Какие шаги вы могли бы выполнить, чтобы выяснить контекст для @backwards самостоятельно, если вы
у вас не было людей, которые могли бы рассказать вам о его контексте?
Здесь мы имеем
print @backwards."\n"
так что есть два оператора / функции. Как мы узнаем, какой из них предоставляет контекст
в @ назад? Консультируясь с приоритетом. Около вершины perlop.pod у нас есть Perl's
таблица приоритетов (print - «оператор списка»):
left terms and list operators (leftward)
...
left + - .
...
nonassoc list operators (rightward)
О, отлично, теперь нам нужно знать, направлен ли отпечаток влево или вправо. По консультации
раздел «Термины и операторы списка (влево)» в perlop (сразу после
список приоритетов) мы видим, что печать здесь справа, потому что мы не приложили
его аргументы в скобках.
Таким образом, конкатенация имеет более высокий приоритет, поэтому конкатенация предоставляет контекст для @ backwards.
Следующим шагом является проверка документов (снова perlop) для объединения:
Binary "." concatenates two strings.
Строки являются скалярами, поэтому двоичные "." объединяет два скаляра.
И, наконец, оно у нас есть!
@ backwards имеет скалярный контекст, потому что конкатенация обеспечивает скалярный контекст для
каждый из его операндов.
Woo. Это было легко, не так ли: -)