Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation

Re: To Validate Data In Lvalue Subs

by fletcher_the_dog (Friar)
on Sep 03, 2003 at 17:04 UTC ( #288677=note: print w/replies, xml ) Need Help??

in reply to To Validate Data In Lvalue Subs

One thing you can do instead of using a tie is make your lvalue subs also have the ability to act as getters and setters. Then when you are using the object in a context where you are in control of the data you can use the lvalue assignment, but then when you want to verify data you can you use the sub in the setter mode. Example:
#!/usr/bin/perl use strict; package Foo; sub new{ my $class = shift; my $self = { bar=>"" }; bless $self,$class; } sub bar : lvalue { my $self = shift; if (@_) { # validate my $value = shift; if (ref($value)) { die "foo->bar must not be a reference!\n"; } $self->{bar}=$value; } $self->{bar} } package main; my $test = Foo->new; # Use lvalue assignment $test->bar = "Hello"; print $test->bar."\n"; # Use setter mode to verify data $test->bar("There"); print $test->bar."\n"; # Use setter mode to verify data $test->bar($test); print $test->bar."\n"; __OUTPUT__ Hello There foo->bar must not be a reference!
Of course this should be well documented in your pod so people don't accidently alter the lvalue.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://288677]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (4)
As of 2019-12-14 02:12 GMT
Find Nodes?
    Voting Booth?

    No recent polls found