Для быстрого-и-грязного, нечастого использования, эти %INC
лучший способ пойти. Если необходимо сделать это с непрерывным интеграционным тестированием или чем-то более устойчивым, существуют некоторые другие инструменты для помощи.
Steffen уже упомянул Модуль:: ScanDeps.
код в Тест:: Prereq делает это, но он имеет дополнительный слой, который гарантирует что Ваш Make-файл. МН или Сборка. МН перечисляет их как зависимость. При создании Вашего , сценарии похожи на нормальное распределение Perl , который делает довольно легким проверить на новые зависимости; просто выполните набор тестов снова.
, Кроме которого, Вы могли бы использовать инструмент такой в качестве Модуль:: Извлечение:: Используйте , который анализирует статический код, ища использование, и потребуйте операторов (хотя это не найдет их в строке evals). Это получает Вас просто модули, которые Вы сказали Вашему сценарию загружать. Кроме того, как только Вы знаете, какие модули Вы загрузили, можно объединить это с David Cantrell инструмент CPANdeps, который уже создал дерево зависимостей для большинства модулей CPAN.
Примечание, что также необходимо думать о дополнительных функциях также. Ваш код в этом случае, мои не имеют их, но иногда Вы не загружаете модуль, пока Вам не нужен он:
sub foo { require Bar; # don't load until we need to use it .... }
, Если Вы не осуществляете ту функцию в своем пробном прогоне или тесте, Вы не будете видеть необходимость в Панели для той функции. Подобная проблема подходит, когда модуль загружается, различный набор модулей зависимости в различной среде (скажите, mod_perl или Windows, и так далее).
нет хорошего, автоматизированного способа протестировать дополнительные функции как этот так, можно получить их зависимости. Однако я думаю, что это должно быть в моем Списке текущих дел, так как он походит на интересную проблему.
Происходит целочисленное деление, затем результат, который является целым числом , присваивается как число с плавающей точкой Если результат меньше 1, он заканчивается как 0.
Вы захотите привести выражения к плавающим перед делением, например,
float m = (float)(a.y - b.y) / (float)(a.x - b.x);
Вы должны знать, что при оценке выражения, содержащего целые числа, временные результаты каждого этапа оценки также округляются до целых чисел. В вашем назначении float m
значение преобразуется только в тип float
с поддержкой действительных чисел после целочисленной арифметики. Это означает, что, например, 3/4 уже будет значением «0», прежде чем станет 0,0. Вы должны заставить преобразование плавать, чтобы это произошло раньше. Вы можете сделать это, используя синтаксис float(value)
для любого из a.y
, b.y
, a.x
, b.x
, a.y - b.y
или a.x - b.x
: не имеет значения, когда это будет сделано, пока один из терминов - это число с плавающей точкой до деления, например
float m = float(a.y - b.y) / (a.x - b.x);
float m = (float(a.y) - b.y) / (a.x - b.x);
...etc...
если (a.y - b.y) меньше (a.x - b.x), m
всегда равно нулю.
так что произносите это так.
float m = ((float)(a.y - b.y)) / ((float)(a.x - b.x));