(предположим use strict; use warnings;
по всему этому вопросу.)
Я изучаю использование sub
.
sub bb { print @_; }
bb 'a';
Это работает так, как ожидалось. Скобки являются необязательными, например, со многими другими функциями, такими как print, open
и т.д.
Однако это вызывает ошибку компиляции:
bb 'a';
sub bb { print @_; }
String found where operator expected at t13.pl line 4, near "bb 'a'"
(Do you need to predeclare bb?)
syntax error at t13.pl line 4, near "bb 'a'"
Execution of t13.pl aborted due to compilation errors.
Но это не так:
bb('a');
sub bb { print @_; }
Аналогично, sub без args, например:
special_print;
my special_print { print $some_stuff }
Вызывает эту ошибку:
Bareword "special_print" not allowed while "strict subs" in use at t13.pl line 6.
Execution of t13.pl aborted due to compilation errors.
Способы устранения этой конкретной ошибки:
- Поместите и до подзаголовка, например.
&special_print
- Поместить пустую скобку после подзаголовка, например.
special_print()
- Predeclare
special_print
сsub special_print
в верхней части script. - Вызов
special_print
после декларации sub.
Мой вопрос: почему это специальное лечение? Если я могу использовать суб-глобально внутри script, почему я не могу использовать его так, как хочу? Существует ли логика для sub
таким образом?
ETA: Я знаю, как я могу это исправить. Я хочу знать логику этого.