in reply to Agile syntax (abuse?)
use strict; END { print "END\n" }; { package SubRef; use Scalar::Util qw(weaken refaddr); sub DESTROY { my $self = shift; print "DESTROY ".ref($self) ."\n" +} sub new { my $class = shift; my $copy; my $self = $copy = bless(sub { $copy->ok }, $class); weaken $copy; return $self; } sub ok { print "SubRef ok ".refaddr($_[0])."\n" } } { package ArrayRef; @ArrayRef::ISA = qw(SubRef); sub new { my $class = shift; return bless [], $class; } } { package CircularRef; @CircularRef::ISA = qw(SubRef); sub new { my $class = shift; my $s = {}; $s->{self} = $s; return bless $s, $class; } } for (1..2) { my $sub = SubRef->new; my $sub2 = SubRef->new; my $arr = ArrayRef->new; my $cir = CircularRef->new; $sub->(); $sub2->(); } print "After For\n";
paul@paul-laptop:~$ perl foo SubRef ok 135976352 SubRef ok 135976436 DESTROY ArrayRef DESTROY SubRef DESTROY SubRef SubRef ok 135976352 SubRef ok 135976424 DESTROY ArrayRef DESTROY SubRef DESTROY SubRef After For END DESTROY CircularRef DESTROY CircularRef
my $self = $copy = bless(sub :lvalue { $copy->ok; my $n }, $cla +ss);
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Agile syntax (abuse?)
by blazar (Canon) on Apr 04, 2007 at 11:08 UTC |