File Coverage

blib/lib/Text/Anagram.pm
Criterion Covered Total %
statement 21 21 100.0
branch 4 4 100.0
condition n/a
subroutine 6 6 100.0
pod 0 1 0.0
total 31 32 96.8


line stmt bran cond sub pod time code
1             package Text::Anagram;
2 1     1   85659 use Exporter 'import';
  1         2  
  1         43  
3 1     1   7 use strict;
  1         2  
  1         41  
4 1     1   6 use warnings;
  1         6  
  1         32  
5 1     1   16 use 5.12.0;
  1         4  
  1         339  
6             our @EXPORT_OK = qw< anagram >;
7             our $VERSION = '0.2';
8              
9             # ABSTRACT: do something with every anagram of a text
10              
11             =head1 DON'T
12              
13             this release is usable but far from a definitive API. don't use in production
14              
15             =head1 SYNOPSIS
16              
17             use Text::Anagram qw< anagram >;
18              
19             anagram { say } "bob";
20              
21             =head1 FUTURE
22              
23             add a callback to stop a branch of solution
24              
25             use Text::Anagram qw< anagram >;
26              
27             anagram "bob"
28             , stop => sub { length > 2 && /^ana/ }
29             , finally => sub { say }
30              
31             also
32              
33             * localize stuff to run anagrams in anagrams
34             * compare anything (not only char) ?
35              
36             =head1 Fork me!
37              
38             L
39              
40             =cut
41              
42             my $leaf_callback;
43              
44             sub _anagram;
45             sub _anagram {
46 25     25   35 my ( $from, $to) = @_;
47 25 100       50 length $from or return map {$leaf_callback->()} $to;
  9         21  
48 16         17 my %seen;
49 16 100       68 $from =~ s{.}{ $seen{$&}++ or _anagram "$'$`","$&$to" }ge;
  25         222  
50             }
51              
52             sub anagram (&$) {
53 2     2 0 384 $leaf_callback = shift;
54 2         6 my $seed = shift;
55 2         6 _anagram $seed,'';
56             }
57              
58             1;