The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Data::Query::ExprBuilder::Identifier;

use strictures 1;

use base qw(Data::Query::ExprBuilder);
use Data::Query::Constants qw(DQ_IDENTIFIER);

sub DESTROY { }

sub can { 
  my $name = $_[1];
  sub {
    return (ref($_[0])||$_[0])->new({
      expr => {
        type => DQ_IDENTIFIER,
        elements => [ @{$_[0]->{expr}{elements}}, $name ]
      },
    });
  };
}

sub AUTOLOAD {
  (my $auto = our $AUTOLOAD) =~ s/.*:://;
  return (ref($_[0])||$_[0])->new({
    expr => {
      type => DQ_IDENTIFIER,
      elements => [ @{$_[0]->{expr}{elements}}, $auto ]
    },
  });
}

1;