Это должно хорошо использовать модули из подпрограмм?

Обычно Вы знаете три вещи в любом моменте времени при обработке:

  1. , Сколько единиц/блоков/объектов было обработано до того момента времени (A).
  2. , Сколько времени это взяло для обработки тех объектов (B).
  3. количество остающихся объектов (C).

, Учитывая те объекты, оценка (если время для обработки объекта не является постоянным) остающегося времени будет

B * C /

6
задан brian d foy 22 September 2009 в 17:12
поделиться

3 ответа

Где использовать?

Использование происходит во время компиляции, поэтому не имеет значения, куда вы его поместили. По крайней мере, с чисто прагматической точки зрения "сработает". Поскольку это происходит во время компиляции , использование всегда будет выполняться, даже если вы поместите его в условное выражение. Никогда не делайте этого: if ($ foo eq 'foo') {use SomeModule}

По моему опыту, лучше всего размещать все операторы использования в верхней части файла. Это позволяет легко увидеть, что загружается и каковы ваши зависимости.


Обновление:

Как brian d foy указывает , вещи, скомпилированные перед оператором 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 - огромная победа.

Но самый простой способ узнать это - профилировать свой код и посмотреть, на что расходуется время. NYTProf - еще один популярный инструмент профилирования, который вы можете попробовать.

Лучшие практики

Ознакомьтесь с Perl Best Practices и кратким справочником карточкой . На этой странице есть хороший сборник рекомендаций ООП Дэмиана Конвея от PBP .

Также вы можете рассмотреть возможность использования Moose . Если длительное время запуска сценария приемлемо для вашего использования, то Moose - огромная победа.

Но самый простой способ узнать это - профилировать свой код и посмотреть, на что расходуется время. NYTProf - еще один популярный инструмент профилирования, который вы можете попробовать.

Лучшие практики

Ознакомьтесь с Perl Best Practices и кратким справочником карточкой . На этой странице есть хороший сборник рекомендаций ООП Дэмиана Конвея от PBP .

Также вы можете рассмотреть возможность использования Moose . Если длительное время запуска сценария приемлемо для вашего использования, то Moose - огромная победа.

На этой странице есть хороший сборник рекомендаций ООП Дэмиана Конвея от PBP .

Также вы можете рассмотреть возможность использования Moose . Если длительное время запуска сценария приемлемо для вашего использования, то Moose - огромная победа.

На этой странице есть хороший сборник рекомендаций ООП Дэмиана Конвея от PBP .

Также вы можете рассмотреть возможность использования Moose . Если длительное время запуска сценария приемлемо для вашего использования, то Moose - огромная победа.

10
ответ дан 8 December 2019 в 12:21
поделиться

вопрос 1

Это зависит от того, что делает модуль. Если он имеет лексические эффекты, то он повлияет только на область, в которой он используется:

my $x;
{
    use integer;
    $x = 5/2; #$x is now 2
}
my $y = 5/2; #$y is now 2.5

Если это обычный модуль, то не имеет значения, где вы его используете, но обычно все эти модули используются наверху программы.

вопрос 2

Вещи, которые могут повлиять на скорость выполнения программы между машинами

  1. скорость процессора
  2. версия установленных модулей (некоторые модули имеют версии XS, которые намного быстрее)
  3. версия Perl
  4. количество записей в PERL5LIB
  5. скорость диска
6
ответ дан 8 December 2019 в 12:21
поделиться

daotoad и Chas. Оуэнс уже ответил на часть вашего вопроса, касающуюся позиции использования заявлений. Позвольте мне отметить здесь кое-что еще:

Я делал это, чтобы чувствовать, что очиститель на случай, если мне нужно переместить

Лично я считаю, что гораздо проще собрать все используемые модули в одном месте в верхней части файла. Вам не придется искать операторы использования, чтобы увидеть, какие другие модули используются, и быстрый взгляд скажет вам, что используется, а что не используется.

Что касается вашей проблемы с производительностью: с Apache и mod_perl Интерпретатор Perl должен будет проанализировать и скомпилировать ваши используемые модули только один раз. В следующий раз, когда скрипт будет запущен, выполнение должно быть намного быстрее. Однако в командной строке второй запуск не дает этого преимущества.

3
ответ дан 8 December 2019 в 12:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: