Array::PatternMatcher

Array::PatternMatcher is a pattern matching for arrays.
Download

Array::PatternMatcher Ranking & Summary

Advertisement

  • Rating:
  • License:
  • Perl Artistic License
  • Price:
  • FREE
  • Publisher Name:
  • Terrence M. Brannon
  • Publisher web site:
  • http://search.cpan.org/~tbone/Data-Bucket-0.07/lib/Data/Bucket.pm

Array::PatternMatcher Tags


Array::PatternMatcher Description

Array::PatternMatcher is a pattern matching for arrays. Array::PatternMatcher is a pattern matching for arrays.SYNOPSISThis section inlines the entire test suite. Please excuse the ok()s. use Array::PatternMatcher;Matching logical variables to input stream # 1 - simple match of logical variable to input my $pattern = 'AGE' ; my $input = 969 ; my $result = pat_match ($pattern, $input, {} ) ; ok($result->{AGE}, 969) ; # 2 - if binding exists, it must equal the input $input = 12; my $new_result = pat_match ($pattern, $input, $result) ; ok(!defined($new_result)) ; # 3 - bind the pattern logical variables to the input list $pattern = ; $input = ; my $result = pat_match ($pattern, $input, {} ) ; ok($result->{X}, 77) ;Matching segments (quantifying) portions of the input stream # 1 { my $pattern = , 'd'] ; my $input = ; my $result = pat_match ($pattern, $input, {} ) ; ok ("@{$result->{X}}","b c") ; } # 2 { my $pattern = , , 'd'] ; my $input = ; my $result = pat_match ($pattern, $input, {} ) ; ok ("@{$result->{Y}}","b c") ; } # 3 { my $pattern = , 'd'] ; my $input = ; ok ("@{$result->{X}}","b c") ; } # 4 { my $pattern = , 'c' ] ; my $input = ; my $result = pat_match ($pattern, $input, {} ) ; ok ("$result->{X}","b") ; } # 5 { my $pattern = ] ; my $input = ; my $result = pat_match ($pattern, $input, {} ) ; ok ($result) ; }Single-matching: Take a single input and a series of patterns and decide which pattern matches the input: # 1 - Here all input patterns must match the input { my @pattern ; push @pattern, ; push @pattern, ; push @pattern, ; my $input = ; my $meta_pattern = ; # if no bindings, add a binding between pattern and input my $result = pat_match ($meta_pattern, $input, {} ) ; ok ($result->{Z},33) ; } # 2 - Here, any one of the patterns must match the input { my @pattern ; push @pattern, ; push @pattern, ; push @pattern, ; push @pattern, ; my $input = ; my $meta_pattern = ; # if no bindings, add a binding between pattern and input my $result = pat_match ($meta_pattern, $input, {} ) ; ok ($result->{Z},33) ; } # 3 - Here, none of the patterns must match the input { my @pattern ; push @pattern, ; push @pattern, ; push @pattern, ; push @pattern, ; my $input = ; my $meta_pattern = ; # if no bindings, add a binding between pattern and input my $result = pat_match ($meta_pattern, $input, {} ) ; ok (scalar keys %$result == 0) ; } # 4 - here the input must satisfy the predicate { sub numberp { $_ =~ /d+/ } my $pattern = ] ; my $input = ; # if no bindings, add a binding between pattern and input my $result = pat_match ($pattern, $input, {} ) ; ok (!defined($result)); } # 5 - same thing, but this time a failing result --- '' # not undef because it is the return val of numberp { sub numberp { $_ =~ /d+/ } my $pattern = ] ; my $input = ; my $result = pat_match ($pattern, $input, {} ) ; ok ($result->{N},34) ; }Segment-matching: Match a chunk of the input stream using *, +, ? # 1 - * is greedy in this case, but not with 2 consecutve * patterns { my $pattern = , 'd'] ; my $input = ; # if no bindings, add a binding between pattern and input my $result = pat_match ($pattern, $input, {} ) ; warn sprintf "X*RETVAL: %s", Data::Dumper::Dumper($result) ; ok ("@{$result->{X}}","b c") ; } # 2 - X* gets nothing, Y* gets all it can: { my $pattern = , , 'd'] ; my $input = ; # if no bindings, add a binding between pattern and input my $result = pat_match ($pattern, $input, {} ) ; warn sprintf "X*Y*RETVAL: %s", Data::Dumper::Dumper($result) ; ok ("@{$result->{Y}}","b c") ; } # 3 - samething , but require at least one match for X { my $pattern = , 'd'] ; my $input = ; my $result = pat_match ($pattern, $input, {} ) ; warn sprintf "RETVAL: @{$result->{X}}" ; ok ("@{$result->{X}}","b c") ; } # 4 - require 0 or 1 match for X { my $pattern = , 'c' ] ; my $input = ; my $result = pat_match ($pattern, $input, {} ) ; ok ("$result->{X}","b") ; } # 5 - evaluate a sub on the fly after match { my $pattern = ] ; my $input = ; my $result = pat_match ($pattern, $input, {} ) ; ok ($result) ; } # --- 6 same thing, but fail { my $pattern = ] ; my $input = ; my $result = pat_match ($pattern, $input, {} ) ; warn sprintf "IF_RETVAL2: *%s*", Data::Dumper::Dumper($result); ok ($result eq '') ; }Requirements:· Perl Requirements: · Perl


Array::PatternMatcher Related Software