X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2FLaTeX%2FTikZ%2FMod%2FLayer.pm;h=bfab947ddfbaa4e291eeab1a198a47ed4a688e2a;hb=39ceba3937f8397bcb0874419d78f3c4adc427fb;hp=ca0b2bd6cc026ae40014d422dbe45317009b1579;hpb=93bfe14caec156fc11587863a486220b986b6b2e;p=perl%2Fmodules%2FLaTeX-TikZ.git diff --git a/lib/LaTeX/TikZ/Mod/Layer.pm b/lib/LaTeX/TikZ/Mod/Layer.pm index ca0b2bd..bfab947 100644 --- a/lib/LaTeX/TikZ/Mod/Layer.pm +++ b/lib/LaTeX/TikZ/Mod/Layer.pm @@ -15,7 +15,8 @@ Version 0.01 our $VERSION = '0.01'; -use List::Util (); +use Scalar::Util (); +use List::Util (); use LaTeX::TikZ::Mod::Formatted; @@ -78,9 +79,11 @@ around 'new' => sub { if (defined $name) { $self->meta->find_attribute_by_name('name') ->type_constraint->assert_valid($name); - confess("Can't redefine layer '$name'") if keys(%args) > 1; my $layer = $layers{$name}; - return $layer if defined $layer; + if (defined $layer) { + confess("Can't redefine layer '$name'") if keys(%args) > 1; + return $layer; + } } return $self->$orig(%args); @@ -89,7 +92,9 @@ around 'new' => sub { sub BUILD { my ($self) = @_; - $layers{$self->name} = $self; + my $name = $self->name; + $layers{$name} = $self; + Scalar::Util::weaken($layers{$name}); } sub DEMOLISH { @@ -188,10 +193,11 @@ sub apply { ) } -use LaTeX::TikZ::API layer => sub { +use LaTeX::TikZ::Interface layer => sub { shift; - __PACKAGE__->new(name => $_[0]); + my $name = shift; + __PACKAGE__->new(name => $name, @_); }; __PACKAGE__->meta->make_immutable(