marinux
Goto Top

Perl code wiederverwenden (define), wie möglich?

Es geht sinnbildlich um diesen Code:
	if (bla bla){
 	    foreach (bla bla){
		  $test = $1;
		  $test2 = $2;
		  $test3 = $3;
	    }   
	}
	
	elsif (blu blu){
 	    foreach (blu blu){
		  $test = $1;
		  $test2 = $2;
		  $test3 = $3;
	    }   
	}
	else {
	    foreach (bli bli){
		  $test = $1;
		  $test2 = $2;
		  $test3 = $3;
	    }
	}

Man sieht, dass sich innerhalb jeder foreach-Anweisung der gleiche Code befindet. Kann man dies in Perl abkürzen, in dem man z.B. schreibt:

        #define CODE = 		  $test = $1;$test2 = $2;$test3 = $3;
	if (bla bla){
 	    foreach (bla bla){
		  CODE
	    }   
	}
	
	elsif (blu blu){
 	    foreach (blu blu){
		  CODE
	    }   
	}
	else {
	    foreach (bli bli){
		  CODE
	    }
	}

Gruß

Content-Key: 179821

Url: https://administrator.de/contentid/179821

Printed on: April 16, 2024 at 23:04 o'clock

Mitglied: 64748
64748 Jan 31, 2012 at 12:54:37 (UTC)
Goto Top
Hallo,

das geht mit Perl. Wie sehen denn die Abfragen aus? also was ist "bla bla" und was "blu blu" usw.?

Am einfachsten (aber nicht viel kürzer) wäre eine Funktion:
sub funktion {
    foreach ( ....) {              # die Parameter sind also bla bla, bli bli usw.
           CODE   # das ist das Gleiche, was Du auch in Deine Foreach-Schleifen schreibst
    }
}

# wenn die bla bla usw in ein Array passen, dann
my @abfragen = ( "bla bla", "blu blu.....usw ;  
foreach ( @abfragen ) {
    funktion ( $_ ) ;
}

Nun ist das sehr theoretisch, beschreib mal bitte genauer was Du machen möchtest.

Eigentlich sieht Dein "Beispiel" aber mehr nach Funktionaler Programmierung als nach OO (Wiederverwendbarkeit) aus.

Markus
Member: marinux
marinux Jan 31, 2012 at 13:26:24 (UTC)
Goto Top
Hallo,

Danke für Deine Antwort. Hier geht es nicht um OO sondern um funktionale Programmierung. Kann Perl damit umgehen?

Ich stelle mir das so ähnlich wie in C vor, wo man mit #define Inhalte, also auch Code mehrfach setzen kann.

Gruß
Mitglied: 64748
64748 Jan 31, 2012 at 15:19:31 (UTC)
Goto Top
Ja, Perl kann damit umgehen. Schau Dir mal unter diesem Link http://www.perl.com/pub/2002/05/29/closure.html das Beispiel zu Closures an. Wichtige Lektüre zu Perl und Funktionaler Programmierung: http://hop.perl.plover.com/

Wie ich schon geschrieben habe, wenn wir nicht wissen, was Du tatsächlich machen möchtest, dann ist es schwierig zu raten, was hier wirklich hilfreich ist.

Übrigens musst Du mit Perl schon einige Erfahrung haben, um solche Dinge vernünftig umsetzen zu können. Perl kann zwar alles, der Code ist meist sehr kurz und effizient, aber Perl ist nicht einfach, verglichen z.B. mit Ruby oder Python.
Außerdem solltest Du Dich hüten, C-Code mit Perl zu schreiben, das passiert schnell. Perl ist ja als Werkzeug für die Unix-Systemadministration entstanden und die Leute die es (früher) benutzt haben konnten eben C und die Shell. Aber Perl bietet weit mehr als C und man sollte daher (heutzutage) mit Perl auch richtigen Perlcode schreiben.

Gruß

Markus
Member: marinux
marinux Jan 31, 2012 at 18:38:54 (UTC)
Goto Top
Hallo,

ich werde mich Morgen an der Arbeit mit Deinen Verweisen beschäftigen. Sollte ich nicht weiterkommen, werde ich nochmal ausführlicher auf mein Problem eingehen.

Gruß