Я начал работать с Perl только на прошлой неделе, потому что мне пришлось исправить некоторые вещи в нашем устаревшем коде в рабочей среде.
Ситуация такова, что в нашем производстве установлен Perl 5.32.0, и я не могу изменить или установить в нем какие-либо пакеты.
В моем коде мне нужно получить время в миллисекундах, которое можно получить с помощью модуля Time::HiRes
.
Но я не могу его установить!
Итак, я скопировал его в свой проект вместе с файлом проекта.
Я скачал Time-HiRes-1.9764.tar.gz
с https://metacpan.org/pod/Time::HiRes, разархивировал его и скопировал HiRes.pm
в каталог Time
моего проекта.
Я получаю эту ошибку:
/usr/local/bin/perl: symbol lookup error: /usr/local/bin/perl_5.6.1/lib/site_perl/5.6.1/i686-linux/auto/Time/HiRes/HiRes.so: undefined symbol: Perl_Gthr_key_ptr
Теперь мои вопросы: Как правильно загрузить HiRes.pm из Интернета и скопировать его в локальный проект без каких-либо зависимостей? 2. Элемент списка
Вы продолжаете настаивать на том, что не можете его установить, а затем говорите, что установили его (плохо). Почему вы говорите, что не можете его установить? Это потому, что вы думаете, что у вас недостаточно системных разрешений? Вы можете устанавливать модули в любой каталог. Ты просто сделал это неправильно. Если это проблема, мы можем показать вам, как это сделать.
@TLP: $ /usr/local/packages/perl_remote/5.32.0/bin/perldoc -l "Time::HiRes" /usr/local/packages/perl_remote/5.32.0/bin/perldoc: команда не найдена. У меня нет разрешения на запуск perldoc. perldoc присутствует в каталоге.
@ikegami: Да, у меня нет разрешений. Кроме того, эта производственная среда не подключена к Интернету, поэтому я не могу установить. В любом случае, я обошёл этот путь, получив миллисекунду, используя date +%s.%N
Как уже упоминалось, в комментарии, который привел qx{ date +%s.%N }
, нет смысла использовать его, поскольку на его использование уходит добрая часть секунды, если не целая секунда. Более точный результат вы получите, если time
.
@OmSao У вас нет разрешения на запуск perldoc? Это буквально просто информационная команда. Кажется, ваша установка не работает, вам следует обратиться к администратору сервера и попросить его исправить это. Кажется, они изменили разрешения на некоторые основные функции Perl. Это ваше решение. Кроме того, perlbrew может устанавливать модули в файлы ваших пользователей.
Time::HiRes является основным модулем начиная с версии 5.7.3, т. е. он должен быть частью установки Perl.
Стандартный способ установки модуля Perl:
perl Makefile.PL
make
make test
make install
Некоторые модули Perl не являются чистым Perl, они также содержат код XS, который необходимо скомпилировать, и Time::HiRes — один из них.
Спасибо @choroba. К сожалению, я не могу установить Perl в производство. Есть ли другой способ получить время эпохи в миллисекундах без Time::HiRes? Любое обходное решение?
Наверное, можно qx{ date +%H:%M:%S.%N }
, но это будет настолько медленно, что нет смысла измерять миллисекунды. Мой тест показывает, что он в несколько тысяч раз медленнее, чем при использовании Time::HiRes.
Вам не нужен ни Интернет, ни разрешения.
Сначала установите tarball на компьютер, разархивируйте и извлеките файлы.
Затем используйте параметр INSTALL_BASE
, чтобы сообщить установщику, куда его установить.
tar xzf Time-HiRes-1.9764.tar.gz
cd Time-HiRes-1.9764
perl MakeFile.PL INSTALL_BASE=...
make test
make install
Наконец, убедитесь, что переменная env PERL5LIB
установлена правильно, чтобы Perl мог найти модуль.
Time::HiRes уже должен быть установлен. Это часть основной установки Perl, начиная с версии 5.7.3. Вы уверены, что он не установлен? Что вы получите, если наберете
perldoc -l Time::HiRes
?