It was Monday, December 08, 2003 when [EMAIL PROTECTED] took the soap box, saying:
: I did the 'in' function for seeing if one element is inside on list like.
:
: sub in {
: my $match = shift;
: foreach (@_) {
: return 1 if $match eq $_;
: }
: return 0;
: }
:
: so I'm calling the function like
:
: if(in($x => (1,2,3))) {
: ...
: };
:
: this seems to be nice. After this I sink: why not to write
:
: if ($x in (1,2,3)) {
: ...
: }
You would need a source filter for this, and that would be bad. I'm
not saying my more OO solution below isn't equally evil, mind, but I
find it fun. This code could be considered deep magic, and I use grep
to make my life easy for example, so I'm not going to explain it.
I'll leave that to others if they like. :-)
First, the SuperScalar package.
package SuperScalar;
require Tie::Scalar;
@SuperScalar::ISA = qw[Tie::StdScalar];
use overload
'""' => sub { ${$_[0]} },
'+' => sub { ${$_[0]} + $_[1] };
sub in {
my ($self, @vals) = @_;
if ( grep { ($$self cmp $_) == 0 } @vals ) {
return 1;
}
return 0;
}
sub FETCH { $_[0] }
Next, the calling code.
use Attribute::Handlers autotie => { SS => 'SuperScalar' };
my $var :SS(2);
$\ = "\n";
print "$var"; # expect: 2
print $var + $var; # expect: 4
print $var->in(1..3); # expect: 1
print $var->in(3..5); # expect: 0
Enjoy!
Casey West
--
Shooting yourself in the foot with DOS
You finally found the gun, but can't locate the file with the foot for
the life of you.
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>