perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 19
Click for quality!




12.02.2012 / 02:19

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragCan't use string ('_halb') as a HASH ref while strict refs in
Seitenanfang
Halli Hallo!

Ich habe ein sehr seltsames Problem. Bei einigen Scripts tritt folgender Fehler auf:

 Can't use string ("_halb") as a HASH ref while "strict refs" in use
. Soweit so gut.

Das Problem ist, dass das Problem nicht immer sondern nur sporadisch auftritt.

Das nächste seltsame ist, dass das Problem nicht sofort, sondern erst nach einiger Zeit auftritt. Tritt der Fehler auf und startet man den Apache neu, ist der Fehler wieder weg für ne Zeit.

Und zu guter letzt kommt die Variable "_halb" nirgens vor. Ich habe auch schon mal den kompletten Server rebootet, mit dem gleichen Ergebniss wie beim Apache Neustart. Der Fehler kommt nach einiger Zeit wieder.

Weis jemand Rat?

mfg, perler

Datum: 28.05.2007-20:43

Beitragre: Can't use string ('_halb') as a HASH ref while strict refs in
Seitenanfang
Hallo!

>>Und zu guter letzt kommt die Variable "_halb" nirgens vor

Gut möglich. In der Fehlermeldung steht auch, dass in der Variable, die du als Hashzeiger benutzen willst, die Zeichenkette "_halb" steht. Vermutlich wird der Inhalt der Variable irgendwie überschrieben. Ohne einen Quellcodeauszug kann man aber nur raten, wie und wo das passiert.

Grüße, Skrilax

Datum: 29.05.2007-08:19

Beitragre: Can't use string ('_halb') as a HASH ref while strict refs in
Seitenanfang
Hmm, ich wüsste nicht wo. Hier mal die Erzeugung der Hashreferenz $INIT:

Hauptscript:

use strict;
require '/pfad/zum/config_script/configscript.pl';
my $INIT = &CONFIG::init(\time(), \%ENV);

Config Script configscript.pl in dem verschiedene Subroutinen stehen

package CONFIG;

sub init
{
my $sectime = shift;
my $ENV = shift;

use CGI qw(:standard);

my %timedate; &CONFIG::timedate($sectime, \%timedate);
my %query; $query{$_} = param($_) foreach (param);

my $cookie = $ENV->{'HTTP_COOKIE'} || $ENV->{'COOKIE'};
my ($sid) = $cookie =~ /.*sid\=([a-z0-9]+).*/;

return ({'query' => { %query },
'sid' => $sid,
'host' => $ENV->{'HTTP_HOST'},
'ip' => $ENV->{'REMOTE_ADDR'},
'init_errorcolor' => '<font color=#ff0000>',
'init_errorstyle' => 'background:#C00000;',
%timedate,
});
}

sub timedate
{
my $sectime = shift;
my $timedate = shift;
my ($timedate_sekunde,$timedate_minute,$timedate_stunde,$timedate_tag,$timedate_monat,$timedate_jahr) = localtime($$sectime);
$timedate_monat+=1;
$timedate_jahr+=1900,

$timedate->{'atime'}=$$sectime;
$timedate->{'tag'}=(sprintf "%02d",$timedate_tag);
$timedate->{'monat'}=(sprintf "%02d",$timedate_monat);
$timedate->{'jahr'}=$timedate_jahr;
$timedate->{'stunde'}=(sprintf "%02d",$timedate_stunde);
$timedate->{'minute'}=(sprintf "%02d",$timedate_minute);
$timedate->{'sekunde'}=(sprintf "%02d",$timedate_sekunde);
$timedate->{'datum'}=(sprintf "%02d",$timedate_tag).'.'.(sprintf "%02d",$timedate_monat).'.'.$timedate_jahr;
$timedate->{'datumop'}=$timedate_jahr.(sprintf "%02d",$timedate_monat).(sprintf "%02d",$timedate_tag);
$timedate->{'zeit'}=(sprintf "%02d",$timedate_stunde).':'.(sprintf "%02d",$timedate_minute).':'.(sprintf "%02d",$timedate_sekunde);
$timedate->{'zeitop'}=(sprintf "%02d",$timedate_stunde).(sprintf "%02d",$timedate_minute).(sprintf "%02d",$timedate_sekunde);
}

Der Fehler tritt dann immer in der Zeile eines Scripts auf, wo irgendein Wert aus $INIT (zb $INIT->{'host'}) zum ersten Mal abgerufen wird. Aber wie gesagt nicht sofort und auch nicht immer. Erst nach einiger Zeit und dann auch nicht bei jedem Aufruf.

Kannst du da was sehen?

mfg, Perler

Datum: 29.05.2007-10:07

Beitragre: Can't use string ('_halb') as a HASH ref while strict refs in
Seitenanfang
Hallo!

Deiner Problembeschreibung nach resultiert dieser Fehler wohl aus dem besonderen Verhalten von mod_perl (Variablencaching und son Zeugs). Hast du dieses Modul im Apachen installiert? Allerdings initialisierst du die $INIT-Variable ja ordnungsgemäß...

Das einzigste was ich dir jetzt noch empfehlen kann, ist dass du auch wirklich alle Variablen bei der Erstellung initialisierst, z.B.:


my %timedate = (); &CONFIG::timedate($sectime, \%timedate);
my %query = (); $query{$_} = param($_) foreach (param);

Allerdings glaube ich nicht wirklich, dass das der Grund für den Fehler ist.

Zugegebenermaßen bin ich da überfragt :(

Grüße, Skrilax

Datum: 01.06.2007-10:11

Beitragre: Can't use string ('_halb') as a HASH ref while strict refs in
Seitenanfang
Ja die Scripts laufen auf mod_perl.

Ich werds mal versuchen. Muss die Maschine eh mit 2 weiteren GB Ram nachrüsten. Vielleicht hat sich der String ja irgendwo so verbissen, dass er sogar den reboot überlebt hat. Aber seltsam schon, dass der erst nach einiger Zeit auftaucht.

Zugegebenermaßen bin ich da überfragt :(
-> Da sind wir schon zwei ;-)

Datum: 01.06.2007-10:25

-






-
-