PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Perl: Ausfuehrung verhindern wenn Perl-Version <5



Blackhawk
06-09-2005, 14:38
Hi,

wie kann ich noch gleich verhindern, das ein Script ausgefuerht wird, wenn die Perlversion z.B. kleiner 5 ist?

DaTa
06-09-2005, 14:55
$ perl -e 'require 5.009001'
Perl v5.9.1 required--this is only v5.8.7, stopped at -e line 1.

michael.sprick
06-09-2005, 14:55
#!/usr/bin/perl
require 5.005;
print "Hallo Welt\n";


;)

Blackhawk
06-09-2005, 15:01
klappt nicht.
jedenfalls nicht, wenn ich PERL4 installiert habe.

michael.sprick
06-09-2005, 16:14
dann gäbe es noch eine andere, ältere Schreibweise:



require 5.006_001;


Alternativ dazu oder auch zusätzlich kannst Du ja immernoch einen manuellen Vergleich über $] machen.


die "Wrong PERL version...\n" if ($] < 6);

Blackhawk
07-09-2005, 07:51
Super, mit $] klappt es endlich :)

Leider parst perl zuerst das Script und bricht dann ab. Helfen tut mir also das ganze Konstrukt nichts :(

michael.sprick
07-09-2005, 09:24
klappt nicht.
jedenfalls nicht, wenn ich PERL4 installiert habe.

Auf welcher Plattform denn?
Hier mal ein Link zu dem Thema: http://perldoc.perl.org/functions/require.html

Das das mit perl4 noch nicht lief, konnte ich nirgendwo finden. Nur "use VERSION" wird erst ab perl 5 unterstützt...

require 5.006_001; funktionierte bei auch mit perl 4.

Was Du sonst noch versuchen könntest, wäre eine Art Weiche, die Du vorschaltest...



#!/usr/bin/perl
use strict;
use warnings;
die "Wrong PERL version...\n" if ($] < 6);
require "echtes_skript.pl";


require wird ja erst zur Laufzeit ausgeführt, das heißt, das Skript macht zunächst mal die Überprüfung der Version, bevor weiterer Code geparst und kompiliert wird.

Was anderes fällt mir jetzt auch nicht ein.

Blackhawk
07-09-2005, 10:17
Das Problem ist halt, dass in meinem Script Dinge drin sind, die PERL4 schon beim Parsen zum Abbruch bringen. Damit wird das Require nicht ausgefuehrt.
Ich nutze Perl 4 auf HP-UX 9.07 bzw. 9.10.

michael.sprick
07-09-2005, 10:56
Das Problem ist halt, dass in meinem Script Dinge drin sind, die PERL4 schon beim Parsen zum Abbruch bringen
nicht, wenn Du das eigentliche Skript per require einbindest, wie oben gezeigt....

Der bzw. ein Unterschied zwischen use und require ist ja, das per 'use' eingebunden Module bereits zur kompilierzeit geparst werden, per require aber erst zur Laufzeit...




if ($] > 5)
{
require "Perl_V5_skript.pl";
}
else
{
require "Perl_V4_skript.pl";
}


muss funktionieren, denn bei einer 4er Version wird das V5 Skript nie geparst... es sei denn, Du benutzt use - dann schon.

EDIT:
wobei ich mir jetzt nicht ganz sicher bin, ob die o. g. Schreibweise:
die "falsche version" if ($] < 5);
in perl 4 bereits unterstützt wird... das müsste man mal testen - ein if/else Kontrukt wird aber gehen.

Blackhawk
07-09-2005, 11:24
Ja das funktioniert. Mal schauen, ob ich das mit einem zweiten Script implementiere... Vielen Dank auf jeden Fall...