PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : kann hash nicht ausgeben



mr-sansibar
22-05-2006, 15:29
while ( <lesen2> ) {

push @lines, $_;

my $Datum = $_ if m/Date: /;
my $Zeit = $_ if m/Zeit: /;
push @lines, $_;


$Zeit =~ s/\D//g;

#generierung von einem key
my $dt = "serapis1".substr($Datum, 12, 4).substr($Datum, 9, 2).substr($Datum, 6, 2).$Zeit;

if ( /^\s*$/ ) {
if ($errorFound eq 1) {
my %hashref = ($dt => @lines);

@lines = '';
$errorFound = 0;
}
}

$errorFound = 1 if /Severity: Error/;

m/NullPointerException/;
$LockedPinException++ if m/LockedPinException/;
$AuthenticationException++ if m/AuthenticationException/;
$Exception++ if m/\.Exception/;
$NoSuchElementException++ if m/NoSuchElementException/;
$RemoteException++ if m/RemoteException/;

}

while (($dt, @lines) = each %ENV) {
print OUT "$dt => @lines\n";
}

bekomme ein fehlermeldung bei der while scheilfe ganz unten: Global symbol "$dt" requires explicit package name at trxLogParser_2006-05-19.pl line 174.

Caveman
23-05-2006, 01:00
Was willst Du mit dieser Zeile bezwecken:
my %hashref = ($dt => @lines); Eine Referenz auf ein Hash beginnt mit $
Ein anonymes Hash wird mit geschweiften Klammern und nicht mit runden erstellt.
Wenn Du ein Array in einem Hash haben willst, geschieht dies über eine Referenz.


Ich würde diese Zeile also so schreiben:

my $hashref = { dt => \@lines }; Aufgerufen wird das Array dann so:

@{$hashref->{dt}}