Thread Hilfestellung bei Problem mit package (20 answers)
Opened by jan99 at 2015-03-27 08:06

jan99
 2015-03-27 08:57
#180409 #180409
User since
2008-09-18
439 Artikel
BenutzerIn
[default_avatar]
Ich muss mit meinem Package nochmal zurück kommen.

Derzeit sieht es so aus...

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package EBL::ebl_reporting;

use strict;
use warnings;
use IO::File;
#use Time::localtime;
require Time::localtime; 

sub open
{
  my $class=shift;
  my $log_file=shift;

  # Referenz auf STDOUT
  my $fh=\*STDOUT;

  # wenn object und kein File => neuer Name = alter Name
  if(ref $class && !$log_file)
  {
    $log_file=$class->{file};
    $class->{fh}->close();
  }

  # versuchen Fh zu öffnen
  if($log_file) {
    my $ofh=IO::File->new();
    my $mode='>';
    $mode='>>' if( ref $class );
    if($ofh->open($log_file,$mode) ) {
      $fh=$ofh;
    } else {
      $fh->print("ERROR open $log_file ($!)\nwrite to STDOUT\n");
    }
  }

  # objektwerte neu setzen wenn objekt
  if( ref $class ) {
    $class->{fh}=$fh;
    $class->{file}=$log_file;
    return $class;
  }

  # neues Objekt
  return bless({ fh=>$fh, file=>$log_file, on=>1 },$class);
}

# log(1) => logging an
# log(0) => logging aus
# log() => aktueller Status
sub log
{
  my $self=shift;
  $self->{on}=shift() if(@_);
  return $self->{on};
}

# shell(1) => zusätzliche Shell-Ausgabe an
# shell(0) => zusätzliche Shell-Ausgabe aus
# shell() => aktueller Status
sub shell
{
  my $self=shift;
  $self->{on}=shift() if(@_);
  return $self->{on};
}

# filename
sub file   { shift->{file}; }

# filehandle
sub fh     { shift->{fh}; }

# write to file mit optionaler Ausgabe auf die Shell
sub write  {
  $_[0]->fh->print($_[1]."\n") if($_[0]->log()); 
  print($_[1]."\n") if($_[0]->shell()); 
  }

# write to file and screen
sub doublewrite  { 
  $_[0]->fh->print($_[1]."\n") if($_[0]->log()); 
  print($_[1]."\n")
}

# close filehandle
sub close  { shift->fh->close(); }

# wahr wenn Datei geöffnet
sub opened { shift->fh->opened(); }

1;


Darin gab es in der alten Version bereits die Funktion ->doublewrite bei welcher in Abhängigkeit von ->log neben der Bildschirmausgabe eine in eine Datei (definiert in open) erfolgt.

Nun wollte ich die Bildschirmausgabe auch schaltbar machen und habe ->shell ergänzt.

Die Funktionalität von ->doublewrite habe ich dann in ->write mit ->shell eingebaut.

Das funktioniert auch soweit bis auf die Tatsache das beide Ausgaben im Bildschirm erfolgten. An ->open habe ich keine Änderung vorgenommen.

Die Einbindung sieht wie folgt aus:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
...
use EBL::ebl_monitoring;                           # Sonderfunktionen für EBL-Einsatz
use EBL::ebl_reporting;                            # Reportingfunktion
use File::Copy qw(copy);

# main-parameters
my %config=(
  "logstatus"=>1,                                  # soll Protokoll geschrieben werden
  "shellstatus"=>1,                                # zusätzliche Protokollausgabe Shell
  "active"=>0,                                     # damit wird die Funktion (Kopiervorgang und Server stop / start scharf geschaltet)
  "logfilename"=>'DWG2AIMS.log',                   # Dateiname für die Scriptausführung
  "folder_source"=>'',                             # Quelle der DWG-Dateien
);

# Reportsteuerung
my $log=EBL::ebl_reporting->open($config{logfile_name});
$log->log($config{logstatus});
$log->shell($config{shellstatus});

$log->write("Starten eines MapEdit-Update (AIMS-Server)");
...


Auch wenn das Posting und alles etwas länger ist - vielleicht kann mir einer von Euch sagen wo mein Denkfehler vorliegt.

Gruß Jan
perl-Greenhorn - Win7 64bit / strawberry (ehem. activeperl) - www.OpenStreetMap.de

View full thread Hilfestellung bei Problem mit package