Заставить Perl на Windows работать как Linux (расширение подстановочного символа) - PullRequest
3 голосов
/ 14 сентября 2011

Было бы неплохо, чтобы Perl-скрипты в Windows работали так же, как в Linux, с подстановочными знаками, содержащими имена файлов.

Например:

perl myscript.pl *.txt

В Linux bash будетразверните * .txt до набора имен файлов и передайте их интерпретатору perl как отдельные параметры.В Windows * .txt передается непосредственно в Perl.

Итак, в основном, я ищу что-то, что нужно поместить в верхнюю часть скрипта, который расширит подстановочные параметры, так что остальныескрипт может быть таким же, как в Linux.

Например:

myscript.pl

use warnings;
use strict;

# Mystery code to expand all wildcard params, fudging ARGV in the process
# ----
<Insert code here>
# ----

# Rest of script
...

Ответы [ 4 ]

12 голосов
/ 14 сентября 2011
  1. Установите Win32::Autoglob, если ваш Perl не поставляется с ним.
  2. Установите для переменной среды PERL5OPT значение -MWin32::Autoglob или просто use Win32::Autoglob.
4 голосов
/ 14 сентября 2011

Существует большая разница между оболочками операционных систем, которая делает это менее очевидным: в большинстве оболочек Unix globbing (подстановочное расширение) выполняется оболочкой, в Windows это не так.

Это означает, что приложение, запущенное оболочкой Unix, увидит длинный список имен файлов в argv, тогда как то же приложение, запущенное под Windows, получит 1 шаблон со встроенными подстановочными знаками.

Запуск сценария в bash через Cygwin, возможно, является самым чистым вариантом. Вы также можете обнаружить Windows ( Как узнать, работает ли мой Perl-скрипт под Windows? ) и glob в Perl .

2 голосов
/ 14 сентября 2011

Простой ответ:

my @args = glob "@ARGV";
1 голос
/ 14 сентября 2011

Используйте этот фрагмент кода, чтобы расширить шаблон и получить имена файлов:

my @list = <$ARGV[0]>;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...