Какой модуль мне нужен, когда я получаю информацию об ошибке "Не удается найти getopts.pl в @INC..."
Я запускаю эту команду в моем macOS
$ perl ~/Desktop/blif2cnf.pl
и получил эту информацию об ошибке:
Can't locate getopts.pl in @INC (@INC contains: /Library/Perl/5.18/darwin-thread-multi-2level /Library/Perl/5.18 /Network/Library/Perl/5.18/darwin-thread-multi-2level /Network/Library/Perl/5.18 /Library/Perl/Updates/5.18.2 /System/Library/Perl/5.18/darwin-thread-multi-2level /System/Library/Perl/5.18 /System/Library/Perl/Extras/5.18/darwin-thread-multi-2level /System/Library/Perl/Extras/5.18 .) at /Users/Frank/Desktop/blif2cnf.pl line 10.
В моем Linux 16.04 такую проблему можно решить, следуя этому ответу
Есть ли такой модуль, как libperl4-corelibs-perl
в macOS?
Я знаю CPAN, но не знаю, какой модуль мне установить.
2 ответа
Это Perl4:: CoreLibs. В общем, пакет Debian libthis-that-perl
соответствует модулю с именем This::That
хотя вам решать с заглавной буквы:)
Я не уверен, как менеджер пакетов работает с macOS, но независимый от платформы способ установки getopts
пакет.
Чтобы ответить на вопрос, который вы задали в качестве комментария к ответу от @hobbs, я ищу нужный мне модуль через сайт, на который ссылается @hobbs, https://metacpan.org/ или, альтернативно, http://search.cpan.org/. Именно на втором я нашел то, что мне было нужно.
В поисках getopts.pl
дал ссылку на "Perl4::CoreLibs". В верхнем правом углу была ссылка Perl4-CoreLibs-0.003.tar.gz (хотя, похоже, сейчас 0,004). Я щелкнул правой кнопкой мыши и выбрал "Копировать адрес ссылки", который дал мне
http://search.cpan.org/CPAN/authors/id/Z/ZE/ZEFRAM/Perl4-CoreLibs-0.004.tar.gz
Какой бы ни была ваша ссылка, вам нужно распаковать ее и найти все *.pl
файлы в lib
каталог в каталог, и либо
1) Ссылка на них из командной строки, например
perl -I /path/to/where/you/untarred/lib ~/Desktop/blif2cnf.pl
или же
2) Добавьте их в свой PERLLIB
переменная окружения.
Я думаю, что более подробная информация будет полезна.
Подробные инструкции
Определите каталог, в который вы хотите загрузить свой *.pl
файлы. я использовал $HOME/new_perl_stuff
cd ~
mkdir new_perl_stuff
cd new_perl_stuff
Теперь возьми тарбол
wget http://search.cpan.org/CPAN/authors/id/Z/ZE/ZEFRAM/Perl4-CoreLibs-0.004.tar.gz
распакуйте его, зайдите в каталог и убедитесь, lib
есть
$ tar -xzf Perl4-CoreLibs-0.004.tar.gz
$ cd Perl4-CoreLibs-0.004
$ ls
Тебе следует увидеть lib
в списке.
Возможно добавить недавно загруженный lib
каталог (в моем случае, $HOME/new_perl_stuff/Perl4-CoreLibs-0.004/lib
) к perl
путь поиска, но это только заставляет меня беспокоиться о другом каталоге, который я могу удалить в какой-то момент. Я сделал новую папку в /usr/lib
каталог. Я решил назвать новый каталог libperl4-corelibs-perl
, так как это казалось стандартным. Во-первых, я проверил, чтобы не было каталога с таким именем.
$ stat /usr/lib/libperl4-corelibs-perl
stat: cannot stat '/usr/lib/libperl4-corelibs-perl': No such file or directory
Затем я сделал каталог.
mkdir /usr/lib/libperl4-corelibs-perl
Следующим шагом было копирование всех *.pl
файлы в этот каталог. Я надеюсь объяснить эту следующую команду позже. Я запустил его таким образом, чтобы убедиться, что все нужные мне файлы были там. От моего $HOME/new_perl_stuff/Perl4-CoreLibs-0.004
В каталоге я выполнил следующую команду, которую планирую вернуться и объяснить.
find ./lib -type f -name "*.pl" -print0 | xargs -I'{}' -0 \
bash -c 'new_dir=/usr/lib/libperl4-corelibs-perl/; chmod +x {}; \
echo "Moving {}"; mv {} ${new_dir} && echo -e "success\n" || \
echo -e "failure\n"' | tee moving_day.log
Запустите его, если хотите убедиться, что все скопировано успешно. Более короткая команда, которая делает все необходимое:
find ./lib -type f -name "*.pl" -print0 | xargs -I'{}' -0 \
bash -c 'new_dir=/usr/lib/libperl4-corelibs-perl/; chmod +x {}; \
mv {} ${new_dir}'
Это не плохая идея, чтобы бежать
ls -lah /usr/lib/libperl4-corelibs-perl
проверить, что *.pl
файлы есть.
Теперь вы можете запустить
perl -I /usr/lib/libperl4-corelibs-perl ~/Desktop/blif2cnf.pl
но есть более простой способ.
Наконец, я сделал так, чтобы этот каталог стал частью perl
Путь поиска каждый раз, когда я использую терминал, добавив следующую строку в мой ~/.bashrc
Эта команда добавляет путь к PERLLIB
переменная окружения. Различные версии Linux имеют разный синтаксис для добавления в переменные окружения, обязательно узнайте, какой у вас!
export PERLLIB="/usr/bin/libperl4-corelibs-perl:$PERLLIB"
Команды, которые я запускал для этого, были
$ echo -e "\n\n## allow Perl to use the files in Perl4::CoreLibs" >> $HOME/.bashrc
$ echo -e "export PERLLIB=\"/usr/lib/libperl4_corelibs_perl:$PERLLIB\"" >> $HOME/.bashrc
$ source .bashrc
Теперь вы можете просто запустить
perl ~/Desktop/blif2cnf.pl
Примечание. Вероятно, стоит вернуться назад и удалить ненужные дополнения:
rm -rf $HOME/new_perl_stuff