in reply to Dynamically generate setter/getter methods
You could use AUTOLOAD to avoid hacking the symbol table.
Update:
One of our fellow monks asked for an example.
So here is very simplified one.
#!/usr/bin/perl use v5.12; use warnings FATAL => 'all'; package Attr; use Carp; my %attr = (one => 1, two => 2); sub new { my $class = shift; bless {}, $class; } our $AUTOLOAD; # Generic setter/getter sub AUTOLOAD { my $self = shift; my $called = $AUTOLOAD =~ s/.*:://r; croak "$AUTOLOAD: no such method" unless exists $attr{$called}; if (@_ > 0) { $self->{$called} = shift; } else { return $self->{$called}; } } package main; my $attr = Attr->new; $attr->one('uno'); say $attr->one; eval {say $attr->three}; say $@ if $@; __DATA__ uno Attr::three: no such method at /home/jo/Programs/play-scripts/pm-11125 +489.pl line 38.
Greetings,
-jo
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: Dynamically generate setter/getter methods [Updated]
by Arunbear (Prior) on Dec 20, 2020 at 16:36 UTC | |
by stevieb (Canon) on Dec 20, 2020 at 19:28 UTC | |
Re^2: Dynamically generate setter/getter methods [Updated]
by pryrt (Abbot) on Dec 20, 2020 at 21:54 UTC | |
Re^2: Dynamically generate setter/getter methods [Updated]
by stevieb (Canon) on Dec 20, 2020 at 15:52 UTC | |
by shmem (Chancellor) on Dec 20, 2020 at 19:37 UTC |
In Section
Cool Uses for Perl