Schrift
[thread]11466[/thread]

Variable als Modulname



<< >> 5 Einträge, 1 Seite
roooot
 2008-03-14 16:24
#107057 #107057
User since
2008-03-03
276 Artikel
BenutzerIn
[default_avatar]
Hallo, ich konnte mich nicht richtig im Titel ausdrücken.
Ich habe folgenden Code
Code (perl): (dl )
1
2
3
4
5
6
7
opendir DIR, './module/';
while( my $datei = readdir DIR ){
        next unless $datei =~ /\.pm$/;
        require $datei;
        $xml .= '<modul name="'.$datei.'" version="'.$$datei::version.'" />'; #
}
closedir DIR;

Wie man sieht prüft das Programm den Ordner auf PMs. Dann bindet er sie kurz ein, damit man die Version nachschauen kann. Jedes Modul hat eine Variable
Code (perl): (dl )
our $version
. Wie kann ich auf diese zugreifen? Bei $$datei::version sagt er mir:
Can't use an undefined value as a SCALAR reference at file blabala

Was beduetet das? Danke für eure Hilfe
Viele Grüße :)
renee
 2008-03-14 16:29
#107058 #107058
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Es gibt die globale Funktion VERSION, die genau diese Frage beantworten soll!

Code (perl): (dl )
1
2
3
4
5
6
my $module = $datei;
$module =~ s!\./module/!!;
$module =~ s!\.pm$!!;
$module =~ s!/!::!g;

$xml .= '<modul name="'.$datei.'" version="'. $module->VERSION .'" />'


Beispiel:
Code: (dl )
perl -MCGI -e 'print CGI->VERSION';
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/
roooot
 2008-03-14 17:58
#107067 #107067
User since
2008-03-03
276 Artikel
BenutzerIn
[default_avatar]
Ich muss das schon in die while Schleife reinpacken?

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
        opendir DIR, './module';
        while( my $datei = readdir DIR ){
                my $module = $datei;
                $module =~ s!\./module/!!;
                $module =~ s!\.pm$!!;
                $module =~ s!/!::!g;
                 
                $xml .= '<modul name="'.$datei.'" version="'. $module->VERSION .'" />'
        }
        closedir DIR;


Das ergibt dann nämlich folgenden Fehler:
Code: (dl )
Can't call method "VERSION" without a package or object reference at module/admin/tools.pm line 212.
Viele Grüße :)
pq
 2008-03-14 18:55
#107068 #107068
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
roooot+2008-03-14 15:24:15--
Jedes Modul hat eine Variable
Code (perl): (dl )
our $version
.

die variable muss $VERSION heissen, damit sie z.b. von der globalen methode VERSION ausgegeben
werden kann.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
pq
 2008-03-14 18:57
#107069 #107069
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
roooot+2008-03-14 16:58:26--
Das ergibt dann nämlich folgenden Fehler:
Code: (dl )
Can't call method "VERSION" without a package or object reference at module/admin/tools.pm line 212.

du wendest die methode VERSION zum einen auf alle dateien im verzeichnis an, ohne zu prüfen, ob
es eine pm-datei ist, zumindest in dem zuletzt geposteten code. deshalb die fehlermeldung.
zum anderen hast du im letzten code auch das require vergessen.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< >> 5 Einträge, 1 Seite



View all threads created 2008-03-14 16:24.