Kade im e greshkata?
26 отговора
699 прегледа
Kade im e greshkata?
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
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
Re: Kade im e greshkata?
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!";
}
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!";
}
Re: Kade im e greshkata?
:)) 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?
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
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
Re: Kade im e greshkata?
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.
&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.
Re: Kade im e greshkata?
Така, нека да определим какъв е проблема, защото аз не можах да го разбера:
1. Ако проблема е да се затрие hash-а, всички предложени идеи до тука са неефективни. Принипно трябва да работят, но понякога има и бъгове. Единственият стабилен трияч на hash е безкрайно прост: %config=();
Това е напълно достатъчно.
2. Наистина нямам време да чета кода, но обърни внимание на следното:
Къде си дефинирал config и как. Ако си го дефинирал някъде с my, е възможно видимостта му да е ограничена. Затова просто махни "my" и виж дали ще се оправи
1. Ако проблема е да се затрие hash-а, всички предложени идеи до тука са неефективни. Принипно трябва да работят, но понякога има и бъгове. Единственият стабилен трияч на hash е безкрайно прост: %config=();
Това е напълно достатъчно.
2. Наистина нямам време да чета кода, но обърни внимание на следното:
Къде си дефинирал config и как. Ако си го дефинирал някъде с my, е възможно видимостта му да е ограничена. Затова просто махни "my" и виж дали ще се оправи
Re: Kade im e greshkata?
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.
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?
Възможно е някъде да си локализирал тези променливи. В perl няма случайни прояви. Гледай за my, local или дублиране на имената
Re: Kade im e greshkata?
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.
Re: Kade im e greshkata?
Мисля че е безмислено да продалжаваме този диалог околу тази тема. Моят вече няколкогодишен опит показва че случайни неща в Perl няма. Затова ти казах да обърнеш внимание на това. Както и да е, не ми се спори по този въпрос повече :)
Re: Kade im e greshkata?
### 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 = .........
Zna4i redyt na koito se otvarq config-a (s 4ervenata strelka) se izpylnqva,a ot sledvashtiqt red (sinqta strelka) nadolu go preska4a,dori cikylyt while ne se izpylnqva,a tam nqma promenliva zq obqvqvane
Ako ne iska nikoi da ne otgovarq,za da ne stavat izlishni drazgi.
Re: Kade im e greshkata?
#/usr/bin/perl -w
use strict;
Shte ti pomogne mnogo pri reshavaneto na problema!!!
use strict;
Shte ti pomogne mnogo pri reshavaneto na problema!!!
Re: Kade im e greshkata?
Greshkata ti e ...
... 4e se muchish da otkriesh toplata voda.
Za koi ti e da pi6e6 100 reda code, kato imash Config::Ini ?
..... qsno e kolko si 4el
...всички ще врите в Ада! муахахахахахаха }:-]
Za koi ti e da pi6e6 100 reda code, kato imash Config::Ini ?
..... qsno e kolko si 4el
...всички ще врите в Ада! муахахахахахаха }:-]
Редактирано от BSD Nomade на
Re: Greshkata ti e ...
Ami vse pak ne moga da pro4eta si4ko,kaji ot kade da pro4eta za Config::Ini
Re: Greshkata ti e ...
A ima li nqkoi modul za parse na config,koito da si varvi sas standartnata distribuciq na Perl,zashtoto ne moje na vsqkade kadeto puskam scripta da install Config::Ini 
Re: Greshkata ti e ...
За съжаление нямам информация стандартен такъв да е правен до 5.8.0
Има начин и без да се инсталира модула Config::Inifile!
Компилирай го някъде с префикс, различен от този по подразбиране, компресирай компилирания модул и преди да пускаш скрипта просто го разархивирай в текущата директория. За да работи обаче, трябва в началото му да укажеш пътя до модула в @INC, т.е. добави:
use lib "path/to/module";
и с това си готов :)
luck!
...всички ще врите в Ада! муахахахахахаха }:-]
Има начин и без да се инсталира модула Config::Inifile!
Компилирай го някъде с префикс, различен от този по подразбиране, компресирай компилирания модул и преди да пускаш скрипта просто го разархивирай в текущата директория. За да работи обаче, трябва в началото му да укажеш пътя до модула в @INC, т.е. добави:
use lib "path/to/module";
и с това си готов :)
luck!
...всички ще врите в Ада! муахахахахахаха }:-]
Re: Greshkata ti e ...
Config::Inifile, съжалявам за грешката.
Поразрови из search.cpan.org, има доста изписано по въпроса
...всички ще врите в Ада! муахахахахахаха }:-]
Поразрови из search.cpan.org, има доста изписано по въпроса
...всички ще врите в Ада! муахахахахахаха }:-]
Re: Kade im e greshkata?
gledaj pi4 ne ti trqbwat nikakwi dopulnitelni modul za parse i etc. i etc.
Bota se kazwa ircnewbie i naistina e ot edin sajt za irc (irchelp.unibg.org). Funckiqta rehash beshe dobawena dosta po-kysno, zaradi towa moje bi e i untested i naprawena (skylypena) nabyrzo. Greshkata e wyw while keys, trqbwa da byde foreach keys! Neka si ostanem s dobroto i moje pone edin comment da ostawish ot kyde e original code-a.
Btw garantiram 4e parser-a raboti ako ne mnogo dobre, to dostaty4no :) No e malko bawen s tezi regexes... Ima i dosta po-dobri na4ini
Bota se kazwa ircnewbie i naistina e ot edin sajt za irc (irchelp.unibg.org). Funckiqta rehash beshe dobawena dosta po-kysno, zaradi towa moje bi e i untested i naprawena (skylypena) nabyrzo. Greshkata e wyw while keys, trqbwa da byde foreach keys! Neka si ostanem s dobroto i moje pone edin comment da ostawish ot kyde e original code-a.
Btw garantiram 4e parser-a raboti ako ne mnogo dobre, to dostaty4no :) No e malko bawen s tezi regexes... Ima i dosta po-dobri na4ini
Re: Kade mu e greshkata?
Znam 4e ne mi trqbvat :)).Ideqta vi za toq bot e dobra.V na4aloto go pregledah i mi haresa.Izpolzvam osnovata mu za moq samo,zashtoto iskah da ima savsem drugi raboti otkolkoyo ste smetnali vie 4e e nujno da se slojat.NO.IRCnewbie naistina e dobyr.Az sym v na4alen stadii na rabota s perl i prosto mi trqbvashe ideq s koqto da potrniram malko i toq bot mi beshe dobre doshal.Mislq 4e tova koeto sym napravil e dobro syshto(pone kato za na4alo i za na4inaesht) ne mislq da go pokazvam nqkade pone za sega zashtoto se zanimavam s nego prosto ot liubopitstvo,no ako izlezne neshto interesno ot nego ZADYLJITELNO shte sloja dobri dumi i az vas :))).Az taka i ne razbrah zashto ste go zarqzali toq bot??Az misleh napravo vas da pitam kak da si opravq greshkata no ne vidqh podhodqshta vryzka.Iskam da postavq oshte tuk dobra duma za toq sait zashtoto ste se postarali da slojite dosta raboti tam,koito pone na men sa mi pomagali dosta.Samo ako mojete da mi obesnite kak da go naprava toq bot da otgovarq na CTCP chat ( CTCP PING ve4e go napravih) shte sym mnogo blagodaren.Za sega tova.
Ako iskate da vi pratq scripta kakto e do momenta : [email protected]
Sega shte probvam kato smenq WHILE sas FOREACH dali shte se polu4i.
Do skoro
Ako iskate da vi pratq scripta kakto e do momenta : [email protected]
Sega shte probvam kato smenq WHILE sas FOREACH dali shte se polu4i.
Do skoro