[prev in list] [next in list] [prev in thread] [next in thread] 

List:       perl6-language
Subject:    Re: "temp" vs "my"
From:       Brad Gilbert <b2gills () gmail ! com>
Date:       2018-10-04 0:19:04
Message-ID: CAD2L-T3H+-Ct8aLn7CX4v0KPNtCaZr4BCSmB6Dr5cQ0X=DhEpg () mail ! gmail ! com
[Download RAW message or body]

Note that OUTER::<$v> only goes up one level.

So to go up two levels OUTER::OUTER::<$v>

There is also OUTERS::<$v> which will go up as many levels as it needs
to find the variable

    {
       my $a = 1;
       my $b = 2;
       {
           my $a = 3;
           {
               say OUTER::<$a>; # 3
               say OUTER::OUTER::<$a>; # 1

               say OUTERS::<$a>; # 3  # only one level
               say OUTERS::<$b>; # 2  # two levels
           }
       }
    }
On Wed, Oct 3, 2018 at 10:31 AM yary <not.com@gmail.com> wrote:
> 
> Thanks! Knew I'd seen the concept of OUTER but couldn't remember the keyword.
> 
> -y
> 
> On Wed, Oct 3, 2018 at 5:51 AM, Timo Paulssen <timo@wakelift.de> wrote:
> > 
> > you can refer to the outer $v as OUTER::('$v'), that ought to help :)
> > 
> > On 03/10/2018 08:10, yary wrote:
> > 
> > Reading and playing with https://docs.perl6.org/routine/temp
> > 
> > There's an example showing how temp is "dynamic" - that any jump outside a block \
> > restores the value. All well and good. 
> > Then I thought, what if I want a lexical temporary value- then use "my"- and this \
> > is all well and good: 
> > my $v = "original";
> > {
> > my $v = "new one";
> > start {
> > say "[PROMISE] Value before block is left: `$v`";
> > sleep 1;
> > say "[PROMISE] Block was left while we slept; value is still `$v`";
> > }
> > sleep  ½;
> > say "About to leave the block; value is `$v`";
> > }
> > say "Left the block; value is now `$v`";
> > sleep 2;
> > 
> > Then I thought, well, what if I want to initialize the inner $v with the outer \
> > $v. 
> > my $v = "original";
> > {
> > my $v = $v; # "SORRY! Cannot use variable $v in declaration to initialize itself"
> > say "inner value is $v";
> > $v= "new one";
> > ...
> > 
> > Gentle reader, how would you succinctly solve this contrived example? Anything \
> > you like better than this? 
> > my $v = "original";
> > given $v -> $v is copy {
> > say "inner value is $v"; # "original", good
> > $v= "new one";
> > ....
> > 
> > -y
> 
> 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic