LanX has asked for the wisdom of the Perl Monks concerning the following question:
The compile-time scope ends right after the BODY is closed, hence the lexical is not anymore declared.
But the run-time destruction will only happen if the outer-scope - that's at least the file-scope° - is finished.
Any reason why?
In my book that's a design flow at least.
DEMO:
use strict; use warnings; use Data::Dump qw/pp dd/; $\="\n"; our $PHASE=0; { if ( my $x = bless {name=>"extra block"}, "TEST" ) { $PHASE=1; print $x; } } # DESTRUCTION $PHASE=2; # line 16 if ( my $x = bless {name=>"head if"}, "TEST" ) { $PHASE=3; print $x; } # NO DESTRUCTION # --- uncomment for compile-time error # print $x; print ""; $PHASE=4; print ""; # line 32 package TEST; use Carp; sub DESTROY { my ( $self ) = @_ ; carp "DESTROY <x: $self->{name}> <PHASE: $::PHASE>"; }
will produce this output
C:/Strawberry/perl/bin\perl.exe -w d:/tmp/pm/berny_open.pl DESTROY <x: extra block> <PHASE: 1> at d:/tmp/pm/berny_open.pl line 16 +. DESTROY <x: head if> <PHASE: 4> at d:/tmp/pm/berny_open.pl line 32. TEST=HASH(0x1ca7e8) TEST=HASH(0x1ca8f0)
DISCLAIMER: This was just discussed at German.PM online meeting today and was motivated by this SO-Discussion.
Cheers Rolf
(addicted to the Perl Programming Language :)
Wikisyntax for the Monastery
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Scope difference between compile-time and run-time
by dave_the_m (Monsignor) on Jun 01, 2021 at 19:19 UTC | |
by LanX (Saint) on Jun 01, 2021 at 19:29 UTC | |
by dave_the_m (Monsignor) on Jun 02, 2021 at 06:46 UTC | |
Re: Scope difference between compile-time and run-time
by choroba (Cardinal) on Jun 01, 2021 at 19:29 UTC | |
by LanX (Saint) on Jun 01, 2021 at 19:40 UTC | |
Re: Scope difference between compile-time and run-time ( if( my $x = ... ) {...} )
by choroba (Cardinal) on Jun 02, 2021 at 21:44 UTC |