2010-06-17 11 views

Antwort

1

Dort ist eine Möglichkeit, dies zu tun, aber es wird nicht schön sein. Sie können Ihren Perl-Code in einer Temp-Datei .pl widergeben und diese Datei dann innerhalb Ihrer .bat ausführen.

+0

Dachte darüber, aber dachte, es würde meine Arbeit Buddy zum Weinen bringen. :) – Rick

4

Ja, Sie können.

In der Tat ist dies genau das, was das pl2bat Werkzeug tut: es wandelt ein Perl-Programm in eine Batch-Datei, die das Perl-Programm einbettet. Schau dir pl2bat.bat selbst an.

So können Sie die .pl, konvertieren Sie es mit pl2bat, und dann zwicken Sie den Batch-Teil, wie Sie brauchen. Der größte Teil des Batch-Codes muss am Ende der Datei platziert werden (in der Nähe des Labels :end_of_perl), da Sie im Code oben darauf beschränkt sind, keine einfachen Anführungszeichen zu verwenden.

jedoch:

  • dieser einfache Ansatz wird nicht funktionieren, wenn Sie mehr als ein Perl-Datei
  • dies ein Alptraum in Sachen Wartung einbetten müssen sein.

Also ich schlage stattdessen vor, den gesamten Prozess in einem Perl-Programm zu schreiben.

Update:, wenn Sie ein Skript und einige Perl-Module, die Sie in einem einzigen Batch-Datei kombinieren möchten, können Sie die Perl-Datei kombinieren fatpack verwenden und dann pl2bat auf das Ergebnis anwenden.

+0

Das war das Problem. Ich hatte 2 Perl-Dateien, die ich verwenden wollte. Aber danke für den Vorschlag! – Rick

+0

@Rick: Ich habe meine Antwort für Ihren Fall aktualisiert. – dolmen

22

Active Perl tut dies seit Jahren!

Unten ist ein Skelett. Sie können nur perl einmal aufrufen. Weil es die -x Schalter besagt, dass Sie den Perl-Code Embedded in dieser Datei finden, und Perl liest die Datei, bis es ein Perl Shebang (#!...perl) findet und startet dort ausgeführt. Perl wird alles nach dem __END__ ignorieren und weil Sie DOS goto endofperl gesagt haben, wird es sich mit nichts beschäftigen, bis es auf das Etikett kommt.

@rem = '--*-Perl-*-- 
@echo off 
perl -x -S %0 %* 
goto endofperl 


@rem -- BEGIN PERL -- '; 
#!d:/Perl/bin/perl.exe -w 
#line 10 

use strict; 


__END__ 
:endofperl 
+0

Das ist genau die Art von was ich gesucht habe! Ich würde darüber abstimmen, aber es sagt mir, dass ich mich dafür registrieren soll. – Rick

Verwandte Themen