Методы и вызовы подпрограмм не бесплатны в Perl. Они относительно дорогие. Итак, если ваше профилирование показывает, что вы тратите достаточно большую часть времени выполнения в методах с небольшими средствами доступа, возможно, стоит обратить внимание на микро-оптимизацию.
Тем не менее, , а не , следует заменить на такие методы доступа, как get_color ():
package Car;
# sub new {...}
sub get_color {
my $self = shift;
return $self->{color};
}
package main;
#...
my $color = $car->get_color();
с прямым доступом, нарушающим инкапсуляцию:
my $color = $car->{color};
Кто-то может подумать, что это само собой разумеется, но каждый также видит, что это делается повсеместно. Вот что вы можете сделать, используя Class :: XSAccessor
package Car;
# sub new {...}
use Class::XSAccessor
getters => {
get_color => 'color',
},
setters => {
set_color => 'color',
};
Это создает новые методы get- и set_color (), которые реализованы в XS и, таким образом, примерно в два раза быстрее вашей версии, выпущенной вручную Мутаторы (то есть "$ car-> color ('red')") также доступны, как и цепочечные методы.
В зависимости от вашего приложения, это может дать вам очень небольшое (но по сути бесплатное) повышение. Не ожидайте больше 1-2%, если вы не делаете что-то особенное.