Perl имеет ограниченную поддержку статической проверки кода, в частности он может проверить, передаем ли мы соответствующее количество аргументов в функцию. Например, это приведет к ошибке:
use strict;
use warnings;
sub f($) {}
f(2, 3)
Too many arguments for main::f
Если мы попытаемся вызвать f слишком рано, мы получим еще одно полезное предупреждение:
use strict;
use warnings;
f(2, 3)
sub f($) {}
main::f() called too early to check prototype
Это приведет к ошибке:
use strict;
use warnings;
sub f($) {}
sub g() { f(2, 3) }
Too many arguments for main::f
И мой вопрос, можем ли мы получить такое сообщение для следующего сценария:
use strict;
use warnings;
sub g() { f(2, 3) }
sub f($) {}
Потому что я не получаю никакой ошибки или предупреждения здесь. Было бы хорошо, если бы я мог предотвратить компиляцию этого кода. Пожалуйста, сообщите.