Он предназначен для установки пути поиска модуля. В частности, он устанавливает местоположение по умолчанию (первое локальное местоположение) локального каталога perl/
пользователя. Он не только добавляет этот каталог, но делает его новым корнем для @INC
. Он делает это для каждой записи в @INC. В среде с ограниченным доступом, такой как те, которые используют CPanel, это гарантирует, что ваши скрипты (общие cgi) будут использовать ваши модули над любыми другими.
BEGIN означает, что это происходит до того, как какой-либо код не находится в блоке.
Первая строка определяет, существует ли /home/root/perl
и является каталогом. Если оба значения истинны, они присваивают значение $base_module_dir
, в противном случае переменная присваивает <user home>/perl/
. Помните, что в perl вы можете индексировать вызов функции напрямую, если он возвращает список.
Он находит домашний каталог пользователя с getpwuid($>)
. getpwuid()
получает информацию об учетной записи пользователя для данного пользователя (обычно из passwd в системе Unix) и возвращает его как список. $>
- эффективный идентификатор пользователя скрипта. Причиной индекса 7 является то, что расположение домашнего каталога в списке (и это 8-е поле в passwd, если память служит).
Затем он добавляет ВСЕ записи в @INC
с $base_module_dir
и вставляет эти измененные записи в начале @INC
. Таким образом, это не просто добавление $base_module_dir
в качестве каталога, но добавление этого в качестве нового корня для всех записей в @INC
. Вот почему он использует map
вместо того, чтобы просто добавить одну запись.
что об этой части? "(getpwuid ($>)) [7]« Я не понимаю $> и массив ref (?) to [7] – CheeseConQueso
http://p3rl.org/getpwuid - но я немного отредактирую свой ответ – nicomen
+1 для того, чтобы снова показать мне, почему я люблю Perl. – Dummy00001