Closures are like objects, but with only one method. Here is a way that sort of gets around that limitation. This example is pretty bland, but you get the idea (exchange keys for methods).
If you prefer $object->{method}() syntax, you can use a hash reference instead of hash.
my $object = {};
%$object = constructor();
#!/usr/bin/perl -w use strict; my %object = constructor(); $object{save}->('name' => 'smith'); print $object{count}->(), $/; my $name = $object{lookup}->('name'); $object{delete}->('name'); print $object{count}->(), $/; print "My name is $name\n"; sub constructor { my %object; return 'save' => sub { my ($key, $val) = @_; die "save method requires two parameters" if ! defined $va +l; $object{$key} = $val; return; }, 'delete' => sub { my $key = shift; return delete $object{$key}; }, 'lookup' => sub { my $key = shift; return $object{$key}; }, 'count' => sub { return scalar keys %object; } }
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Multi-Method closures
by bart (Canon) on Sep 15, 2003 at 13:32 UTC | |
by Limbic~Region (Chancellor) on Sep 15, 2003 at 13:46 UTC | |
Re: Multi-Method closures
by Felonious (Chaplain) on Sep 15, 2003 at 15:20 UTC |
Back to
Cool Uses for Perl