Schrift
[thread]8492[/thread]

Anfängerfrage: Module

Leser: 3


<< >> 8 Einträge, 1 Seite
rk-ger
 2006-11-10 14:04
#71622 #71622
User since
2006-08-07
45 Artikel
BenutzerIn
[default_avatar]
Ich möchte die Subroutinen in meinem Script, genau wie die Konstanten in Module auslagern. iM Moment stehen diese im selben Verzeichnis wie das aufrufende Script und Perl findet sie dort auch.

Allerdings findet das Hauptprogramm weder eine Subroutine noch eine Konstante. Ich habe es in etwa so gemacht, wie hier beschrieben. Weiter unten folgt noch was mit @export . Kann ich mir das irgendwie sparen? Ich will grundsätzlich alle Routinen und alle Konstanten in meinem Hauptscript haben. Dieses sieht derzeit so aus:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl
###########################################
# main.pl -- Import statistic data into mysql tables
###########################################

use strict;
use warnings;
use DBI; #used by global.pm
use File::Copy; #used by global.pm
use Global; #our own module for all relevant subroutines
use Parameters; #our own module for global vars


#=============== MAIN =====================
get_data1();
get_data2();
print "Scriptende!\n";
#=============== END MAIN =================
renee
 2006-11-10 14:06
#71623 #71623
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Und wie sehen Deine Module aus?
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/
rk-ger
 2006-11-10 14:25
#71624 #71624
User since
2006-08-07
45 Artikel
BenutzerIn
[default_avatar]
Etwas so:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/perl

###########################################
sub trim($) {
###########################################
my $string = shift;
$string =~ s/^\s+//;
$string =~ s/\s+$//;
return $string;
}
# und hier folgen weitere subs
1;


und so

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/perl

$ONE_DB = 's_stat';
$DB_HOST = 'localhost';
$DB_TYPE = 'DBI:mysql:'.$ONE_DB.':'.$DB_HOST;

$ONE_DB_USER = '########';
$ONE_DB_PASS = '########';
# weitere Konstaten

1;
ich
 2006-11-10 16:13
#71625 #71625
User since
2003-09-19
120 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo rk-ger,

die 1. Zeile (den Shebang) brauchst du in deinen "Modulen" nicht.

Du kannst diese Dateien mittels require oder do einbinden.

Code: (dl )
1
2
3
4
# ls -1
hauptscript.pl
funktion1.pl
funktion2.pl


Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/perl
# hauptscript.pl

use strict;
use warnings;

require( "./funktion1.pl" );
require( "./funktion2.pl" );

print funktion1();
print funktion2();


Gruss
jan
If you tell the truth you don't have to remember anything.
-- Mark Twain
rk-ger
 2006-11-10 18:51
#71626 #71626
User since
2006-08-07
45 Artikel
BenutzerIn
[default_avatar]
Hmm, danke für den Tipp. Aber wenn ich fertig bin, hat mein Programm vielleicht 100 Subroutinen. Und dann werden die 100 .pl Files vielleicht etwas verwirrend, würde ich denken.

Das Problem ist, dass ich einzelne Routinen immer wieder brauche, aber oft in einer jeweils anderen Reihenfolge. Und dann müssen die zu unterschiedlichen Zeiten und in verschiedenen Intervallen laufen (können). Das ergibt jeweils kurze Hauptprogramme, die über Cronjobs gesteuert werden.

Leider weiß ich immer noch nicht ob und wie ich alle Subs eines Moduls automatisch exportieren kann.
sid burn
 2006-11-10 19:32
#71627 #71627
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
[quote=rk-ger,10.Nov..2006, 17:51]Hmm, danke für den Tipp. Aber wenn ich fertig bin, hat mein Programm vielleicht 100 Subroutinen. Und dann werden die 100 .pl Files vielleicht etwas verwirrend, würde ich denken.[/quote]
Es hindert dich keiner daran auch 100 Subroutinen in einer .pl Datei zu packen.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
rk-ger
 2006-11-10 20:54
#71628 #71628
User since
2006-08-07
45 Artikel
BenutzerIn
[default_avatar]
JETZT habe ich es verstanden. Danke.
renee
 2006-11-11 18:33
#71629 #71629
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich würde eher "richtige" Module schreiben:
Skript:
Code: (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl

use strict;
use warnings;
use Funktionen;

funktion1();
funktion2();


Funktionen.pm
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
package Funktionen;

use base 'Exporter';
our @EXPORT = qw(funktion1 funktion2);

sub funktion1{
print "funktion1\n";
}

sub funktion2{
print "funktion2\n";
}
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/
<< >> 8 Einträge, 1 Seite



View all threads created 2006-11-10 14:04.