Hi,
Thanks for your support and advice. I adapted a bit L~R's code, but it basically is the same thing, lvalue subs redirected through tied variables. Below I give you what is most relevant, that is the end-user experience.
Creating a property-based class
package MyClass;
use strict;
use ObsceneEnabler;
our @properties = (
"Name",
"RegExp",
);
####################################
# Register properties for this class
####################################
ObsceneEnabler::RegisterProperties (@properties);
########################
# Class definition below
########################
sub get_RegExp {
my $this = shift;
unless ($this->regExp) {
return "(?:" . $this->Name . ")";
}
return $this->regExp;
}
sub set_RegExp {
my $this = shift;
my $regexp = shift;
$this->regExp = "(?:$regexp)";
}
sub SetMultiRegExp {
my $this = shift;
my $regexp = join ("|", @_);
$this->RegExp = $regexp;
}
1;
Using a property-based class
use strict;
use MyClass;
my $o = new MyClass;
# Properties may also be initialized at construction time.
# my $o = new MyClass ({ RegExp => "Initial RegExp" });
$o->Name = "New Name";
print "Name: `" . $o->Name . "'\n";
print "RegExp: `" . $o->RegExp . "'\n";
$o->RegExp = "My RegExp";
print "RegExp: `" . $o->RegExp . "'\n";
$o->SetMultiRegExp ("My RegExp", "My Second RegExp");
print "Multi-set RegExp: `" . $o->RegExp . "'\n";
$o->regExp = "Hacked RegExp";
The output is:
Name: `New Name'
RegExp: `(?:New Name)' (or RegExp: `(?:Initial RegExp)')
RegExp: `(?:My RegExp)'
Multi-set RegExp: `(?:My RegExp|My Second RegExp)'
Attempting to access private field `regExp'
Cheers,
PerlDeveloper
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.