Leser: 2
![]() |
|< 1 2 3 >| | ![]() |
24 Einträge, 3 Seiten |
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
#! /usr/bin/perl use strict; use warnings; use vars qw(@ISA @EXPORT $VERSION); # include MODUL in module search path BEGIN { push(@INC,"Z:/test"); } use test::log; my @XLOGVALUES001; my $XLOGVALUES001; while(@XLOGVALUES001) { shift(@XLOGVALUES001); } $XLOGVALUES001[0] = "1"; #logfile schreiben: ja = 1 nein = 2 $XLOGVALUES001[1] = "logfile"; #name des logfiles: "logfile.txt" $XLOGVALUES001[2] = 'C:\WINNT\system32\config'; #pfad des logfiles: &test::log::logfilename(\@XLOGVALUES001); $log2 = test::log->logfilename(); print "Zurueckgegebener Wert von der subroutine: ".$log2;
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 41 42 43
package test::log; use strict; use warnings; $test::log::VERSION = "0.0.1"; #============================================================================ ## @cmethod # The default constructor of class test::log #============================================================================ sub new { my $this=shift; my $class=ref($this) || $this; my $self= {}; #class attributes $self->{attr1}=undef; #bless the object bless($self,$class); #return the reference to the blesses object return($self); } sub logfilename { my $self = shift; my $logfilename; if (ref $self eq 'ARRAY' and $self->[1]) { $logfilename = ($self->[1]); } else { $logfilename = "DEFAULT_logfile_name"; } return $logfilename; } 1;
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__
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;
1 2 3 4 5 6 7 8 9 10 11 12 13 14
sub new { my $this=shift; my $class=ref($this) || $this; my $self= {}; #class attributes $self->{attr1}=undef; #bless the object bless($self,$class); #return the reference to the blesses object return($self); }
Linuxer+2009-01-22 13:20:42--Wenn Du das Modul objektorientiert erstellst, solltest Du es auch so benutzen.
Was mir auffällt:
1- Ich sehe keinen Sinn für die Variablen @ISA und @EXPORT im Hauptprogramm
2- 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 = ();
3- Jedes Feld Deines Array hat eine Bedeutung, warum benutzt Du keinen Hash, mit dem Du die Felder sprechend benennen könntest?
4- Dein Modul besitzt zwar einen Konstruktor, der aber niemals aufgerufen wird.
Struppi+2009-01-22 12:54:33--- (EDIT: war Quatsch)
- (EDIT2: auch das war falsch)
Du verwendest das Modul sehr seltsam. Es existiert ein Konstruktor der nicht aufgerufen wird, dann rufst du die Methode als statische Methode auf und dann als Membermethode. Und je nachdem ist $self entweder eine Arrayreferenz oder ein string mit dem Namen des Pakets.
Ich frag mich warum du diesen Weg gehst?
Linuxer+2009-01-22 14:10:25--Sorry, Tippfehler:
logfilename != logfile_name
Habe es in meinem vorigen beitrag korrigiert; bitte nachziehen (in der Methode logfilename)
![]() |
|< 1 2 3 >| | ![]() |
24 Einträge, 3 Seiten |