Beat: Unterprogrammtechnik

Beitrag lesen

Die Routine 'konvert' liegt in der Datei myperllib.pm:

.....
@EXPORT_OK = qw(.....  konvert   ....);
.....
sub konvert {
    my ($p1, $p2) = @_;
    my ($er1, $er2, $erg3, $erg4);

Achte auf deine Typos hier.
Ich hätte in dem Fall schlicht
    my @results;
geschrieben

return ????;

if( 'some_error_occured' ){ return; }

return @results;

}

  
~~~perl
package main;  
  
my @results = konvert( @somepars );  
  
if( @results ){ ... }  
else{ die "ein Fehler trat auf $!" }

Wenn deine Funktion mehr als drei parameter aufnimmt, solltes du dir die Übergabe eines hashes überlegen

# als Hashreferenz  
my @results = some_op(  
    {  
      prop1  => $val1,  
      prop2  => $val2,  
    }  
  );  
  
# als Liste (=> ist gleichbedeutend mit , )  
my @results = some_op(  
    prop1  => $val1,  
    prop2  => $val2,  
  );  
  

package myperllib;  
  
some_method{  
   # teste ob eine Referenz oder ein Array übergeben wurde  
   my %pars = ( ref $_[0] eq 'HASH' ? %{$_[0]} : @_ );  
   # go on...  
}

Deine API bleibt so unberührt von späteren Änderungen.

Willst du dir nicht den ganzen Namespace mit importierten Funktionen versauen, wäre ein Objektorientierter Ansatz sinnvoll.

my $ob = new myperllib;  
my @results = $ob->method( x=>1, y=>2 );

mit dem Konstruktor

package myperllib;  
  
new{  
  my $class=shift;  
  my $self = {};  
  bless $self, $class;  
  return $self;  
}

mfg Beat

--
><o(((°>           ><o(((°>
   <°)))o><                     ><o(((°>o
Der Valigator leibt diese Fische