Так что мне было интересно, есть ли разница в использовании между методом класса Perl и обычной подпрограммой из стандартного модуля. Есть ли время, когда вы будете использовать один над другим? В этом примере я предполагаю, что никакие объектные методы не присутствуют ни в одном из модулей.Метод класса модуля Perl vs обычная подпрограмма
Быстрый маленький главный класс здесь:
#!/usr/local/bin/perl
use strict;
use warnings;
use Foo;
use Bar;
my $arg1 = "blah";
my ($str1, $str2);
$str1 = Foo::subroutine($arg1);
$str2 = Bar->subroutine($arg1);
exit(0);
Пакет Foo будет держать мой обычный вызов подпрограммы
use strict;
use warnings;
package Foo;
sub subroutine {
my $arg = shift;
my $string = "Ordinary subroutine arg is $arg\n";
return $string;
}
1;
пакет Bar проведет мой метод класса вызова
use strict;
use warnings;
package Bar;
sub subroutine {
my $class = shift;
my $arg = shift;
my $string = "Class method arg is $arg\n";
return $string;
}
1;
Обычно, если я Я пишу Perl-код, я бы просто использовал параметр метода класса (например, с помощью Bar e xample), но я начал размышлять над этим вопросом после прочтения кода от бывшего сотрудника, который использовал синтаксис, как в примере Foo. Оба, кажется, делают то же самое по своей сути, но, похоже, больше, чем кажется на первый взгляд.
*** Всегда *** 'использование strict' и' использование warnings' в начале * каждый * программы Perl вы пишете, как бы ни тривиально. Очень мало смысла использовать 'my' без' strict' на месте. – Borodin
Поверьте мне, я знаю. Я просто не писал их для этого примера, потому что это не было частью центрального ядра вопроса. – MeNoSeeGood
Тем не менее вы включили линию shebang, которая менее актуальна далеко! Пожалуйста, всегда пишите свои примеры в соответствии с лучшей практикой: вы будете наказаны реже, и больше людей, которые читают ваши вопросы, будут считать, что это * хорошая идея *. – Borodin