Can"t use string ("HASH(0x82153b4)") as a HASH ref while "strict refs" in use

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