Chemistry::Pattern::Bond - A bond that knows how to match


Chemistry-Pattern documentation Contained in the Chemistry-Pattern distribution.

Index


Code Index:

NAME

Top

Chemistry::Pattern::Bond - A bond that knows how to match

SYNOPSIS

Top

    my $patt_bond = Chemistry::Pattern::Bond->new(order => 2);
    $patt_bond->test_sub( sub {
        my ($what, $where) = @_; 
        $where->type eq 'purple' ? 1 : 0; # only match purple bonds
    });

DESCRIPTION

Top

Objects of this class represent bonds in a pattern. This is a subclass of Chemistry::Bond. In addition to the properties of regular bonds, pattern bonds have a method for testing if they match an bond in a molecule. By default, a pattern bond matches an bond if they have the same bond order or both are aromatic. It is possible to substitute this by an arbitrary criterion by providing a custom test subroutine.

METHODS

Top

$patt_bond->test($bond)

Tests if the pattern bond matches the bond given by $bond. Returns true or false.

$patt_bond->test_sub(\&my_test_sub)

Specify an arbitrary test subroutine to be used instead of the default one. &my_test_sub must take two parameters; the first one is the pattern bond and the second is the bond to match. It must return true if there is a match.

$patt_bond->map_to([$bond])

Returns or sets the bond that is considered to be matched by $patt_bond.

VERSION

Top

0.27

SEE ALSO

Top

Chemistry::Pattern

The PerlMol website http://www.perlmol.org/

AUTHOR

Top

Ivan Tubert-Brohman <itub@cpan.org>

COPYRIGHT

Top


Chemistry-Pattern documentation Contained in the Chemistry-Pattern distribution.
package Chemistry::Pattern::Bond;
$VERSION = '0.27';
# $Id: Bond.pm,v 1.12 2009/05/10 20:59:02 itubert Exp $

use 5.006;
use strict;
use base qw(Chemistry::Bond);

sub test {
    my ($what, $where) = @_;
    if ($what->test_sub) {
         return $what->test_sub->($what, $where);
    } else {
         #return $what->order eq $where->order;
         return ($what->order eq $where->order) || ($where->aromatic && $what->aromatic);          
    }
}



Chemistry::Obj::accessor('test_sub');

#Chemistry::Obj::accessor('map_to');
sub map_to {
    my $self = shift;
    if (@_) {
        #print "\t\tmapping $self to '@_'\n";
        ($self->{map_to}) = @_;
        $self;
    } else {
        #print "\t\t$self is mapped to '$self->{map_to}'\n";
        $self->{map_to};
    }
}

1;