on the second thought : its quite strange ( though cute ) that 
currently the only way to make lexical persistent variable is based on
garbage collector. it is referenced -- hence it is kept. 

this brings to the following : every subroutine may have a
"daemon" object of some sort associated with it , which will keep
state of the subroutine. so every subroutine is a method of its
"daemon" object . actually , one can think of any subroutine that way
, whatever the way the persistency of these
variables is actually realized. 



it seems that there have to be a clear visual 
difference between "my" variables and 
these "daemon" varibles. 

so : 

sub counter(){ 
    daemon $s;        ( or : my $s is daemon; ) 
    INIT{ $s = 0 } ;  
    $s++;
}

or 

sub counter() 
    will have { BigInt $s } # "have" actually populate attributes of 
                            # the associated "daemon" object 
    will init { $s = 0    } # sort of constructor for the daemon 
{ 
        $s++;
}

I think that something like 

daemon $s ; 

makes it clear that $s is an attribute of an object associated with
that subroutine.
and subroutine may be probably replaced by "closure" 

Class Foo {

our  $a ; 
my $b ;
daemon $c ; 


}

arcadi 

Reply via email to