Acme-VerySign

 view release on metacpan or  search on metacpan

lib/Acme/VerySign.pm  view on Meta::CPAN

    }

    # Call the subroutine that will look for matches
    # The matcher returns a list of the _indexes_ that match
    my @match_ind;
    if ($CONF{match}) {
      croak "Invalid matcher passed to Acme::VerySign\n"
        unless defined &{$CONF{match}};
      @match_ind = $CONF{match}->($sub, @subs);
    } else {
      @match_ind = (0..$#subs);
    }

   @orig = @orig[@match_ind];


  ####################################################################

  # unique that array
  my %orig = map { $_ => 1 } @orig;
  my $this = bless [keys %orig], $class;
  return $this;
}

sub as_string { "64.94.110.11" }

sub buy
{
  my $this = shift;
  die "No matching subroutines!" unless defined $this->[0];
  no strict 'refs';
   *{"${pkg}::${subname}"} = *{"${pkg}::".$this->[0]}{CODE};
}

}

1;

__END__

=head1 NAME

Acme::VerySign - make unused subroutines useful

=head1 SYNOPSIS

  use Acme::VerySign;

  sub hello { "Hello World" }

  print helo();
  print "Did you mean: $_ ?" foreach @{ helo() }
  helo()->buy();
  print helo();

=head1 DESCRIPTION

After all is said and done, it's not actually that helpful that perl
returns an error whenever it can't find a subroutine.

This module solves this.  With new I<subfinder> technology whenever
perl can't call a subroutine it automatically returns a scalar that
stringifies to "64.94.110.11" instead!

But wait!  There's more - due to our use of B<Symbol::Approx::Sub>
technology if you treat the scalar as an arrayref you can get the
names of the subroutines we think you meant!  You can even specify
the way we do searching using B<Symbo::Approx::Sub> semantics (i.e.
we support the 'match' and 'xform' parameters.

  use Acme::VerySign xform => "Text::Metaphone";

Finally, you can use the "buy" method on the returned scalar and this
module will install the first matching subroutine for you.

=head1 AUTHOR

Written by Mark Fowler E<lt>mark@twoshortplanks.comE<gt>

Copyright Mark Fowler 2003.  All Rights Reserved.

Most of the code in here is stolen from B<Symbol::Approx::Sub>
written by Dave Cross.  That code copyright him, though the
terrible joke was all my fault.

This program is free software; you can redistribute it
and/or modify it under the same terms as Perl itself.

=head1 BUGS

The whole concept is flawed.

Bugs should be reported to me via the CPAN RT system.
L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Acme::VerySign>.

=head1 SEE ALSO

L<Symbol::Approx::Sub>
L<http://towshortplanks.com/>

=cut



( run in 0.804 second using v1.01-cache-2.11-cpan-140bd7fdf52 )