Thread Bei Abfrage des Rückgabewerts aus einer Subroutine gibts Fehler... (23 answers)
Opened by Brenner at 2009-01-22 12:26

Linuxer
 2009-01-22 14:20
#118247 #118247
User since
2006-01-27
3891 Artikel
HausmeisterIn

user image
Wenn Du das Modul objektorientiert erstellst, solltest Du es auch so benutzen.

Was mir auffällt:

- Ich sehe keinen Sinn für die Variablen @ISA und @EXPORT im Hauptprogramm
- Was soll Deine While-Schleife bewirken? @XLOGVALUES001 ist leer und enthält keine Werte; ausserdem, wenn Du ein Array leeren willst, verwende doch bitte: @array = ();
- Jedes Feld Deines Array hat eine Bedeutung, warum benutzt Du keinen Hash, mit dem Du die Felder sprechend benennen könntest?
- Dein Modul besitzt zwar einen Konstruktor, der aber niemals aufgerufen wird.


ein (schnell zusammengetippter(!)) Vorschlag (ungetestet):

Hauptprogramm:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#! /usr/bin/perl
use strict;
use warnings;

use lib qw(
  Z:/test
);
use test::log;

my $log = test::log->new(
  {
    write_logfile => 0, # 0 => nein, 1 => ja
    logfile_name  => 'logfile',
    logfile_path  => 'C:/WINNT/system32/config',
  }
);

printf "Name des Logfiles: %s\n", $log->logfilename;

__END__


Modul:
Code (perl): (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
28
29
30
31
32
33
34
35
36
37
38
39
40
package test::log;
use strict;
use warnings;

$test::log::VERSION = "0.0.2";

my %defaults = (
    write_logfile => 0,  # 0 => nein, 1 => ja
    logfile_name  => 'DEFAULT_logfile_name',
    logfile_path  => 'C:/WINNT/system32/config',
);


sub new {
  my ( $class, $ref ) = @_;
  my $self;

  if ( ref( $ref ) ne 'HASH' ) {
    die "Please provide a hash reference as argument!\n";
  }

  # uebernehme die definierten Defaults und die Inhalte der übergebenen 
  # Hash-Referenz; diese Inhalte ueberlagern ggfs. die Defaults, sodass in 
  # $self die Defaults für Parameter gelten, die nicht mitgegeben wurden
  $self = { %defaults, %$ref };

  bless $self, ref( $class ) || $class;

  return $self;
}

sub logfilename {
  my ( $self, @args ) = @_;

  return $self->{logfile_name} if exists $self->{logfile_name};

  return undef;
}

1;


edit:
- $VERSION Variable im Modul eingesetzt
- Übernahme der Defaults in $self eingebaut
- TYPO fixed: logfilename != logfile_name
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Bei Abfrage des Rückgabewerts aus einer Subroutine gibts Fehler...