Никто еще не упомянул лучший. Нажмите на имя класса или имя метода и нажатие Ctrl + T .
Вы получаете быструю иерархию типа. Для имени класса Вы видите всю иерархию классов. Для имени метода Вы получаете суперклассы показа иерархии и подклассы с реализациями того метода, который отличают от абстрактных упоминаний или классов, которые не упоминают метод.
Это огромно, когда Вы в объявлении абстрактного метода и быстро хотите видеть, где оно реализовано.
Вы можете полностью избежать этой проблемы, не используя в первую очередь прототипы:
use strict;
f1();
sub f3 { f2() }
sub f1 {}
sub f2 {}
Не используйте прототипы , если вы не знаете, почему вы их используете:
Все это, конечно, очень мощно, и его следует использовать только в умеренных количествах, чтобы сделать мир лучше.
Если вы собираетесь называть его круглыми скобками, зачем вы вообще используете прототипы?
sub f1(){ ... }
f1();
Я бы использовал пустой прототип только для подпрограммы, которая должна работать как константа.
sub PI(){ 3.14159 }
print 'I like ', PI, ", don't you?\n";
Я бы на самом деле не рекомендовал использовать прототипы Perl 5, если только вы не хотите, чтобы ваша подпрограмма вела себя иначе, чем в противном случае.
sub rad2deg($){ ... }
say '6.2831 radians is equal to ', rad2deg 6.2831, " degrees, of course.\n";
В этом примере вам придется использовать круглые скобки, если у них нет опытный образец. В противном случае он получил бы дополнительный аргумент, и последняя строка никогда не была бы напечатана.
Отсутствие предупреждения при вызове f2 ()
из f3 ()
, по-видимому, является ошибкой.
use strict;
use warnings;
f1();
sub f1 {
my @a = qw(a b c);
f2(@a);
}
sub f2(\@) { print $_[0] }
Это печатает " а ". Если вы предварительно объявите f2 ()
или поменяете порядок определений подпрограмм, он напечатает «ARRAY (0x182c054)».
Что касается разрешения ситуации, это зависит. Мои предпочтения (по порядку) следующие:
& foo ()
, чтобы обойти проверку прототипа.