Thread View: pl.comp.lang.perl
6 messages
6 total messages
Started by Mateusz Szczyrzyca
Tue, 27 Sep 2011 14:07
obiekty + fastcgi - destruktor nie działa?
Author: Mateusz Szczyrzyca
Date: Tue, 27 Sep 2011 14:07
Date: Tue, 27 Sep 2011 14:07
56 lines
2710 bytes
2710 bytes
Witam serdecznie,
Mam małą aplikację z użyciem FCGI. Powiedzmy, że użyję przykładu Pralni.
Mam w niej powiedzmy Pralka.pm (obiekt)
W tym obiekcie mam różne funkcje (pranie(), plukanie(), itp), w tym jedna
metoda (np: programator()), która bada zmienną przesłaną do obiektu Pralka z
poziomu pętli FCGI i dopiero odpalająca odpowiednie funkcje.
O ile wewnątrz obiektu Pralka użyję jakieś inne obiekty
(np: Pompa.pm, Suszarka.pm) to z nimi jest wszystko ok. Natomiast problem
jest z Pralką, dezaktywuję ją w głównej pętli FCGI ,,książkowo'' czyli
za pomocą `undef` jak widać na poglądowym kodzie:
#v+
my $request = FCGI::Request( );
while( $request->Accept( ) >= 0 )
{
[ tutaj różne takie ]
switch( $url )
{
case( /wstepne/ )
{
$Pralka = Pralka-new( \%Pranie );
$html1 = $Pralka->programator( 'silnik' );
$html2 = $Pralka->programator( 'pompa' );
$html3 = $Pralka->programator( 'pranie_wstepne' );
$Pralka = undef;
}
}
[ $html[1-3] później użyte do umieszczenia w kodzie HTML ]
}
#v-
Jednakże destruktor Pralki się w ogóle nie zgłasza. Normalnie bym to
zignorował, ale powstał z tego tytułu pewien problem... otóż każda
funkcja z obiektu Pralka mi się 2x wykonuje, każda. Sprawdzałem,
program, bazę danych, i to niestety prawda...
Oczywiście sprawdziłem i żadna z funkcji nie jest zapętlona, żadnych tam
rekurencji i w ogóle nie powinno to 2x więcej wody i prądu zużywać. :-)
Oczywiście próbowałem $Pralka = undef, undef $Pralka, ale Pralka wydaje
się być nieśmiertelna.
Nie wiem... może coś przeoczyłem, ale proszę o drobną wskazówkę co
jest powodem nieśmiertelności tej pralki u mnie... a tym samym dwukrotnego
odpalania się wywoływanych metod... chyba, że to cecha FCGI i permamentnego
uruchomienia?
Dzięki z góry,
Pozdrawiam
Re: obiekty + fastcgi - destruktor nie działa?
Author: Mateusz Szczyrzyca
Date: Wed, 28 Sep 2011 09:47
Date: Wed, 28 Sep 2011 09:47
13 lines
1249 bytes
1249 bytes
Dnia 27.09.2011 Mateusz Szczyrzyca <mateusz@abstynenci.pl> napisał/a: > Witam serdecznie, > > Mam małą aplikację z użyciem FCGI. Powiedzmy, że użyję przykładu Pralni. > > Mam w niej powiedzmy Pralka.pm (obiekt) > > [...] Poradziłem sobie z powtórzeniami (drobny błąd algorytmiczny), natomiast problem z nieśmiertelnym obiektem wciąż pozostaje. Pozdrawiam,
Re: obiekty + fastcgi - destruktor nie działa?
Author: Stachu 'Dozzie' K.
Date: Wed, 28 Sep 2011 09:52
Date: Wed, 28 Sep 2011 09:52
22 lines
1921 bytes
1921 bytes
On 2011-09-28, Mateusz Szczyrzyca <mateusz@abstynenci.pl> wrote: > Dnia 27.09.2011 Mateusz Szczyrzyca <mateusz@abstynenci.pl> napisał/a: >> Witam serdecznie, >> >> Mam małą aplikację z użyciem FCGI. Powiedzmy, że użyję przykładu Pralni. >> >> Mam w niej powiedzmy Pralka.pm (obiekt) >> >> [...] > > Poradziłem sobie z powtórzeniami (drobny błąd algorytmiczny), > natomiast problem z nieśmiertelnym obiektem wciąż pozostaje. A jesteś pewny że a) nigdzie nie zachowujesz referencji do utworzonego obiektu Pralka? b) nigdzie nie zachowujesz domknięcia? A skalar $Pralka to w ogóle jest globalny czy lokalny leksykalnie? -- Secunia non olet. Stanislaw Klekot
Re: obiekty + fastcgi - destruktor nie działa?
Author: Mateusz Szczyrzyca
Date: Wed, 28 Sep 2011 17:06
Date: Wed, 28 Sep 2011 17:06
34 lines
2409 bytes
2409 bytes
Dnia 28.09.2011 Stachu 'Dozzie' K. <dozzie@go.eat.some.screws.spammer.invalid> napisał/a:
> On 2011-09-28, Mateusz Szczyrzyca <mateusz@abstynenci.pl> wrote:
>> Dnia 27.09.2011 Mateusz Szczyrzyca <mateusz@abstynenci.pl> napisał/a:
>>> Witam serdecznie,
>>>
>>> Mam małą aplikację z użyciem FCGI. Powiedzmy, że użyję przykładu Pralni.
>>>
>>> Mam w niej powiedzmy Pralka.pm (obiekt)
>>>
>>> [...]
>>
>> Poradziłem sobie z powtórzeniami (drobny błąd algorytmiczny),
>> natomiast problem z nieśmiertelnym obiektem wciąż pozostaje.
>
> A jesteś pewny że
> a) nigdzie nie zachowujesz referencji do utworzonego obiektu Pralka?
Tu akurat jestem pewny, że nigdzie takiej referencji nie mam.
> b) nigdzie nie zachowujesz domknięcia?
Cała akcja dzieje się w bloku case{} - reszta kodu, jak i główne pozostałe
obiekty w ogóle nic nie wiedzą o istnieniu innych ,,nieśmiertelnych''.
Jedyne obiekty, których destruktory działają, to obiekty pomocnicze
wywoływane i stosowane wewnątrz niektórych metod tych ,,nieśmiertelnych''.
> A skalar $Pralka to w ogóle jest globalny czy lokalny leksykalnie?
Zapomniałem to tutaj ująć w przykładzie (`my` zjadłem), ale oczywiście jest
lokalny i ograniczony tylko do przedstawionego bloku case{}
Jak już przy `my` jesteśmy, to nadmieniam, że używam pragm: warnings, strict i
diagnostics (z różnymi opcjami), ale żadnych informacji nie dostaję.
Re: obiekty + fastcgi - destruktor nie działa?
Author: Andrzej Adam Filip
Date: Wed, 28 Sep 2011 17:31
Date: Wed, 28 Sep 2011 17:31
67 lines
3611 bytes
3611 bytes
Mateusz Szczyrzyca <mateusz@abstynenci.pl> pisze:
> Witam serdecznie,
>
> Mam małą aplikację z użyciem FCGI. Powiedzmy, że użyję przykładu Pralni.
>
> Mam w niej powiedzmy Pralka.pm (obiekt)
>
> W tym obiekcie mam różne funkcje (pranie(), plukanie(), itp), w tym jedna
> metoda (np: programator()), która bada zmienną przesłaną do obiektu Pralka z
> poziomu pętli FCGI i dopiero odpalająca odpowiednie funkcje.
>
> O ile wewnątrz obiektu Pralka użyję jakieś inne obiekty
> (np: Pompa.pm, Suszarka.pm) to z nimi jest wszystko ok. Natomiast problem
> jest z Pralką, dezaktywuję ją w głównej pętli FCGI ,,książkowo'' czyli
> za pomocą `undef` jak widać na poglądowym kodzie:
>
> #v+
> my $request = FCGI::Request( );
> while( $request->Accept( ) >= 0 )
> {
> [ tutaj różne takie ]
>
>
> switch( $url )
> {
> case( /wstepne/ )
> {
> $Pralka = Pralka-new( \%Pranie );
> $html1 = $Pralka->programator( 'silnik' );
> $html2 = $Pralka->programator( 'pompa' );
> $html3 = $Pralka->programator( 'pranie_wstepne' );
> $Pralka = undef;
> }
> }
>
> [ $html[1-3] później użyte do umieszczenia w kodzie HTML ]
>
> }
> #v-
>
> Jednakże destruktor Pralki się w ogóle nie zgłasza. Normalnie bym to
> zignorował, ale powstał z tego tytułu pewien problem... otóż każda
> funkcja z obiektu Pralka mi się 2x wykonuje, każda. Sprawdzałem,
> program, bazę danych, i to niestety prawda...
>
> Oczywiście sprawdziłem i żadna z funkcji nie jest zapętlona, żadnych tam
> rekurencji i w ogóle nie powinno to 2x więcej wody i prądu zużywać. :-)
> Oczywiście próbowałem $Pralka = undef, undef $Pralka, ale Pralka wydaje
> się być nieśmiertelna.
>
> Nie wiem... może coś przeoczyłem, ale proszę o drobną wskazówkę co
> jest powodem nieśmiertelności tej pralki u mnie... a tym samym dwukrotnego
> odpalania się wywoływanych metod... chyba, że to cecha FCGI i permamentnego
> uruchomienia?
>
> Dzięki z góry,
> Pozdrawiam
Spróbuj jawnie wymuszać zakres:
my $Pralka = Pralka-new( \%Pranie );
--
Andrzej Adam Filip : anfi@onet.eu : Andrzej.Filip@gmail.com
Ludzie byli dawniej bliżsi sobie. Musieli. Broń nie niosła daleko.
-- Lec, Stanisław Jerzy (1909-1966)
Re: obiekty + fastcgi - destruktor nie działa?
Author: menth0l
Date: Fri, 30 Sep 2011 15:57
Date: Fri, 30 Sep 2011 15:57
2 lines
945 bytes
945 bytes
A czasem obiekt gdzieś w środku nie trzyma swojej własnej referencji? Patrz: cykliczne referencje.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads