вопрос по перлу
видимо в книге лажа написана 

1. a * b + c =/= a * (b + c омг! ведь если заменить «b + c» на «d» получится a * d =/= a * (d вот это парадокс!
2. qw(a, b) — это "a,", "b"
2. qw(a, b) — это "a,", "b"
Просто если после оператора (в данном случае print) стоит левая скобка (после, может быть, пробельных символов то то, что стоит в скобках, трактуется как аргумент оператора, поэтому сначала выполняется оператор со своими аргументами (print ("a", "b" после чего от результата выполнения print пытаеся взять второй элемент, что есть ересь 
Во втором же случае такого не происходит, посколько сначала вычисляется qw, потом [1], и уж потом print.
Вот такое развернутое пояснение того, что сказал
P.S. Кстати, попробуй print (qw(a b[1], тоже будешь удивлен
P.P.S. Да, кстати, если не хочешь, чтобы скобки после print (да и любого оператора) воспринимались как содержимое его аргументов, просто поставь перед первой скобкой "+", например, print +("a", "b")[1];

Во втором же случае такого не происходит, посколько сначала вычисляется qw, потом [1], и уж потом print.
Вот такое развернутое пояснение того, что сказал
P.S. Кстати, попробуй print (qw(a b[1], тоже будешь удивлен

P.P.S. Да, кстати, если не хочешь, чтобы скобки после print (да и любого оператора) воспринимались как содержимое его аргументов, просто поставь перед первой скобкой "+", например, print +("a", "b")[1];
спасибо
Кстати, а [] или индексирование массива это тоже оператор?
Если да, то где он находится в таблице приоритетов?
Если да, то где он находится в таблице приоритетов?
клева написал
напрашивается ответ на изначальный пост: это же очевидно
напрашивается ответ на изначальный пост: это же очевидно
По поводу приоритетов и списочных операторов (таких, как print, sort etc) нашел хорошую цитату:
Поэтому здесь, имхо, более тонкий момент, чем просто таблица приоритетов. Саму же таблицу можно найти где угодно.
Или вот что пишут в кэмел-бук:
P.S. Если не прав, не судите строго, я сам только учусь
Если мы явно не выделяем параметры списковой операции, заключая их в скобки, то все стоящие справа от нее в выражении и разделенные запятыми величины рассматриваются как фактические параметры этой операции.Т.е. сначала вычисляем все аргументы списочного оператора print (чем и является, например, qw(a b)[1] после чего применяем оператор ко всем вычисленным аргументам.
Поэтому здесь, имхо, более тонкий момент, чем просто таблица приоритетов. Саму же таблицу можно найти где угодно.
Или вот что пишут в кэмел-бук:
Если за списковым оператором (например, print) или любым именованным унарным оператором (например, chdir) в качестве следующей лексемы следует левая круглая скобка (не считая пробельных символов то оператор и аргументы в скобках получают наивысший приоритет, как если бы это был обычный вызов функции. Правило следующее: если это похоже на вызов функции, то это и есть вызов функцииТак что, думаю, то, что в книжке пишут про сравнение приоритета [] и print - имхо, не по теме.
P.S. Если не прав, не судите строго, я сам только учусь

Читал я тут недавно Кэмэл Бук как раз по этому поводу.
И про списковые операторы понятно, что они стараются отожрать весь список за собой
Меня больше волнует именно "[]", то есть что это : оператор или что?
и каков у него приоритет, тк в кэмэл буке в таблице приоритетов я не нашел индекса массива или хеша
И про списковые операторы понятно, что они стараются отожрать весь список за собой

Меня больше волнует именно "[]", то есть что это : оператор или что?
и каков у него приоритет, тк в кэмэл буке в таблице приоритетов я не нашел индекса массива или хеша
Оставить комментарий
oyuriyu
Почемуprint ("a", "b")[1];
не работает, надо писать
print "a", "b")[1]);
а
print qw(a, b)[1];
срабатывает на ура ? В книге http://www.perl.org/books/beginning-perl/
написано, что print имеет более высокий приоритет, чем [1], и нужны скобки. Но ведь qw(a, b) точно такой же list как и ("a", "b").