Perl Werte in Subroutine und zurück

brenner

Commander
Registriert
Apr. 2002
Beiträge
3.037
Ich bin jetzt schon ewig am lesen in diversen Tuts, aber ich rafe es anscheinend nicht.


Ich habe in einem Moduk in einer Subroutine ein array mit Werten aus einer Datei gefüllt.
In der Routine selber kann ich diese dann auch ausgeben lassen mit z.B.

print "Fehlernummer: ".$errormaplist[2];


Ausgabe ist dann z.B. ""Fehlernummer: 002 Datei nicht gefunden""

Ich will aber nun im Hauptprogramm die Fehlernummer in die Subroutine übergeben und dann die spzifische Meldung zurück bekommen. D.h. die "[2]" aus dem Beispiel müsste ich doch als Variable definieren die ihre Werte aus dem Hauptprogramm bekommt, aber das klappt irgendwie alles nicht :(
 
zeig doch mal bitte den code, sonst kan man sich nur schwer vorstellen wie du das gelöst hast. vl findet sich ja dann der fehler.
 
Ich habs ja eben noch nicht gelöst.

Code kann ich dir leider erst morgen früh schicken.
 
Hallo und danke für die Mühe. Ich erkläre es doch mal ausführlicher.


Ich habe drei Dateien.
-errormap.txt
-errorhandling.pl
-test.pm

Die errormap.txt ist so gefüllt:
Code:
00 Fehlermeldung 00
01 Fehlermeldung 01
02 Fehlermeldung 02
und so weiter.


Die test.pm sieht bisher so aus:
Code:
package test;

use strict;
use warnings;
use IPC::Open2;


sub errormap
{
	my $errormaplist=shift;
	#print $errormaplist."\n";
	open (DATEI, "errormap.txt");
	@errormaplist=<DATEI>;
	close (DATEI);
}
1;

Hier habe ich versucht das array mit den Daten der Tabelle zu befüllen was auch klappt wenn man das array ausgibt.



Tja und in der errorhandling.pl ist noch nicht viel bis auf viele Zeilen Tests diverser Versuche die inzwischen auskommentiert sind.:

Code:
#! /usr/bin/perl

use strict;
use warnings;

use <PfadzumModul>::test;





Ich möchte in der *.pl z.B.

print "Gib mir die Fehlernummer: ";
chomp($text = <STDIN>;

und dann eben irgendwie diese Fehlernummer ausgegeben haben die ich im Array in der *.pm eingelesen habe.


Vielleicht ist das von mir auch ein völlig falscher Ansatz, aber ich soll das ganze möglichst modular mit schlanken Hauptprogramm aufbauen, dazu noch objektorientiert.
 
Also wenn ich das Richtig verstanden hab, willst du folgendes:

Code:
sub errorcode
{
  my  $errorcode=shift;
  open (DATEI, "errormap.txt");
  my @errormaplist=<DATEI>;
  close (DATEI);
  if($#errormaplist>=$errorcode)
  {  
    return $errormaplist[$errorcode];
  }
  else
  { 
    return 'Unbekannter Fehler.';
  }
}

print errorcode(2);
 
Wenn ich nur das Modul aufrufe kommt:

Z:\<PFAD>PERL test.pm
readline() on closed filehandle DATEI at test.pm line 25.
Unknown error.



Wenn ich allerdings das
print errorcode(2);

am Ende weglasse läuft das Programm durch nur ohne Ausgabe.
 
Achso, ich hatte es dir einfach alles in eine Datei geklatscht.

Als Modul müsste es wie folgt aussehen:
Datei: error.pl
Code:
use strict;
use warnings;

use testpcw;

print test::errorcode(0);
print test::errorcode(1);
print test::errorcode(2);

Datei: testpcw.pm
Code:
package test;

use strict;
use warnings;

sub errorcode;

my @errormaplist;

BEGIN
{
  open (DATEI, "errormap.txt");
  @errormaplist=<DATEI>;
  close (DATEI);

  print "Errormaplist geladen\n";
}

sub errorcode
{
  my  $errorcode=shift;
  if($#errormaplist>=$errorcode)
  {
    return $errormaplist[$errorcode];
  }
  else
  {
    return 'Unbekannter Fehler.';
  }
}

Und beides ins gleiche Verzeichnis legen. Inklusive deiner Fehlertextdatei natürlich.
 
Zurück
Oben