Porbleme mit format und write in Perl

tlauter

Grünschnabel
Hallo!

Ich habe ein paar Probleme mit format und write in `Perl:
1. Sobald ich format verwende, um die Ausgabe in eine Datei zu formatieren, verlangt Perl beim Compilieren eine zusätzliche } ohne ein öffnendes Gegenstück. Ist das normal?

2.Zuerst habe ich ein Dateihandle geöffnet: open(OUT, ">test.txt");
Dann habe ich mit format OUT ein Format deklariert.
Alle Variablen, die ich in format OUT verwendet habe, sind auch initialisiert. Dann rufe ich write OUT auf, aber in der Ausgabedatei steht nichts.
Wenn ich mit dem Debugger drübergehe, so sind alle Variablen vor dem Aufruf von write definiert, aber nach dem nächsten Debug-Schritt schon nicht mehr.

Ich weiß nicht mehr, was ich noch machen soll und wäre dankbar für Hilfe!

TL
 
Zuletzt bearbeitet:
Code

Hi!

Habe untenstehend noch den Code der Ausgabe hinzugefügt. Ich habe eine verschachtelte Datenstruktur in der globalen Variablen %daten erzeugt (Hashes of Hashes und einmal auch Hash of Array):

PHP:
sub datei_ausgabe{
	open(OUT, ">>test.txt");
	set_format();
	foreach my $date (sort {$a<=>$b}(keys %daten)){		#Durchgehen von Datum-Einträgen
		my %clients=%{$daten{$date}};
		foreach my $client (sort (keys %clients)){	#Durchgehen aller Clients/Datum
			if($client ne 'mail'){
				my %save_sets= %{$clients{$client}};
				my $err=$clients{$client}{error};
				foreach my $save_set (sort (keys %save_sets)){
					if($save_set ne 'error'){
						my %data=%{$save_sets{$save_set}};
						my $start=$data{starttime};
						my $end=$data{endtime};
						my $gesamt=&berechne_zeit($start, $end);
						my $MB=$data{MB};
						my $retry=$data{retry};
						my $pool='';
						my @help=@{$data{pool}};
						foreach my $p (@help){
							$pool.=" ".$p;
						}
						my $mess='';
						#mess ausgabe
						write OUT;
					}
				}
			}
		}
	}
}

sub set_format(){
	$:=")"." "."\n";
	my ($date, $client, $err, $save_set, $start, $end, $gesamt, $MB, $pool, $retry, $mess);
	format STDOUT=
	Date:@<<<<<<<< Client:@<<<<<<<<< err:@<< save_set:@<<<<<<<<<<<< stime:@<<<<<<<<< etime:@<<<<<<<<< gtime:@<<<<<<<<< MB:@<<
	$date,         $client, 	 $err,   $save_set,		$start,          $end,            $gesamt,         $MB
	~								       ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
									       $pool
									       @<<<<<<<<<<
									       $retry
									 Mess: ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
									       $mess
}
}
 
Hat sich erledigt

Problem hat sich erledigt. Man sollte doch nicht alles mit my deklarieren, auch wenn man use strict oben stehen hat.
 

Neue Beiträge

Zurück