NAME
Text::Shoebox::Lexicon - an object-oriented interface to Shoebox lexicons
SYNOPSIS
use Text::Shoebox::Lexicon;
my $lex = Text::Shoebox::Lexicon->read_file( "haida.sf" );
my @entries = $lex->entries;
print "See, it has ", scalar( @entries ), " entries!\n";
$lex->dump;
DESCRIPTION
On object of class Text::Shoebox::Lexicon represents a SF-format lexicon. This mostly just means it's a container for a list of Text::Shoebox::Entry objects, which represent the entries in this lexicon.
This class (plus Text::Shoebox::Entry) exists basically to provide an OO interface around Text::Shoebox -- but you're free to directly use Text::Shoebox instead if you prefer a functional interface.
METHODS
- $lex = Text::Shoebox::Lexicon->new;
 - 
This method returns a new Text::Shoebox Lexicon object, containing an empty list of entries.
 - $lex->read_file( $filespec );
 - 
This reads entries from $filespec (e.g., "./whatever.sf") into $lex. If $filespec doesn't exist or isn't readable, then this dies.
 - $lex = Text::Shoebox::Lexicon->read_file( $filespec );
 - 
This constructs a new lexicon object and reads entries from $filespec into it. I.e., it's basically a shortcut for:
$lex = Text::Shoebox::Lexicon->new; $lex->read_file($filespec); - $lex->read_handle( $filehandle );
 - $lex = Text::Shoebox::Lexicon->read_handle( $filehandle );
 - 
These work just like read_file except that the argument should be a filehandle instead of a filespec string.
 - $lex->write_file( $filespec );
 - 
This writes the entries from $lex to the given filespec. If they can't be written, this dies.
 - $lex->write_handle( $filehandle );
 - 
These work just like write_file except that the argument should be a filehandle instead of a filespec string.
 - $lex->dump;
 - 
This prints (not returns!) a dump of the contents of $lex.
 - @them = $lex->entries;
 - 
This returns a list of the entry objects in $lex.
 - $them = $lex->entries_as_lol;
 - 
This returns a reference to the array of entry objects in $lex.
This can be useful for doing things like
push @$them, $newentry;.This is your only way of altering the entry-list in $lex, other than read_file and read_handle!
 
Other Attributes
A lexicon object is mainly for just holding a list of entries. But besides that list, it also contains these attributes, which you usually don't have to know about:
- The "no_scrunch" attribute
 - 
Right after read_file (or read_handle) has finished reading entries, it goes over all of them and calls
$e->scrunchon each. (See Text::Shoebox::Entry for an explanation of the scrunch method.) But you can override this by calling $lex->no_scrunch(1) to set the "no_scrunch" method to a true value.(You can also explicitly turn this off with $lex->no_scrunch(0), or check it with $lex->no_scrunch().)
 - The "rs" attribute
 - 
When Text::Shoebox::Lexicon reads or writes a lexicon, it normally lets Text::Shoebox determine the right value for the newline string (also known as the "RS", even tho for SF format it's not a record separator at all), and that's usually the right thing.
But if that's not working right and you need to override that newline-guessing (notably, this might be necessary with read_handle, which isn't as good as guessing as read_file is), then you can set the lexicon's
rsattribute directly, with$lex->rs("\cm\cj"). Or you can even force it to the system-default value with just$lex->rs($/). Or you can just check the value of thersattribute with just$lex->rs(). 
COPYRIGHT
Copyright 2004, Sean M. Burke sburke@cpan.org, all rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
AUTHOR
Sean M. Burke, sburke@cpan.org
I hasten to point out, incidentally, that I am not in any way affiliated with the Summer Institute of Linguistics.