logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

Method::Alias - Create method aliases (and do it safely)

Authors

       Adam Kennedy <cpan@ali.as>

Description

       For a very long time, whenever I wanted to have a method alias (provide an alternate name for a method) I
       would simple do a GLOB alias. That is,

         # My method
         sub foo {
             ...
         }

         # Alias the method
         *bar = *foo;

       While this works fine for functions, it does not work for methods.

       If your class has a subclass that redefines "foo", any call to "bar" will result in the overloaded method
       being ignored and the wrong "foo" method being called.

       These are basically bugs waiting to happen, and having completed a number of very large APIs with lots of
       depth myself, I've been bitten several times.

       In this situation, the canonical and fasest way to handle an alias looks something like this.

         # My method
         sub foo {
            ...
         }

         # Alias the method
         sub bar { shift->foo(@_) }

       Note that this adds an extra entry to the caller array, but this isn't really all that important unless
       you are paranoid about these things.

       The alternative would be to try to find the method using UNIVERSAL::can, and then goto it. I might add
       this later if someone really wants it, but until then the basic method will suffice.

       That doing this right is even worthy of a module is debatable, but I would rather have something that
       looks like a method alias definition, than have to document additional methods all the time.

   UsingMethod::Alias
       Method::Alias is designed to be used as a pragma, to which you provide a set of pairs of method names.
       Only very minimal checking is done, if you wish to create infinite loops or what have you, you are more
       than welcome to shoot yourself in the foot.

         # Add a single method alias
         use Method::Alias 'foo' => 'bar';

         # Add several method aliases
         use Method::Alias 'a' => 'b',
                           'c' => 'd',
                           'e' => 'f';

       And for now, that's all there is to it.

Methods

importfrom=>to,...
       Although primarily used as a pragma, you may call import directly if you wish.

       Taking a set of pairs of normal strings, the import method creates a number of methods in the caller's
       package to call the real method.

       Returns true, or dies on error.

Name

       Method::Alias - Create method aliases (and do it safely)

See Also

Support

       Bugs should always be submitted via the CPAN bug tracker

       <http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Method-Alias>

       For other issues, contact the maintainer

Synopsis

         # My method
         sub foo {
             ...
         }

         # Alias the method
         use Method::Alias 'bar' => 'foo',
                           'baz' => 'foo';

See Also