Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]402[/thread]

Version eines Moduls herausfinden

Leser: 5


<< |< 1 2 3 >| >> 26 Einträge, 3 Seiten
cbxk1xg
 2005-01-10 09:47
#4027 #4027
User since
2003-10-20
496 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich habe mir eine kleine Sub zusammengeschrieben um herrauszufinden, ob ein bestimmtes Modul installiert ist. Jetzt würde ich gerne noch herausfinden welche Version dieses Modul hat. Ich hab's mit eval("use MODUL::VERSION") probiert, aber das funzt leider nicht.

Hier meine sub
Code: (dl )
1
2
3
4
5
6
7
sub FindPerlModule
{
my ($Modul) = @_;
my $ModulStatus = "";
$ModulStatus = (eval "require $Modul" ? "OK" : "NOT INSTALLED");
return $ModulStatus;
}
renee
 2005-01-10 10:51
#4028 #4028
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
folgenes funktioniert bei mir:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#! /usr/bin/perl

use strict;
use warnings;

my $modul = 'CGI';
my ($status,$vers) = FindPerlModule($modul);
print $modul," ",$vers," -> ",$status,"\n";

sub FindPerlModule
{
 my ($Modul) = @_;
 my ($ModulStatus,$vers);
 if(eval("require $Modul")){
   $vers = ${Modul}->VERSION || 0;
   $ModulStatus = "OK";
 }
 else{
$vers = 0;
   $ModulStatus = "NOT INSTALLED";
 }
 return ($ModulStatus,$vers);
}
\n\n

<!--EDIT|renee|1105347183-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
cbxk1xg
 2005-01-10 11:11
#4029 #4029
User since
2003-10-20
496 Artikel
BenutzerIn
[default_avatar]
Mh, eigenartig. So was ähnliches hatte ich auch schon probiert, aber leider ohne Erfolg. Dein Code funktioniert natürlich. *ärger* - Warum ist mir das nicht eingefallen??? :-)

Aber eine Frage hätte ich noch. Kannst Du mir den folgenden Codeteil mal erklären? Woher kommt den z.B. der Hash?
Code: (dl )
$ModulVersion = ${Modul}->VERSION || 0;
renee
 2005-01-10 11:15
#4030 #4030
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das ist kein Hash, hier wird eine Skalare Variable dereferenziert... So, dass dann im Prinzip CGI->VERSION interpretiert wird...

Edit: mit ->VERSION greifst Du auf die Variable VERSION des entsprechenden Moduls zu.

Habe gerade gemerkt, dass es auch mit $Modul->VERSION hinhaut...\n\n

<!--EDIT|renee|1105348586-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
cbxk1xg
 2005-01-10 11:19
#4031 #4031
User since
2003-10-20
496 Artikel
BenutzerIn
[default_avatar]
Oh, Man! Jetzt ist mir auch klar wo mein Fehler lag. Ich hatte es mit MODUL::VERSION probiert. Vieleicht sollte ich doch erst mal einen Kaffee trinken...

Nachtrag: Und wenn ${Modul}->VERSION nichts ergibt, dann ist der Wert 0, richtig?\n\n

<!--EDIT|cbxk1xg|1105348956-->
format_c
 2005-01-10 12:01
#4032 #4032
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Komisch:
Code: (dl )
1
2
3
4
5
6
C:\>perl -MCGI -e "print $CGI::VERSION;"
2.81
C:\>perl -MCGI -e "print CGI->VERSION;"
2.81
C:\>perl -MCGI -e "print $CGI->VERSION;"
Can't call method "VERSION" on an undefined value at -e line 1.

Wieso deckt sich das nicht ganz mit euren aussagen?

Gruß Alex
renee
 2005-01-10 13:04
#4033 #4033
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Wieso deckt sich das nicht mit unseren Aussagen??

Wir machen ja nicht $CGI->Version- Das klappt nicht, weil $CGI ja kein Objekt ist. Man muss das von der Klasse aus machen, also CGI->VERSION. Und das klappt ja auch bei Dir. Wie ich oben geschrieben habe, wird das $Modul->VERSION quasi als CGI->VERSION interpretiert...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
format_c
 2005-01-10 14:13
#4034 #4034
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Achso Stimmt.

Gruß alex
pfuschi
 2005-01-10 17:53
#4035 #4035
User since
2004-03-31
198 Artikel
BenutzerIn
[default_avatar]
Servus,
ich hatte mal ein kleines Tool geschrieben welches mir einen Version-Tree ausgab.
Da habe ich folgendes sub geschrieben:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
sub getVersion {
my $file = shift;
my $c = "";
open(MOD, $file) or die $!;

my $inpod = 0;
my $result;

# Thieved from Module::Info which itself thieved from
# ExtUtils::MM_Unix 1.12603
while (<MOD>) {
$inpod = /^=(?!cut)/ ? 1 : /^=cut/ ? 0 : $inpod;
next if $inpod || /^\s*#/;

chomp;
next unless /([\$*])(([\w\:\']*)\bVERSION)\b.*\=/;
my $eval = qq{
package vTree::_version;
no strict;

local $1$2;
\$$2=undef; do {
$_
}; \$$2
};
$c = $1 if/(#.*$)/;
local $^W = 0;
$result = eval($eval);
warn "Could not eval '$eval' in $parsefile: $@" if $@;
$result = "undef" unless defined $result;
last;
}
close MOD;

return ([$result,$c]);
}

muss abe rgestehen dass ich es im Moment nicht aus dem Stehgreif erklären kann :p

greetz & fetten Segen
manu\n\n

<!--EDIT|pfuschi|1105372414-->
PCE - Editor für Perl in Perl
Bookzilla.de - Mit jedem Kauf OpenSource unterstützen
"I know I can't hold the hate inside my mind
cause what consumes your thoughts controls your life"
- Creed
pfuschi
 2005-01-10 18:16
#4036 #4036
User since
2004-03-31
198 Artikel
BenutzerIn
[default_avatar]
Servus,
wie im Code geschrieben ist das wesentliche von
CPAN:Module::Info
geklaut

CPAN:Module::Info::File bietet noch ein paar Funktionen mehr.

greetz & fetten SEgen
manu
PCE - Editor für Perl in Perl
Bookzilla.de - Mit jedem Kauf OpenSource unterstützen
"I know I can't hold the hate inside my mind
cause what consumes your thoughts controls your life"
- Creed
<< |< 1 2 3 >| >> 26 Einträge, 3 Seiten



View all threads created 2005-01-10 09:47.