2014-10-13 2 views
1

Я пытаюсь пропатчить программу, которая проверяется на портативную версию Perl, как это:Найти, если Perl исполняемого портативный

use Config; 
my $is_portable = $Config{userelocatableinc}; 

Это не работает на Strawberry Perl, и, таким образом, программа не удается.

Я использую Perl 5.20.1, 64-бит:

>perl -V:userelocatableinc 
userelocatableinc='undef'; 

Что я могу сделать, чтобы найти, если текущий Perl представляет собой портативный один, клубника или нет?

+0

Когда вы проводили тестирование, вы использовали [портативную версию Strawberry Perl] (http://strawberryperl.com/releases.html)? – Schwern

ответ

2

Вот что вы делаете. perl -V: userelocatableinc скажет вам, был ли он создан для использования относительных путей или нет.

Клубника не построена с этой опцией, поэтому ее не переносят. Если вам нужна эта поддержка, вам придется ее самостоятельно создать, хотя я понимаю, что Perl ActiveState имеет некоторые хаки, чтобы сделать ее переносной.

Я бы подумал о том, чтобы собрать билет с парнями из клубники и посмотреть, следует ли добавить этот вариант в свою сборку.

+0

Дарн. Думаю, я это сделаю. –

+0

@gbjbaanb - вы уверены, потому что есть «портативная» версия в смысле ее распаковки и перехода. –

+1

@RichardHuxton AFAIK переносимость - это некоторые пути, которые являются абсолютными, построение perl со специальной конфигурацией говорит ему использовать относительные пути. Это то, что делает его переносимым в этом случае, а не возможностью поместить двоичный файл на zip-диск. Кажется, что Strawberry perl не построен таким образом, поэтому две разные версии perl будут конфликтовать друг с другом. (или так я его понимаю) – gbjbaanb

-1

Это работает для меня:

print "I'm portable" if eval 'require Portable'; 

Портативный Strawberry Perl поставляется с Portable.pm в каталоге производителя, дополняющая File :: HomeDir, среди других.

+0

Portable - это особый модуль для реализации портативных приложений. Обычно не указывается, может ли исполняемый файл Perl перемещаться. – Schwern

+0

@schwern Просто моя удача в том, что поиск Metacpan будет недоступен, когда я проверю на него «Portable». Как насчет того, использовал ли я файл :: Homedir; существует $ INC {'Portable.pm'}; "? Strawberry portable имеет версию lib файла File :: HomeDir производителя, которая загружает Portable. Даже если это не обязательно Strawberry portable, все равно сказано, что ваши основные модули были настроены на переносимость –

+0

Ваш вопрос заключается в том, можно ли перемещать данную установку Perl. Ни портативный, ни файл :: HomeDir не загружаются с Perl, я думаю, что это только Strawberry Perl. – Schwern

Смежные вопросы