Can"t use string ("HASH(0x82153b4)") as a HASH ref while "strict refs" in use
am 03.06.2007 15:25:30 von arlandt
Hallo
ich möchte eine Logdatei auslesen und die Häufigkeit bestimmter Einträge pro
Tag auszählen.
Das Ergebnis soll in einer DBM-Datei zwischengespeichert werden:
#!/usr/bin/perl -w
use strict;
use Date::Calc qw (:all);
use DB_File;
my %ergebnis_jahr;
[...]
dbmopen (%ergebnis_jahr, "amavis-stat2-jahreswerte.dat", 0644)
or die "Fehler bei der Initialisierung der Datenbank: $!\n";
[...]
while (<>) {
chomp;
if (/([\w]+) \s?([\w]+) ([\w:]+) (\w+) amavis\[(.*?\)) (Blocked|Passed
BANNED|INFECTED) ([\(\)\-\/\w]+)/) {
[..]
$tag = $2;
$monat = Decode_Month($1);
$status = $6;
[..]
$ergebnis_jahr{"$jahr-$monat-$tag"}{$status} ++
}
};
[...]
Ohne die Zeile "dbmopen..." funktioniert es. Mit der Zeile bekomme ich immer
den Hinweis
Can't use string ("HASH(0x82153b4)") as a HASH ref while "strict refs" in
use at ./amavis-stat-nt.pl line 54, <> line 12.
Wenn ich also "use strict" weglasse, geht es. Das möchte ich eigentlich
nicht.
Wie könnte ich es sonst machen oder wie könnte ich die Daten sonst "gut"
speichern?
--
bis dann
Jörg Arlandt
http://blog.arlandt.com
http://www.arlandt.com
Re: Can"t use string ("HASH(0x82153b4)") as a HASH ref while "strict refs" in us
am 03.06.2007 18:20:57 von Slaven Rezic
Jörg Arlandt writes:
> Hallo
>
> ich möchte eine Logdatei auslesen und die Häufigkeit bestimmter Einträge pro
> Tag auszählen.
>
> Das Ergebnis soll in einer DBM-Datei zwischengespeichert werden:
>
> #!/usr/bin/perl -w
> use strict;
> use Date::Calc qw (:all);
> use DB_File;
> my %ergebnis_jahr;
> [...]
> dbmopen (%ergebnis_jahr, "amavis-stat2-jahreswerte.dat", 0644)
> or die "Fehler bei der Initialisierung der Datenbank: $!\n";
> [...]
> while (<>) {
> chomp;
> if (/([\w]+) \s?([\w]+) ([\w:]+) (\w+) amavis\[(.*?\)) (Blocked|Passed
> BANNED|INFECTED) ([\(\)\-\/\w]+)/) {
> [..]
> $tag = $2;
> $monat = Decode_Month($1);
> $status = $6;
> [..]
> $ergebnis_jahr{"$jahr-$monat-$tag"}{$status} ++
> }
> };
> [...]
>
> Ohne die Zeile "dbmopen..." funktioniert es. Mit der Zeile bekomme ich immer
> den Hinweis
> Can't use string ("HASH(0x82153b4)") as a HASH ref while "strict refs" in
> use at ./amavis-stat-nt.pl line 54, <> line 12.
>
> Wenn ich also "use strict" weglasse, geht es. Das möchte ich eigentlich
> nicht.
>
> Wie könnte ich es sonst machen oder wie könnte ich die Daten sonst "gut"
> speichern?
>
DB_File kann nur mit einfachen Skalaren umgehen. Wenn du komplexe
Datenstrukturen ablegen willst, musst du DBM::Deep oder MLDBM
verwenden. Das geht im Prinzip genau so transparent wie bei DB_File.
Gruß,
Slaven
--
Slaven Rezic - slaven rezic de
tkrevdiff - graphical display of diffs between revisions (RCS, CVS or SVN)
http://ptktools.sourceforge.net/#tkrevdiff
Re: Can"t use string ("HASH(0x82153b4)") as a HASH ref while "strict refs" in us
am 03.06.2007 20:24:05 von arlandt
Slaven Rezic wrote:
> DB_File kann nur mit einfachen Skalaren umgehen. Wenn du komplexe
> Datenstrukturen ablegen willst, musst du DBM::Deep oder MLDBM
> verwenden. Das geht im Prinzip genau so transparent wie bei DB_File.
sieht Beides auf den ersten Blick gut aus ... werde mir beides mal genauer
ansehen... Danke!
> Gruß,
> Slaven
>
--
bis dann
Jörg Arlandt
http://blog.arlandt.com
http://www.arlandt.com