Acme::Nooo - But I don't B<care> if "It Has Objects"!


Acme-Nooo documentation Contained in the Acme-Nooo distribution.

Index


Code Index:

NAME

Top

Acme::Nooo - But I don't care if "It Has Objects"!

SYNOPSIS

Top

  ## Before:
  use SquareRoutEr;
  my $obj = SquareRoutEr->new;
  $obj->sqrt(4); # => 2

  ## After:
  use Acme::Nooo 'SquareRoutEr';
  sqrt(4); # => 2

  ## Before:
  use AnyRoutEr;
  $obj = AnyRoutEr->new(pow => 3);
  $obj->root(8); # => 2

  ## After:
  use Acme::Nooo ['AnyRoutEr', 'pow', 3];
  root(8); # => 2

DESCRIPTION

Top

Tired of "object-fetishist" modules that force you to create a handle object when a simple procedural interface would have been sufficient? Acme::Nooo will import functions into the current namespace to de-objectify abominable interfaces.

  use Acme::Nooo MODULE;

or

  use Acme::Nooo [MODULE NEW-ARGS];

exports all functions in Module as methods on an object or class created via

  use MODULE;
  $obj = new MODULE NEW-ARGS...

For finer-grained control,

  use Acme::Nooo [MODULE NEW-ARGS], NAMES

exports only the functions named in NAMES.

EXPORT

Top

It depends. Acme::Nooo exports other modules' functions.

SEE ALSO

Top

Names withheld to protect the innocent.

AUTHOR

Top

Sean O'Rourke, <seano@cpan.org>

COPYRIGHT AND LICENSE

Top


Acme-Nooo documentation Contained in the Acme-Nooo distribution.

package Acme::Nooo;

our $VERSION = '0.02';

sub import
{
    my $nooo = shift;
    my ($class, @stubs) = @_;
    my $obj;
    if (ref $class eq 'ARRAY') {
        my @args;
        ($class, @args) = @$class;
        eval "use $class";
        $obj = new $class @args;
    } elsif (!ref $class) {
        eval "use $class";
        $obj = new $class;
    } else {
        $obj = $class;
    }
    my $pack = caller;
    # my $obj = ($nooo eq 'Acme::Nooo') ? new $class @_ : $class;
    @stubs = keys %{"$class\::"} unless @stubs;
    for (@stubs) {
        if (UNIVERSAL::can($obj, $_)) {
            my $subname = $_;
            *{"$pack\::$subname"} = sub { $obj->$subname(@_); };
        }
    }
    ## A bit too evil
    # eval {
    #     for (keys %$obj) {
    #         ${"$class\::$_"} = $obj->{$_};
    #     }
    # };
}

# our %AUTO;

# sub autoload
# {
#     $AUTOLOAD =~ s/.*:://;
#     my $pack = caller;
#     for (@{$AUTO{$pack}}) {
#         if (UNIVERSAL::can($_, $AUTOLOAD)) {
#             return $_->$AUTOLOAD(@_);
#         }
#     }
#     die "$AUTOLOAD: Nooooo can do...";
# }

# sub import
# {
#     shift;
#     my $obj = shift;
#     my $pack = caller;
#     *{"$pack\::AUTOLOAD"} = \&autoload
#         unless \&{"$pack\::AUTOLOAD"} eq \&autoload;
#     push @{$AUTO{$pack}}, $obj;
# }

1;

__END__