Как создать перетаскиваемые программы Strawberry Perl? - PullRequest
12 голосов
/ 01 апреля 2009

У меня есть Strawberry Perl программа, которая принимает один файл в качестве аргумента командной строки. Как я могу настроить все так, чтобы я мог перетащить нужный файл в программу Strawberry Perl (или обертку вокруг нее), и программа запускается с именем этого файла в качестве аргумента?

Ответы [ 3 ]

20 голосов
/ 01 апреля 2009

В Windows (протестировано с XP) вы можете создать файл .cmd и просто запустить его на Perl-программе с аргументом% 1, чтобы передать имя файла, как если бы оно выполнялось командной строкой.

perl c:\test.pl %1

Затем вы можете просто перетащить файл в файл .cmd для выполнения.

18 голосов
/ 01 апреля 2009

EEEK! Пожалуйста, не создавайте скрипт-обёртку / cmd, когда вам это не нужно.

Перейдите в реестр или в диалоговое окно «Тип файла» в Windows и переопределите действие по умолчанию для Perl, сказав:

"C:\path-to-perl-folders\perl.exe" "%1" %*

Это приведет к двойному щелчку .PL для запуска perl.exe с именем файла, по которому дважды щелкнули (% 1). Материал% * (передача любых аргументов имени файла в сценарий Perl) сложнее.

Снова зайдите в Реестр (на самом деле, это не так страшно, как думают люди) и найдите / создайте ключ "shellex" в классе Perl, а затем создайте подключ "DropHandler" со значением строки по умолчанию: «{86C86720-42A0-1069-A2E8-08002B30309D}» (по крайней мере, это мой DropHandler в американской версии Windows XP).

Это позволяет файлам .pl (фактически, всем, что связано с классом Perl) иметь обработчик удаления, который сообщает Проводнику, что делать при удалении файла (-ов) в сценарии .pl. В данном случае это просто означает «запустить скрипт Perl с удаленными файлами в качестве аргументов».

Хммм, я не думаю, что объяснил это очень хорошо, но именно так я настроил Perl (без сетевого диска) для большой инженерной организации. Google для Perl и DropHandler, и вы сможете получить скрипт реестра .reg, который сделает это за вас.

1 голос
/ 29 июня 2009

Вот еще одна альтернатива «обертке», но она требует небольшой модификации скрипта perl:

  1. Переименуйте ваш скрипт script.pl в script.cmd.
  2. Добавьте следующее в начало файла:

@SETLOCAL ENABLEEXTENSIONS
@c:\path\to\perl.exe -x "%~f0" %*
@exit /b %ERRORLEVEL%
#!perl
#line 6
# ...perl script continues here...

Скрипт запускается как любой другой командный файл. Первые три строки в основном вызывают Perl для самого файла CMD (%~f0, который работает, только если включены расширения CMD). Параметр -x для perl.exe указывает Perl пропустить все до строки #!perl. «#line 6» просто помогает в отладке.

Это мое предпочтительное решение, когда я немного знаю о целевой системе (и, возможно, не смогу редактировать реестр).

...