NAME
String::Pattern - create / identify strings by pattern
SYNOPSIS
use String::Pattern;
use strict;
my $code = "73545-ved-8877";
my $name = "Benalgin";
my $prescription = 'X';
my $price = 10.99;
my $date;
my $p = new Pattern 'code: 1223144-x-67 name: Aspirin prescription: [pr_flag] price: $5.90';
my $print_view = new Pattern q{
record date : 8/11/00
code: 1223144-x-67
name: Aspirin
[pr_flag] prescription
price: $5.90
};
$p->bind( '1223144-x-67' => \$code);
$p->bind( Aspirin => \$name);
$p->bind( '5.90' => \$price, '\d+(?:[,\.]\d{2})?');
$p->bind( pr_flag => \$prescription);
$print_view->bind_like($p);
$print_view->bind( '8/11/00' => \$date);
my $q="$p"; # equivalent ot my $q=$p->to_string;
$prescription=" ";
my $r = 'code: 1223144x-69 name: Aspirin-Bayer prescription: [ ] price: $3.124';
for my $string ($r, $p, $q) {
print $string, "\n";
if ($p->identify($string)) {
print "Match on pattern \n";
$date = localtime;
print $print_view."\n";
}else{
print "Not match on pattern \n\n"
}
}
DESCRIPTION
This module is designed to deal whith non atomic data strings representations whith fixed number of items on it - such as addresses, business cards, product descriptors etc. It simplificies string creation based on preliminary defined human readable patterns ( templates ) and identifying that any given string has format, "described" in the same pattern.
Methods
- pattern
- pattern ($string)
-
if
$string
is supplied then it will be used as pattern, otherwise currently used pattern is returned - bind ( tag => \$var)
- bind ( tag => \$var, $re)
-
binds var ref to specific part of pattern (tag). When string is created, all occuriences of that tag will be replaced with the value of
$var
. Regular expession$re
is used to describe what the tag looks like, and increases the accuracy of identify method in ambiguous cases. Pattern is used to build one regular expession whith backreferences ( for each occurrence of tag ) , so brackets usage in$re
must be only like this (?: ... ). - to_string
-
Creates string based on pattern and bindings. This method is invoked when object ref is evaluated in string context
- identify ($string)
-
Returns 1 if
$string
matches on pattern and all occurrences of given tag are equal, then sets vars to first occurrence of respective bounded tag. Otherwise returns 0 and nothig is changed. - bind_like ($other_pattern_object)
-
Gets bindings from other object. May be useful for copy like operations avoiding boring declararions.
my $p1 = new String::Pattern .....; my $p2 = new String::Pattern .....; # a lot of bind ... $p1->bind....; ... $p1->bind....; $p2->bind_like($p1); # $p2 specific binds $p2->bind....; if ($p1->identify(...)) { print $p2 }
so $p2 have all of $p1 bindings plus one additional
to do
- erros and warnings
-
Adding some useful warnings and erros about content of variables, and their ralations with tags in the pattern
AUTHOR
Ivo Zdravkov, ivoz@starmail.com
SEE ALSO
perl (1), perlre (3)