Как создавать программы Strawberry Perl с возможностью перетаскивания?
-
22-08-2019 - |
Вопрос
у меня есть Клубничный Перл программа, которая принимает один файл в качестве аргумента командной строки.Как мне настроить так, чтобы я мог перетащить нужный файл в программу Strawberry Perl (или в ее оболочку), и программа запустилась бы с именем этого файла в качестве аргумента?
Решение
В Windows (проверено с XP) вы можете создать файл .cmd и просто запустить программу Perl с аргументом %1 для передачи имени файла, как если бы он выполнялся из командной строки.
perl c:\test.pl %1
Затем вы можете просто перетащить файл в файл .cmd для выполнения.
Другие советы
Эээ!Пожалуйста, не создавайте сценарий-оболочку/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, который сделает это за вас.
Вот еще одна альтернатива «обертке», но она требует небольшой модификации Perl-скрипта:
- Переименуйте сценарий script.pl в script.cmd.
- Добавьте следующее в начало файла:
@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
"просто помогает в отладке.
Это мое предпочтительное решение, когда я мало что знаю о целевой системе (и, возможно, не смогу редактировать реестр).