diff options
author | Jesse Luehrs <doy@tozt.net> | 2011-07-08 03:01:49 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2011-07-08 03:01:49 -0500 |
commit | 1a0c3c3a02da09abc11bbad291d09a41c1850d1d (patch) | |
tree | c19787eda8fa4dd155e028752cc38bc19dad0aca /lib/smartmatch/engine/rjbs.pm | |
parent | 046119999e010e4a38b67f5f194baaf60e7c8707 (diff) | |
download | smartmatch-engine-core-1a0c3c3a02da09abc11bbad291d09a41c1850d1d.tar.gz smartmatch-engine-core-1a0c3c3a02da09abc11bbad291d09a41c1850d1d.zip |
split this out into its own dist, and implement the custom opcode
Diffstat (limited to 'lib/smartmatch/engine/rjbs.pm')
-rw-r--r-- | lib/smartmatch/engine/rjbs.pm | 62 |
1 files changed, 0 insertions, 62 deletions
diff --git a/lib/smartmatch/engine/rjbs.pm b/lib/smartmatch/engine/rjbs.pm deleted file mode 100644 index da40998..0000000 --- a/lib/smartmatch/engine/rjbs.pm +++ /dev/null @@ -1,62 +0,0 @@ -package smartmatch::engine::rjbs; -use strict; -use warnings; - -use overload (); -use Scalar::Util qw(blessed reftype); - -sub type { - my ($thing) = @_; - - if (!defined($thing)) { - return 'undef'; - } - elsif (!ref($thing)) { - return 'unknown non-ref'; - } - elsif (reftype($thing) eq 'REGEXP') { - return 'Regex'; - } - elsif (blessed($thing)) { - if (overload::Method($thing, '~~')) { - return 'Overloaded'; - } - elsif (overload::Method($thing, 'qr')) { - return 'Regex'; - } - else { - return 'unknown object'; - } - } - elsif (reftype($thing) eq 'CODE') { - return 'Code'; - } - else { - return 'unknown'; - } -} - -sub match { - my ($a, $b) = @_; - - if (type($b) eq 'undef') { - return !defined($a); - } - elsif (type($b) eq 'Overloaded') { - my $overload = overload::Method($b, '~~'); - return $b->$overload($a, 1); - } - elsif (type($b) eq 'Regex') { - return $a =~ $b; - } - elsif (type($b) eq 'Code') { - return $b->($a); - } - else { - $a //= 'undef'; - $b //= 'undef'; - die "invalid smart match: $a ~~ $b"; - } -} - -1; |