Как я выбираю название пакета пользовательского модуля Perl, который не сталкивается со встроенными или именами пакетов CPAN?

Похоже, что проблема возникает, если вы случайно выбрасываете повторяющееся число, затем выбрасываете новое число и случайно выбрасываете estratti[0]. Вы устанавливаете j=0, когда вы найдете дубликат, но в следующий раз вы проверяете, находится ли numero==estratti[j] в следующей итерации цикла. К тому времени j был увеличен j++ до 1, поэтому вы пропустите этот случай.

Чтобы исправить это, вы можете установить j = -1, если найдете повторяющийся номер.

28
задан Alois Mahdal 15 March 2012 в 20:46
поделиться

6 ответов

Пространство имен Local:: было зарезервировано для просто этой цели. Никакой модуль, который запускается с того префикса, не будет принят к CPAN или ядру. С другой стороны, можно использовать подчеркивание на имя верхнего уровня (как My_Corp::Session или всего My_Session). Все категории с подчеркиванием были также зарезервированы. (Это упоминается в [1 112] perlmodlib под "Выбором название модуля".)

Примечание, которое оба того резервирования применяет только к имени верхнего уровня. Например, существуют модули CPAN, названные Time::Local и Text::CSV_XS. Но Local::Time и Text_CSV::XS резервируются имена и не был бы принят на CPAN.

модули Именования после того, как Ваша компания прекрасна также. (Ну, если Вы не работаете на некоторую действительно универсальную звучащую компанию.) Используя обратное доменное имя, вероятно, излишество, если Вы не намереваетесь распределить свои модули другим. (Но в этом случае, необходимо, вероятно, зарегистрировать нормальное имя модуля.)

, Как Perl разрешает конфликт:

Perl ищет каталоги в @INC для модуля с указанным именем. Первый найденный модуль является используемым тем. Таким образом, порядок каталогов в @INC определяет, какой модуль использовался бы (если у Вас есть модули с тем же именем, установленным в различных местоположениях).

perl -V сообщит о содержании [1 110] (каталоги самого высокого приоритета перечислены сначала). Но существует много способов управлять @INC во времени выполнения, также.

BTW, Perl 6 будет в состоянии к [1 113] дескриптор несколько модулей с тем же именем различными авторами и даже использовать больше чем один в единственной программе. Но это не решает Вашу проблему теперь.

39
ответ дан bb010g 28 November 2019 в 03:10
поделиться

Нет ничего плохого в том, чтобы называть ваши внутренние модули в честь вашей компании; Я всегда так делаю. 90% моего кода заканчиваются на CPAN, поэтому у него «нормальные» имена, но внутреннее содержимое всегда начинается с ClientName::.

Я уверен, что все остальные тоже делают это.

8
ответ дан jrockway 28 November 2019 в 03:10
поделиться

Что случилось только с выбором названия Вашего пакета, который Вы любите и затем гугление "жемчуга the-name-you-picked"?

2
ответ дан Nathan 28 November 2019 в 03:10
поделиться

При необходимости в максимальном уровне уверенности, что имя модуля не будет конфликтовать с чужим, можно взять страницу из книги Java: назовите модуль с названием домена компаний. Таким образом, если бы Вы работаете, например, Inc. и их доменным именем является example.com, Вы назвали бы свой модуль синтаксического анализатора HTML Com:: Пример:: HTML:: Синтаксический анализатор или Пример:: Com:: HTML:: Синтаксический анализатор. Преимущество первого - то, что, если у Вас есть несколько подблоков, у них может все быть свое пространство собственного имени, но модули все еще отсортируют вместе:

  • Com:: Пример:: Бизнес:: FindCustomers
  • Com:: Пример:: IT:: ParseLogs
  • Com:: Пример:: QA:: TestServer

, но это действительно выглядит нечетным сначала.

1
ответ дан Chas. Owens 28 November 2019 в 03:10
поделиться

(я знаю, что этот пост старый, но, поскольку мне пришлось разбираться с этим в последние несколько месяцев, я думал, что буду взвешивать)

На работе мы решили, что «Local :: чувствовал себя слишком географическим. У CompanyName :: тоже были некоторые проблемы, не связанные с разработкой, я их пропущу, хотя и скажу, что CompanyName длинная, когда ее нужно набирать десятки раз.

Итак, мы остановились на «Наше ::». Конечно, мы не «CPAN Safe», поскольку может быть день, когда мы захотим использовать модуль CPAN с префиксом Our ::. Но это приятно.

Our :: Data - это наш модуль Class :: DBI. Our :: App - это наша универсальная среда приложения, которая выполняет обработку конфигурации и Getopt.

Приятно читать и приятно печатать.

1
ответ дан RickMeasham 28 November 2019 в 03:10
поделиться

@INC переменная содержит список каталогов к, в котором можно искать модули. Это запускается с первой записи и затем идет дальше к следующему, если это не находит модуль запроса. @INC имеет значение по умолчанию, которое создало, когда жемчуг компилируется, но банка можно изменить его с PERL5LIB переменная среды, lib прагма и непосредственно управление @INC массив в a BEGIN блок:

#!/usr/bin/perl

BEGIN {
    @INC = (); #no modules can be found
}

use strict; #error: Can't locate strict.pm in @INC (@INC contains:)
2
ответ дан Chas. Owens 28 November 2019 в 03:10
поделиться
Другие вопросы по тегам:

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