package Data::Taxonomy::Tags::Tag; use overload '""' => sub { shift->as_string }, fallback => 1; # Constants for separator and category use constant SPLIT => 0; use constant JOIN => 1; =head1 NAME Data::Taxonomy::Tags::Tag - Represents a single tag =head1 SYNOPSIS print $tag->name, " (category: ", $tag->category, ")\n"; =head1 DESCRIPTION Data::Taxonomy::Tags::Tag represents a single tag for a Data::Taxonomy::Tags object. =head2 Methods =over 12 =item new Creates a new instance of the class representing a single tag. Requires two arguments (the input tag to parse and separator arrayref). You shouldn't have to use this method yourself. =cut sub new { my ($class, $tag, $opt) = @_; my $self = bless { input => $tag, separator => $opt->{separator}, }, $class; $self->_process; *name = \&tag; return $self; } =item tag =item name Returns the name of the tag (that is, the tag itself) sans the category bit. =cut sub tag { my ($self, $v) = @_; $self->{tag} = $v if defined $v; return $self->{tag}; } =item category Returns the category the tag is in. If there is no category, then undef is returned; =cut sub category { my ($self, $v) = @_; $self->{category} = $v if defined $v; return $self->{category}; } sub _process { my $self = shift; my ($one, $two) = split /$self->{separator}[SPLIT]/, $self->{input}; if (defined $one and defined $two) { $self->tag($two); $self->category($one); } elsif (defined $one and not defined $two) { $self->tag($one); } else { # Ack! Weird data. $self->tag($self->{input}); } } =item as_string Returns the full tag as a string (that is, the category, the category seperator, and the tag name all concatenated together). Overloading is used as well to automatically call this method if the object is used in a string context. =cut sub as_string { my $self = shift; return defined $self ? defined $self->category ? $self->category . $self->{separator}[JOIN] . $self->tag : $self->tag : undef; } =back =head1 BUGS All bugs, open and resolved, are handled by RT at L. Please report all bugs via L. =head1 LICENSE Copyright 2005, Thomas R. Sibley. You may use, modify, and distribute this package under the same terms as Perl itself. =head1 AUTHOR Thomas R. Sibley, L =cut 42;