|
Страници по тази тема: 1 | 2 | 3 | >> (покажи всички)
Тема
|
Kade im e greshkata?
|
|
Автор |
Teшkapcko_koпeлe (grrrr) |
Публикувано | 20.08.03 17:06 |
|
Zna4i napisah edin prost bot za IRC,koito ima glaven script i config.V glavniq script edna podprograma parsva konfiga i si4ko si raboti OK.Primerno:
sub scanconfig {
open(CONF, $conffile) || die "Can't open configuration file!\n";
while (chomp ($_ = <CONF>)) {
last if /^\s*1;\s*$/;
next if /^$/;
next if /^#/;
if ($_ =~ /^\s*\$(.+?)\s*=\s*(?!\\)["']?(.+?)(?!\\)['"]?;\s*$/) {
$nick = $2 if ($1 eq 'nick');
$ident = $2 if ($1 eq 'ident');
$ircname = $2 if ($1 eq 'ircname');
$server = $2 if ($1 eq 'server');
} else {
print "Cannot parse Configuration File\n";
}
close(CONF);
$config{nick} = $nick || die "Nickname missing!";
$config{ident} = $ident || die "No ident in config!";
$config{ircname} = $ircname || die "IRCname missing";
$config{server} = $port || die "No default server found!";
}
Tova e primerniata &scanconf(); subroutine.Ideqta e vzeh ot edin BG sait za IRC,no ne mu pomnq imeto.Problema idva kogato resha da napravq Rehash
na bota.Izpolzvah syshto kakto mom4etata sa napravili v saita:
delete $config{$_} while keys %config;
&scanconf();
Kogato promenq konfig-a i napravq rehash (pone spored men) bi trqbvalo da se iztriqt nastoqshtite stoinosti v %config sled koeto &scanconf() da zaredi hash-a s novite stoinosti,no ne se polu4ava taka,a vsi4ko si zapazva starata stoinost.Moje li nqkoi da mi kaje kade mi e geshkata.Moje bi tozi na4in izobshto ne e uda4en v slu4aq.
Blagodarq predvaritelno na otkliknalite.Molq tezi,koito shte mi prepory4at edin ton knigi ili RTFM da pro4eta da si zapazqt mnenieto za sebe si.Chel sym dostaty4no za sega
| |
|
korigirai si procedurata po slednia na4in i nema da ima6 problemi
sub scanconfig {
open(CONF, $conffile) || die "Can't open configuration file!\n";
while (chomp ($_ = <CONF>)) {
last if /^\s*1;\s*$/;
next if /^$/;
next if /^#/;
if ($_ =~ /^\s*\$(.+?)\s*=\s*(?!\\)["']?(.+?)(?!\\)['"]?;\s*$/) {
$nick = $2 if ($1 eq 'nick');
$ident = $2 if ($1 eq 'ident');
$ircname = $2 if ($1 eq 'ircname');
$server = $2 if ($1 eq 'server');
} else {
print "Cannot parse Configuration File\n";
}
close(CONF);
delete @config{keys %config}; # tova sas sigurnost sha ti zatrie HASH-a :o)
$config{nick} = $nick || die "Nickname missing!";
$config{ident} = $ident || die "No ident in config!";
$config{ircname} = $ircname || die "IRCname missing";
$config{server} = $port || die "No default server found!";
}
| |
|
:)) I taka ne stava moi 4ovek.To sigurno trie hash-a,noposle qvno po nqkakav na4in si4ko se vryshta kakto si e bilo(toest vednaga sled &scanconfig() ).Ne znam izobshto kakvo stava.A i kato gledam toq forum izcqlo ve4e e po4inal i nikoi nishto ne pishe v nego.Pylna mizeriq.. cc c c
| |
Тема
|
Re: Kade im e greshkata?
[re: Teшkapcko_koпeлe]
|
|
Автор | Pavel (Нерегистриран) |
Публикувано | 26.08.03 13:16 |
|
Nqmah vreme da cheta koda no po tova koeto kazvash trqbwa da si suzdal closure po nqkakuw nachin.
Potursi poveche za closure w Perl iz Google. Nakratko tova e zapazvane na statusa na nqkakwi danni wupreki che widimo si izlqzul ot regiona im na validnost.
Sutho ako moje postni nahcina po koito wikash subroutina - nqj weroqtno tam se oplitata neshtata
| |
|
Zna4i podprogramata q izvikvam ot druga podprograma
&rehashing();
sub rehashing { #koqto za sega napravih samo da vika &scanconfig();
&scanconfig();
}
nai-interesnoto e,4e kogato se startira kato za na4alo slednite skalari si priemat stoinost:
open(CONF, $conffile) || die "Can't open configuration file!\n";
while (chomp ($_ = <CONF>)) {
last if /^\s*1;\s*$/;
next if /^$/;
next if /^#/;
if ($_ =~ /^\s*\$(.+?)\s*=\s*(?!\\)["']?(.+?)(?!\\)['"]?;\s*$/) {
$nick = $2 if ($1 eq 'nick');
$ident = $2 if ($1 eq 'ident');
$ircname = $2 if ($1 eq 'ircname');
$server = $2 if ($1 eq 'server');
} else {
print "Cannot parse Configuration File\n";
}
no kogato vsi4ko tova trqbva da premine prez sub rehashing promenlivite $nick,$ircname,$server i t.n.t ne priemat nikakva stoinost,a pone na pryv pogled cqlata podprograma &scanconfig(); se izpylnqva po edin i sasht na4in.Zna4i tova: $nick = $2 if ($1 eq 'nick'); trqbva da vryshta false v tozi slu4ai,no zashto vryshta false 4ak vtoriq pyt (kogato &scanconfig() e izvikan ot &rehashing() ) ,a pyrviq pyt si4ko si inava bez problemi.
blagodarq prevaritelno ako nqkoi mi pomogne zashtoto mi svyrshiha ideite ve4e.
| |
|
Така, нека да определим какъв е проблема, защото аз не можах да го разбера:
1. Ако проблема е да се затрие hash-а, всички предложени идеи до тука са неефективни. Принипно трябва да работят, но понякога има и бъгове. Единственият стабилен трияч на hash е безкрайно прост: %config=();
Това е напълно достатъчно.
2. Наистина нямам време да чета кода, но обърни внимание на следното:
Къде си дефинирал config и как. Ако си го дефинирал някъде с my, е възможно видимостта му да е ограничена. Затова просто махни "my" и виж дали ще се оправи
| |
|
kakto pisah v predishniq posting- greshkata se okaza ne vav hash-a,a vav samoto prisvoqvane na stoinosti :
sub scanconfig {
open(CONF, $conffile) || die "Can't open configuration file!\n";
while (chomp ($_ = <CONF>)) {
last if /^\s*1;\s*$/;
next if /^$/;
next if /^#/;
if ($_ =~ /^\s*\$(.+?)\s*=\s*(?!\\)["']?(.+?)(?!\\)['"]?;\s*$/) {
$nick = $2 if ($1 eq 'nick');
$ident = $2 if ($1 eq 'ident');
$ircname = $2 if ($1 eq 'ircname');
$server = $2 if ($1 eq 'server');
Zna4i tezi scalar-i si priemat stoinost kakvato si trqbva kogato startiram programata,no kogato tazi podprograma se izvika ot drug sub i neshto se skapva i priemat undef stoinosti.I tova se slu4va edinstveno s tazi 4ast ot podprogramata.Ostanalata kadeto tezi scalari predavat stoinostta si na %hash-a si e rabotila vinagi kakto trqbva.
| |
Тема
|
Re: Kade im e greshkata?
[re: Teшkapcko_koпeлe]
|
|
Автор | pencho666 (Нерегистриран) |
Публикувано | 31.08.03 17:19 |
|
Възможно е някъде да си локализирал тези променливи. В perl няма случайни прояви. Гледай за my, local или дублиране на имената
| |
|
Ne e vyzmojno,za6toto tezi premenlivi sa edinstvenite,koito sa globalni i edinstveno tqh ne izpolzvam nikade kato localni.A i kakto kazah po-gore ,kogato se stratira programata tezi globalni promenlivi si priemat stoinost ot RegEx-a,no pri "rehash" sub-a izvikva "scanconfig" otnovo i togava ve4e vse edno regex-a ne namira takiva savpadeniq i tezi promenlivi ne priemat stoinost.
| |
|
Мисля че е безмислено да продалжаваме този диалог околу тази тема. Моят вече няколкогодишен опит показва че случайни неща в Perl няма. Затова ти казах да обърнеш внимание на това. Както и да е, не ми се спори по този въпрос повече :)
| |
|
Страници по тази тема: 1 | 2 | 3 | >> (покажи всички)
|
|
|