Где использовать?
use
происходит во время компиляции, поэтому не имеет значения, куда вы его поместите. По крайней мере, с чисто прагматической точки зрения, «будет ли это работать». Потому что это происходит во время компиляции, use
всегда будет выполняться, даже если вы поместите его в условное выражение. Никогда не делай этого: if( $foo eq 'foo' ) { use SomeModule }
По моему опыту, лучше всего поместить все ваши операторы использования в начало файла. Это позволяет легко увидеть, что загружается и каковы ваши зависимости.
Обновление:
Как отмечает Брайан Д Фой , на вещи, скомпилированные до оператора use
, не повлияет. Таким образом, местоположение может иметь значение. Для типичного модуля местоположение не имеет значения, однако, если оно влияет на компиляцию (например, импортирует функции с прототипами), местоположение может иметь значение.
Также Час Оуэнс указывает , что это может повлиять на компиляцию. Модули, предназначенные для изменения компиляции, называются прагмами. Прагмы, как правило, получают имена в нижнем регистре. Эти эффекты применяются только в пределах области применения модуля. Час использует прагму integer
в качестве примера в своем ответе. Вы также можете отключить прагму или модуль в ограниченном объеме с ключевым словом no
.
use strict;
use warnings;
my $foo;
print $foo; # Generates a warning
{ no warnings 'unitialized`; # turn off warnings for working with uninitialized values.
print $foo; # No warning here
}
print $foo; # Generates a warning
Синтаксис косвенного объекта
В вашем примере кода у вас есть my $obj = new ObjectX;
. Это называется косвенным синтаксисом объекта, и его лучше избегать, поскольку это может привести к неясным ошибкам. Лучше использовать эту форму:
my $obj = ObjectX->new;
Почему ваш тестовый скрипт работает медленно на сервере?
Невозможно сообщить предоставленную вами информацию.
Но простой способ выяснить это - профилировать ваш код и посмотреть, где расходуется время. NYTProf - еще один популярный инструмент профилирования, который вы можете попробовать.
Лучшие практики
Проверьте Perl Best Practices и карточку быстрого доступа . На этой странице есть хороший совет ООП Дамиана Конвея от PBP .
Также вы можете рассмотреть возможность использования Moose . Если при вашем использовании допустимо длительное время запуска скрипта, Moose - это огромный выигрыш.