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

Ausführen nur ein Teil des Programms



<< >> 9 Einträge, 1 Seite
dron
 2005-04-05 13:45
#53317 #53317
User since
2005-03-22
6 Artikel
BenutzerIn
[default_avatar]
Hallo Leute !

Das Programm besteht aus mehreren Unterprogrammen (z.B.):

sub1 {
...
}

sub2{
...
}

sub3{
...
}

main{
...
}

Mit welcher Methode bzw. Option kann man nur main() und z.B. sub1() und sub2() laufen lassen und mit welche - main() und sub3() ? (Natürlich, geht es hier nicht darum um etwas auszukommentieren ;)).

Ich bedanke mich im voraus !\n\n

<!--EDIT|dron|1112694468-->
Thorium
 2005-04-05 13:55
#53318 #53318
User since
2003-08-04
232 Artikel
BenutzerIn
[Homepage] [default_avatar]
In Perl werden Unterprogramme oder Subroutines nicht automatisch aufgerufen.
Wenn du also willst, dass eine Subroutine aufgerufen wird, rufst du sie einfach auf:

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

#Main und Sub3
main();
sub3();

#Main, Sub1 und Sub2
main();
sub1();
sub2();

sub main { }
sub sub1 { }
sub sub2 { }
sub sub3 { }
Per|li|nist der; -en, -en <zu ↑...ist>: a) Anhänger, Vertreter der radikalen Perlinisten die Perl als die einzig wahre Sprache ansehen; b) Mitglied einer perlinistischen Community.
dron
 2005-04-05 14:09
#53319 #53319
User since
2005-03-22
6 Artikel
BenutzerIn
[default_avatar]
Danke, aber ich verstehe es nicht ganz. In Deinem Beispiel, welcher von beiden "mains" wird ausgeführt - der erster mit sub3() oder der zweiter mit sub1() und sub2() ? Wie "weisst" das Programm das ich z.B. nur den zweiten main() ausführen möchte ?
renee
 2005-04-05 14:15
#53320 #53320
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Es wird beide Male main() ausgeführt...

Du bräuchtest eine Variable, deren Wert Du abfragst:
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
#! /usr/bin/perl

use strict;
use warnings;

print "Geben Sie 1,2 oder 3 ein... ";
my $zustand = <STDIN>;
chomp $zustand;

if($zustand == 1){
#Main und Sub3
main();
sub3();
}
elsif($zustand == 2){
#Main, Sub1 und Sub2
main();
sub1();
sub2();
}
# usw...


sub main { }
sub sub1 { }
sub sub2 { }
sub sub3 { }
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/
dron
 2005-04-05 14:20
#53321 #53321
User since
2005-03-22
6 Artikel
BenutzerIn
[default_avatar]
Jetzt ist es klar. :) Danke schön Thorium und Renee !

Ich möchte Sie noch etwas fragen. Gibt es grundsätzlich in Perl die Möglichkeit beim Aufruf des Programms, z.B. in Form einer Option, mitzuteilen welcher bei beiden main() ausgeführt werden muss ? (Es kann z.B. sein dass das Programm automatisch, d.h. ohne User Eingaben, durchlaufen werden soll).\n\n

<!--EDIT|dron|1112697192-->
pq
 2005-04-05 15:04
#53322 #53322
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
$ program.pl blubb
...
# program.pl
my $param = shift @ARGV; # oder $ARGV[0]

tip für einsteiger und alle, die es noch nicht gelesen haben: perldoc perlintro
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
renee
 2005-04-05 15:36
#53323 #53323
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich benutze ganz gern CPAN:Getopt::Long

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

use strict;
use warnings;
use Getopt::Long;

my $zustand = 1;

GetOptions('-z=n' => \$zustand,);

print $zustand,"\n";


Aufruf: skript.pl -z 3
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/
Taulmarill
 2005-04-05 15:43
#53324 #53324
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
da dron hier schon öfter nach den beiden mains gefragt hat, hier eine kurze erklärung.

eine subroutine wird mit ihrem namen aufgerufen, dass bedeutet main() ruft eine subroutine auf. definiert wird eine subroutine mit der funktion sub. in etwa so:
Code: (dl )
1
2
3
sub main {
print "die funktion main wurde aufgerufen.\n";
}

du kannst dicht zwei funktionen mit dem selben namen definieren.

evtl. sollte man noch anmerken, dass einer funktion mit dem namen main in perl keine besondere bedeutung (wie z.b. in C++ ) zukommt.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Crian
 2005-04-05 17:24
#53325 #53325
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
s~der funktion~dem Schlüsselwort~\n\n

<!--EDIT|Crian|1112707496-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< >> 9 Einträge, 1 Seite



View all threads created 2005-04-05 13:45.