Parameter an Funktion im Modul übergeben

Begonnen von mt, April 27, 2007, 10:15:59

« vorheriges - nächstes »

0 Mitglieder und 2 Gäste betrachten dieses Thema.

mt

Moin Zusammen,

ich noch nicht so lange Erfahrung in Perl da ich vorher 5 Jahre ASP und PHP programmiert habe, daher habe ich vielleicht ne etwas "dümmere" Frage.

Ist es möglich Parameter an eine Funktion auszugeben?
Hier mal nen fiktives Beispiel:



Aufruf in den HTML-Vorlagen z.B.:

__text::textauslesen(testtextdatei.txt)__

Code im Modul (nur Auszug):

<!--spmacro:module(text)
sub textauslesen {
 
  # ....
  # Verwendung der Übergebenen Variable als $text_dat
  # genauere Idee habe ich da noch nicht
  # ...

  open (TEXTDAT,"$root/$shop_verz/$ordner_sprache/$datei_verz_texte/$text_dat") or die "Fehler beim öffnen der Datei\n$!";  # Datei oeffnen.
  # Schleife zum auslesen beginnen
  while (<TEXTDAT>)  {
    my $textinhalt = $_;  # Inhalt der Datei
    # Schleife zum Filtern von Sonderzeichen im Inhalt der Datei
    while (($suchen, $ersetzen) = each(%suchen_ersetzen)){
      $textinhalt =~ s/$suchen/$ersetzen/g;
    }
    main::mprint($textinhalt);
  }
  close (TEXTDAT) or die "Fehler beim schliessen der Datei\n$!"; # Datei schliessen
  return "noinc";
}
-->


Hoffe dafür gibt es ne Lösung, da ich sonst diese Funktion X-Mal (ca. 30) schreiben muss, da ich immer eine andere Datei habe.
Danke schonmal für die Antwort.


Gruß mt


cru

Hallo mt,

das ist zur Zeit leider nicht mögich...

Sie könnten es jedoch mit folgendem Ansatz probieren:

Sie legen für jede Texdatei einen Identifier an:

__text::textauslesen1__
__text::textauslesen2__
__text::textauslesen3__
__text::textauslesen4__

usw.


Innerhalb der ssp Funktion können dann Parameter übergeben werden.
Sollte dann in etwa folgendermaßen aussehen:


<!--spmacro:module(text)
sub textauslesen1 {
      my $text =  lese_text("DieDatei1.txt");
      main::mprint $text;
      return "noinc";
}
sub textauslesen2 {
      my $text =  lese_text("DieDatei2.txt");
      main::mprint $text;
       return "noinc";
}
sub textauslesen3 {
      my $text =  lese_text("DieDatei3.txt");
      main::mprint $text;
       return "noinc";
}
.
.
.


usw....

Jetzt fehlt nur noch die Funktion lese_text, welcher der Parameter übergeben wird:



.
.
.
sub lese_text {
 
my $datei= shift;

  open (TEXTDAT,"$root/$shop_verz/$ordner_sprache/$datei_verz_texte/$datei") or die "Fehler beim öffnen der Datei\n$!";  # Datei oeffnen.
  # Schleife zum auslesen beginnen
  while (<TEXTDAT>)  {
    my $textinhalt = $_;  # Inhalt der Datei
    # Schleife zum Filtern von Sonderzeichen im Inhalt der Datei
    while (($suchen, $ersetzen) = each(%suchen_ersetzen)){
      $textinhalt =~ s/$suchen/$ersetzen/g;
    }
    return $textinhalt;
  }
  close (TEXTDAT) or die "Fehler beim schliessen der Datei\n$!"; # Datei schliessen

}
-->


Sie müssen also pro Textdatei und pro neuem Identifier nur einen neuen sub anlegen, welcher die Funktion lese_text mit Parameter aufruft.

Ist nicht getestet, sollte aber so funktionieren...

mfg
cru


mt

Mmh, konnte ich mir leider schon denken.
Vielleicht kann man es ja irgendwann mal realisieren (später in Version 3 oder 4 ;)).

Trotzdem vielen Danke für die schnelle Hilfe, der Lösungsansatz ist interessant und würde schon das einbinden erleichtern.
Werde ich gleich testen.

mt

mt

Hallo nochmal,

Nur mal als Feedback, habe das Script gerade eingebaut und es funzt super, ist erstmal echt eine Alternative.
Danke!

Gruß, mt