Преамбула Perl, которая будет работать под Windows или Linux - PullRequest
3 голосов
/ 07 декабря 2010

Есть ли одна волшебная "преамбула", которая заставит Perl-скрипт работать под Windows (в виде пакетного файла) или Linux (в виде исполняемого файла), аналогично преамбуле, которая делает его работать под любой оболочкой?

Ответы [ 2 ]

7 голосов
/ 07 декабря 2010

Я сомневаюсь, что вы можете заставить Windows принять шбан (#!). Так что, если вы можете запустить оболочку по умолчанию (в моем случае bash), то это работает в bash:

@REM <<:END_REM
@echo off
echo This is DOS, this will only run in DOS.
perl -x -S %0 %*
goto over_nix
:END_REM
echo This is *NIX, this will only run in *NIX.
perl -x -S $0 $*

:<<__END__
#!perl
use 5.012;
use Data::Dumper; 

say Dumper( \%ENV );

__END__
@REM <<:over_nix
:over_nix

Для этого требовался исполняемый файл в моем пути NIX с именем '@REM'.

echo >> ~/bin/@REM
chmod +x ~/bin/@REM
3 голосов
/ 07 декабря 2010

Вы имеете в виду, как эти обертки, которые пришли с ActiveState Perl?

@rem = '--*-Perl-*--
@echo off
if "%OS%" == "Windows_NT" goto WinNT
perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
goto endofperl
:WinNT
perl -x -S %0 %*
if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
if %errorlevel% == 9009 echo You do not have Perl in your PATH.
if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
goto endofperl
@rem ';
#!perl
#line 15
    eval 'exec Z:\Software\Perl\5.8.8\bin\perl.exe -S $0 ${1+"$@"}'
    if $running_under_some_shell;
#!/usr/bin/perl
# $Id: cpan,v 1.3 2002/08/30 08:55:15 k Exp $
use strict;

=head1 NAME

cpan - easily interact with CPAN from the command line

Сценарий заканчивается следующими строками:

1;    
__END__
:endofperl

хотя я не уверен, что вам действительно нужен BATтег ": endofperl" в конце или "goto endofperl" в верхней части (можно использовать "выход"?).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...