🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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?
#52287
Author: Mateusz Szczyrzyca
Date: Tue, 27 Sep 2011 14:07
56 lines
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?
#52288
Author: Mateusz Szczyrzyca
Date: Wed, 28 Sep 2011 09:47
13 lines
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?
#52289
Author: Stachu 'Dozzie' K.
Date: Wed, 28 Sep 2011 09:52
22 lines
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?
#52290
Author: Mateusz Szczyrzyca
Date: Wed, 28 Sep 2011 17:06
34 lines
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?
#52291
Author: Andrzej Adam Filip
Date: Wed, 28 Sep 2011 17:31
67 lines
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?
#52292
Author: menth0l
Date: Fri, 30 Sep 2011 15:57
2 lines
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