Какой модуль мне нужен, когда я получаю информацию об ошибке "Не удается найти 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
Другие вопросы по тегам