Ich verwende derzeit Strawberry Perl als meine primäre Perl-Distribution. Ich habe jedoch einige Anwendungen, die Perl-Aufrufe über Cygwin machen. Diese Fehler schlagen in der Regel fehl, weil sie die Version von Perl aufrufen, die mit cygwin gepackt wurde, und nur in den lib-Ordnern von cygwin nachgesehen haben. Wie kann ich meine cygwin-Umgebung ändern, um stattdessen Strawberry Perl (und die C:/strawberry/perl/lib dirs) aufzurufen?Wie kann ich meine cygwin-Umgebung ändern, um Strawberry Perl anstelle der paketierten Perl-Distribution zu verwenden?
Antwort
Wenn Sie Perl aus cygwin mit dem Setup-Programm entfernen, wird standardmäßig Strawberry Perl verwendet.
Wenn Sie Perl nicht von Cygwin entfernen können, können Sie eine symbolische Verknüpfung zur Perl-Programmdatei von Strawberry erstellen.
Von einem Cygwin-Shell den folgenden Satz von Befehlen:
$ mv /usr/bin/perl /usr/bin/perl-cygwin
$ ln -s /cygdrive/c/strawberry/perl/bin/perl.exe /usr/bin/perl
Dies wird vorausgesetzt, Sie den Standard Strawberry Perl Installer verwendet. Aktualisieren Sie Ihren Standort perl.exe
entsprechend, wenn Sie ihn woanders installiert haben.
Überprüfen Sie, ob die Verbindung durch Überprüfung der Perl-Version ordnungsgemäß funktioniert:
$ perl -v
Es sollte sagen Dies ist Perl (Version) gebaut für mswin32-x86-Multi-Thread (oder ähnlich) und nichtfür cygwin-thread-multi-64int gebaut.
Ich habe meine Cygwin-Maschine nicht in der Nähe, also kann ich das nicht testen, aber vielleicht kannst du den perl-Befehl mit einem Skript beenden: Gehe zu/bin unter cygwin und verschiebe die perl.exe dorthin ansonsten wie perl-org.exe, dann richte ein Shell-Skript ein, das dein anderes Perl mit denselben Argumenten ausführt.
Sie können Ihren PATH ändern, um zuerst die Strawberry-Verzeichnisse zu setzen. Strawberry versucht, nett zu sein, indem er seine Verzeichnisse am Ende des Pfades ablegt. Wenn Sie jedoch aus der ZIP-Datei installiert haben, hat es den PATH überhaupt nicht geändert.
Sie könnten/usr/bin/perl verschieben, aber das ist eine schlechte Idee, da es bricht, wenn Cygwin versucht, zu aktualisieren, was es für seine Perl hält. Das hatte ich diese Woche und passierte mir auf meinem Mac, bis ich aufhörte, mit dem System-Setup zu spielen und meine eigenen Sachen komplett getrennt zu installieren.
Dies ist wahrscheinlich keine bevorzugte Lösung, aber Sie sollten in der Lage sein, die # zu ändern! Leitung:
#!/cygdrive/c/strawberry/perl/bin/perl5.10.0
ich auf eine explizite Standort und Installation von Perl beziehen sich immer, anstatt sich auf das, was in/usr/bin ist.
Ich habe zwei Skripte, die ich die erste Zeile von Perl-Skripten ändern verwenden, um welche auch immer Perl zuerst in meinem Weg ist: rightperl Hardcodes zum Perl, die ersten in meinem $ PATH ist jetzt wird envperl die Zeile zu #!/usr/bin/env perl, damit die zu verwendende Perl-Datei nur zum Zeitpunkt des Aufrufs des Skripts ausgewählt wird. Funktioniert wirklich gut unter Cygwin (und von einer Unix-Shell im Allgemeinen).
Eine gute Sache, die ich hinzufügen kann, ist, dass, wenn Sie das richtige Perl erhalten, zuerst in den Pfad zu gehen, sollte es Site-spezifische CPAN-Module, die Sie möglicherweise mit Erdbeere Perl in einer CMD-Shell ausgeführt installiert haben.
"welche perl" ist dein freund.
Wenn Sie Probleme damit hatten, könnten Sie die Umgebungsvariable PERL5LIB festlegen, dies sollte jedoch nicht notwendig sein.
Ich übergebe noch im DOS-Stil Dateipfade als Parameter in das Perl-Skript, d. H. "D: \ data \ myfile.txt", nicht "/cygdrive/d/data/myfile.txt". So seltsam genug, diese Mischung aus Pfadnotation funktioniert:
bash> /cygdrive/d/scripts/myscript.pl d: \ data \ myfile.txt
Wenn Sie zu verwirren wollen nicht um mit irgend Pfade oder etwas dauernd dort ist ein einfacher TEMPORARY Hack. Geben Sie "Where perl" bei Cygwin sh ein. Es wird alle Perl.exe in PATH in der Reihenfolge ihrer Ausführung angezeigt. Ändern Sie die Namen derer, die nicht angezeigt werden sollen und die vor dem Perl aufgeführt werden, das Sie verwenden möchten. Aber denken Sie daran, sie zu ändern, wenn Sie fertig sind, oder Sie könnten ein paar Probleme auf der Straße haben.
Viele davon sind gute Lösungen, aber ich nehme eher eine einfache, die ich nicht mehr als einmal ändern muss.
Alles, was Sie tun müssen, ist eine Zeile in Ihrer .bashrc-Datei hinzufügen/ändern.
Quelle. Bashrc-Datei von Ihrer Shell (oder starten Sie eine neue Shell) und führen Sie Ihr Programm.
source ~/.bashrc
perl script.pl
Dies ist Best Practices weise die richtige Antwort; o), aber es dauert einige Jahre für einige Leute, es zu erkennen ...; o) –
- 1. Wie richte ich Strawberry Perl in MSYS ein?
- 2. Darf ich Strawberry Perl und ActiveState Perl gleichzeitig in einem Computer verwenden?
- 3. Was sind die Unterschiede zwischen Vanille Perl und Strawberry Perl?
- 4. Kann ich Joomla!/WordPress verwenden, um meine Website zu erstellen?
- 5. Kann ich main() verwenden, um meine Anwendung neu zu starten?
- 6. Wie mache ich UrlRewrite, um meine Adresse zu ändern?
- 7. Kann ich svchost.exe verwenden, um meine eigenen Dienste zu hosten?
- 8. Wie installiert man DBD :: Oracle in Strawberry Perl
- 9. Kann ich einen Winkelregler verwenden, um einen anderen zu ändern?
- 10. Kann ich Javascript verwenden, um die Sprache zu ändern?
- 11. Wie kann ich dmy() in der Lubridate-Funktion ändern, um die 1900er anstelle der 2000er auszugeben?
- 12. Soll ich Pylons Paste verwenden, um meine Pylons-Website zu hosten? Oder kann ich Apache verwenden?
- 13. Wie lade ich meine Datenbank auf meine Website, um sie in meiner Android App zu verwenden?
- 14. Kann ich mehr generische Schnittstellen verwenden, um meine Klassen zu vereinfachen ein Befehlsmuster zu verwenden?
- 15. Was soll ich anstelle von printf in Perl verwenden?
- 16. Wie kann ich meine Datenbank unter Versionskontrolle mit Perl bekommen?
- 17. Wie kann ich den Dateinamen in Perl ändern?
- 18. Wie kann ich empfangene Socket-Nachrichten in Perl ändern?
- 19. Kann ich SafeHandle anstelle von IntPtr verwenden?
- 20. Wie kann ich eine JAXB-Eigenschaft annotieren, um xsd: time anstelle von xsd: datetime zu verwenden?
- 21. Wie kann ich ein Perl-Skript erhalten, um Variablen in einem anderen Perl-Skript zu sehen?
- 22. Wie kann ich meine Perl-Anwendung als einzelne Datei verteilen?
- 23. Wie kann ich XML :: LibXML von Perl verwenden, um ein Attribut in einem Tag zu extrahieren?
- 24. Wie kann ich einen Perl-Einzeiler verwenden, um eine in hexadezimale ASCII-Zeichenfolge zu dekodieren?
- 25. Wie profile ich meine Perl-Programme?
- 26. Was kann ich anstelle von eval() verwenden?
- 27. Kann ich 'in' verwenden, um das Feld anstelle von '=' in SQL Oracle zu aktualisieren?
- 28. Wie kann ich TimerTask verwenden, um kontinuierlich zu laufen?
- 29. gibt es eine Möglichkeit, jCheckbox zu ändern, um ein Kreuz anstelle eines Ticks zu verwenden? JAVA
- 30. Wie mache ich meine Server-Anwendung verwenden meine IP-Adresse anstelle von localhost
arbeitete wie ein Charme! Vielen Dank! –
nett ... Sehr hilfreich .. Danke auch. – Paul