The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

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)