change perl to Perl
[dbsrgits/Data-Query.git] / lib / Data / Query / ExprBuilder.pm
index b1df317..ee30702 100644 (file)
@@ -5,13 +5,27 @@ use Data::Query::Constants qw(DQ_OPERATOR DQ_VALUE);
 use Scalar::Util ();
 
 use overload (
+  # unary operators
   (map {
     my $op = $_;
     $op => sub {
       Data::Query::ExprBuilder->new({
         expr => {
           type => DQ_OPERATOR,
-          operator => { perl => $op },
+          operator => { Perl => $op },
+          args => [ $_[0]->{expr} ]
+        }
+      });
+    }
+  } qw(! neg)),
+  # binary operators
+  (map {
+    my ($overload, $as) = ref($_) ? @$_ : ($_, $_);
+    $overload => sub {
+      Data::Query::ExprBuilder->new({
+        expr => {
+          type => DQ_OPERATOR,
+          operator => { Perl => $as },
           args => [
            map {
              (Scalar::Util::blessed($_)
@@ -19,15 +33,27 @@ use overload (
                ? $_->{expr}
                : {
                    type => DQ_VALUE,
-                   subtype => { perl => 'Scalar' },
+                   subtype => { Perl => 'Scalar' },
                    value => $_
                  }
+              # we're called with ($left, $right, 0) or ($right, $left, 1)
             } $_[2] ? @_[1,0] : @_[0,1]
           ]
         },
       });
     }
-  } qw(==))
+  }
+    qw(+ - * / % ** << >> . < > == != lt le gt ge eq ne),
+
+    # since 'and' and 'or' aren't operators we borrow the bitwise ops
+    [ '&' => 'and' ], [ '|' => 'or' ],
+  ),
+  # unsupported
+  (map {
+    my $op = $_;
+    $op => sub { die "Can't use operator $op on a ".ref($_[0]) }
+   } qw(<=> cmp x ^ ~)
+  ),
 ); 
 
 sub new {