вопрос по перлу
видимо в книге лажа написана
2. qw(a, b) — это "a,", "b"
Во втором же случае такого не происходит, посколько сначала вычисляется qw, потом [1], и уж потом print.
Вот такое развернутое пояснение того, что сказал
P.S. Кстати, попробуй print (qw(a b[1], тоже будешь удивлен
P.P.S. Да, кстати, если не хочешь, чтобы скобки после print (да и любого оператора) воспринимались как содержимое его аргументов, просто поставь перед первой скобкой "+", например, print +("a", "b")[1];
спасибо
Если да, то где он находится в таблице приоритетов?
напрашивается ответ на изначальный пост: это же очевидно
Если мы явно не выделяем параметры списковой операции, заключая их в скобки, то все стоящие справа от нее в выражении и разделенные запятыми величины рассматриваются как фактические параметры этой операции.Т.е. сначала вычисляем все аргументы списочного оператора 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").