File Coverage

blib/lib/Text/BibTeX/Entry.pm
Criterion Covered Total %
statement 174 205 84.8
branch 45 78 57.6
condition 29 54 53.7
subroutine 31 34 91.1
pod 28 29 96.5
total 307 400 76.7


line stmt bran cond sub pod time code
1             # ----------------------------------------------------------------------
2             # NAME : BibTeX/Entry.pm
3             # CLASSES : Text::BibTeX::Entry
4             # RELATIONS : base class for Text::BibTeX::StructuredEntry, and
5             # ultimately for all user-supplied structured entry classes
6             # DESCRIPTION: Provides an object-oriented interface to BibTeX entries.
7             # CREATED : March 1997, Greg Ward
8             # MODIFIED :
9             # VERSION : $Id$
10             # COPYRIGHT : Copyright (c) 1997-2000 by Gregory P. Ward. All rights
11             # reserved.
12             #
13             # This file is part of the Text::BibTeX library. This
14             # library is free software; you may redistribute it and/or
15             # modify it under the same terms as Perl itself.
16             # ----------------------------------------------------------------------
17             package Text::BibTeX::Entry;
18              
19             require 5.004; # for isa, and delete on a slice
20              
21 13     13   87 use strict;
  13         26  
  13         411  
22 13     13   69 use vars qw'$VERSION';
  13         24  
  13         525  
23 13     13   62 use Carp;
  13         26  
  13         834  
24 13     13   158 use Text::BibTeX qw(:metatypes :nodetypes);
  13         30  
  13         40125  
25              
26             $VERSION = 0.88;
27              
28             =head1 NAME
29              
30             Text::BibTeX::Entry - read and parse BibTeX files
31              
32             =head1 SYNOPSIS
33              
34             use Text::BibTeX::Entry;
35              
36             # ...assuming that $bibfile and $newbib are both objects of class
37             # Text::BibTeX::File, opened for reading and writing (respectively):
38              
39             # Entry creation/parsing methods:
40             $entry = Text::BibTeX::Entry->new();
41             $entry->read ($bibfile);
42             $entry->parse ($filename, $filehandle);
43             $entry->parse_s ($entry_text);
44              
45             # or:
46             $entry = Text::BibTeX::Entry->new( $bibfile );
47             $entry = Text::BibTeX::Entry->new( $filename, $filehandle );
48             $entry = Text::BibTeX::Entry->new( $entry_text );
49            
50             # Entry query methods
51             warn "error in input" unless $entry->parse_ok;
52             $metatype = $entry->metatype;
53             $type = $entry->type;
54              
55             # if metatype is BTE_REGULAR or BTE_MACRODEF:
56             $key = $entry->key; # only for BTE_REGULAR metatype
57             $num_fields = $entry->num_fields;
58             @fieldlist = $entry->fieldlist;
59             $has_title = $entry->exists ('title');
60             $title = $entry->get ('title');
61             # or:
62             ($val1,$val2,...$valn) = $entry->get ($field1, $field2, ..., $fieldn);
63              
64             # if metatype is BTE_COMMENT or BTE_PREAMBLE:
65             $value = $entry->value;
66              
67             # Author name methods
68             @authors = $entry->split ('author');
69             ($first_author) = $entry->names ('author');
70              
71             # Entry modification methods
72             $entry->set_type ($new_type);
73             $entry->set_key ($new_key);
74             $entry->set ('title', $new_title);
75             # or:
76             $entry->set ($field1, $val1, $field2, $val2, ..., $fieldn, $valn);
77             $entry->delete (@fields);
78             $entry->set_fieldlist (\@fieldlist);
79              
80             # Entry output methods
81             $entry->write ($newbib);
82             $entry->print ($filehandle);
83             $entry_text = $entry->print_s;
84              
85             # Reset internal parser state:
86             $entry = Text::BibTeX::Entry->new();
87             $entry->parse ($filename, undef);
88             $entry->parse_s (undef);
89              
90             # or:
91             $entry = Text::BibTeX::Entry->new( $filename, undef );
92             $entry = Text::BibTeX::Entry->new( undef );
93              
94             # Miscellaneous methods
95             $entry->warn ($entry_warning);
96             # or:
97             $entry->warn ($field_warning, $field);
98             $entry->clone;
99              
100             =head1 DESCRIPTION
101              
102             C does all the real work of reading and parsing
103             BibTeX files. (Well, actually it just provides an object-oriented Perl
104             front-end to a C library that does all that. But that's not important
105             right now.)
106              
107             BibTeX entries can be read either from C objects (using
108             the C method), or directly from a filehandle (using the C
109             method), or from a string (using C). The first is preferable,
110             since you don't have to worry about supplying the filename, and because of
111             the extra functionality provided by the C class.
112             Currently, this means that you may specify the I to
113             which entries are expected to conform via the C class. This lets you
114             ensure that entries follow the rules for required fields and mutually
115             constrained fields for a particular type of database, and also gives you
116             access to all the methods of the I for this
117             database structure. See L for details on database
118             structures.
119              
120             Once you have the entry, you can query it or change it in a variety of
121             ways. The query methods are C, C, C, C,
122             C, C, and C. Methods for changing the entry are
123             C, C, C, C, and C.
124              
125             Finally, you can output BibTeX entries, again either to an open
126             C object, a filehandle or a string. (A filehandle or
127             C object must, of course, have been opened in write mode.) Output to
128             a C object is done with the C method, to a filehandle via
129             C, and to a string with C. Using the C class is
130             recommended for future extensibility, although it currently doesn't offer
131             anything extra.
132              
133             =head1 METHODS
134              
135             =head2 Entry creation/parsing methods
136              
137             =over 4
138              
139             =item new ([OPTS ,] [SOURCE])
140              
141             Creates a new C object. If the SOURCE parameter is
142             supplied, it must be one of the following: a C (or
143             descendant class) object, a filename/filehandle pair, or a string. Calls
144             C to read from a C object, C to read from
145             a filehandle, and C to read from a string.
146              
147             A filehandle can be specified as a GLOB reference, or as an
148             C (or descendants) object, or as a C (or
149             descendants) object. (But there's really no point in using
150             C objects, since C requires Perl 5.004, which
151             always includes the C modules.) You can I pass in the name of
152             a filehandle as a string, though, because C
153             conforms to the C pragma (which disallows such symbolic
154             references).
155              
156             The corresponding filename should be supplied in order to allow for
157             accurate error messages; if you simply don't have the filename, you can
158             pass C and you'll get error messages without a filename. (It's
159             probably better to rearrange your code so that the filename is
160             available, though.)
161              
162             Thus, the following are equivalent to read from a file named by
163             C<$filename> (error handling ignored):
164              
165             # good ol' fashioned filehandle and GLOB ref
166             open (BIBFILE, $filename);
167             $entry = Text::BibTeX::Entry->new($filename, \*BIBFILE);
168              
169             # newfangled IO::File thingy
170             $file = IO::File->new($filename);
171             $entry = Text::BibTeX::Entry->new($filename, $file);
172              
173             But using a C object is simpler and preferred:
174              
175             $file = Text::BibTeX::File->new($filename);
176             $entry = Text::BibTeX::Entry->new($file);
177              
178             Returns the new object, unless SOURCE is supplied and reading/parsing
179             the entry fails (e.g., due to end of file) -- then it returns false.
180              
181             You may supply a reference to an option hash as first argument.
182             Supported options are:
183              
184             =over 4
185              
186             =item BINMODE
187              
188             Set the way Text::BibTeX deals with strings. By default it manages
189             strings as bytes. You can set BINMODE to 'utf-8' to get NFC normalized
190              
191             Text::BibTeX::Entry->new(
192             { binmode => 'utf-8', normalization => 'NFD' },
193             $file });
194              
195              
196             =item NORMALIZATION
197              
198             UTF-8 strings and you can customise the normalization with the NORMALIZATION option.
199              
200             =back
201              
202              
203             =cut
204              
205             sub new
206             {
207 111     111 1 27818 my ($class, @source) = @_;
208              
209 111   33     339 $class = ref ($class) || $class;
210            
211 111         499 my $self = {'file' => undef,
212             'type' => undef,
213             'key' => undef,
214             'status' => undef,
215             'metatype' => undef,
216             'fields' => [],
217             'values' => {}};
218 111         194 bless $self, $class;
219              
220 111         153 my $opts = {};
221 111 50 66     377 $opts = shift @source if scalar(@source) and ref $source[0] eq "HASH";
222 111         265 $opts->{ lc $_ } = $opts->{$_} for ( keys %$opts );
223             $self->{binmode} = 'utf-8'
224 111 50 33     268 if exists $opts->{binmode} && $opts->{binmode} =~ /utf-?8/i;
225 111 50       192 $self->{normalization} = $opts->{normalization} if exists $opts->{normalization};
226              
227 111 100       196 if (@source)
228             {
229 105         163 my $status;
230              
231 105 100 100     656 if (@source == 1 && ref($source[0]) && $source[0]->isa ('Text::BibTeX::File'))
    100 66        
    50 33        
      66        
      66        
      33        
      33        
232             {
233 84         103 my $file = $source[0];
234 84         132 $status = $self->read ($file);
235 84 100       285 if (my $structure = $file->structure)
236             {
237 2         4 $self->{structure} = $structure;
238 2         8 bless $self, $structure->entry_class;
239             }
240             }
241             elsif (@source == 2 && (defined ($source[0]) && ! ref ($source[0])) && (!defined ($source[1]) || fileno ($source[1]) >= 0))
242 15         66 { $status = $self->parse ($source[0], $source[1]) }
243             elsif (@source == 1 && ! ref ($source[0]))
244 6         41 { $status = $self->parse_s ($source[0]) }
245             else
246 0         0 { croak "new: source argument must be either a Text::BibTeX::File " .
247             "(or descendant) object, filename/filehandle pair, or " .
248             "a string"; }
249              
250 105 100       290 return $status unless $status; # parse failed -- tell our caller
251             }
252 94         268 $self;
253             }
254              
255             =item clone
256              
257             Clone a Text::BibTeX::Entry object, returning the clone. This re-uses the reference to any
258             Text::BibTeX::Structure or Text::BibTeX::File but copies everything else,
259             so that the clone can be modified apart from the original.
260              
261             =cut
262              
263             sub clone
264             {
265 1     1 1 1860 my $self = shift;
266 1         3 my $clone = {};
267             # Use the same structure object - won't be changed
268 1 50       6 if ($self->{structure}) {
269 0         0 $clone->{structure} = $self->{structure};
270             }
271             # Use the same file object - won't be changed
272 1 50       4 if ($self->{file}) {
273             $clone->{file} = $self->{file}
274 0         0 }
275             # These might be changed so make copies
276 1         3 $clone->{binmode} = $self->{binmode};
277 1         3 $clone->{normalization} = $self->{normalization};
278 1         2 $clone->{type} = $self->{type};
279 1         3 $clone->{key} = $self->{key};
280 1         2 $clone->{status} = $self->{status};
281 1         2 $clone->{metatype} = $self->{metatype};
282 1         2 $clone->{fields} = [ map {$_} @{$self->{fields}} ];
  4         9  
  1         4  
283 1         2 while (my ($k, $v) = each %{$self->{values}}) {
  5         15  
284 4         11 $clone->{values}{$k} = $v;
285             }
286 1         3 while (my ($k, $v) = each %{$self->{lines}}) {
  7         19  
287 6         10 $clone->{lines}{$k} = $v;
288             }
289 1         3 bless $clone, ref($self);
290 1         3 return $clone;
291             }
292              
293             =item read (BIBFILE)
294              
295             Reads and parses an entry from BIBFILE, which must be a
296             C object (or descendant). The next entry will be read
297             from the file associated with that object.
298              
299             Returns the same as C (or C): false if no entry found
300             (e.g., at end-of-file), true otherwise. To see if the parse itself failed
301             (due to errors in the input), call the C method.
302              
303             =cut
304              
305             sub read
306             {
307 88     88 1 137 my ($self, $source, $preserve) = @_;
308 88 50       180 croak "`source' argument must be ref to open Text::BibTeX::File " .
309             "(or descendant) object"
310             unless ($source->isa('Text::BibTeX::File'));
311              
312 88         120 my $fn = $source->{'filename'};
313 88         100 my $fh = $source->{'handle'};
314 88         116 $self->{'file'} = $source; # store File object for later use
315             ## Propagate flags
316 88         119 for my $f (qw.binmode normalization.) {
317 176 100       463 $self->{$f} = $source->{$f} unless exists $self->{$f};
318             }
319 88         142 return $self->parse ($fn, $fh, $preserve);
320             }
321              
322              
323             =item parse (FILENAME, FILEHANDLE)
324              
325             Reads and parses the next entry from FILEHANDLE. (That is, it scans the
326             input until an '@' sign is seen, and then slurps up to the next '@'
327             sign. Everything between the two '@' signs [including the first one,
328             but not the second one -- it's pushed back onto the input stream for the
329             next entry] is parsed as a BibTeX entry, with the simultaneous
330             construction of an abstract syntax tree [AST]. The AST is traversed to
331             ferret out the most interesting information, and this is stuffed into a
332             Perl hash, which coincidentally is the C object
333             you've been tossing around. But you don't need to know any of that -- I
334             just figured if you've read this far, you might want to know something
335             about the inner workings of this module.)
336              
337             The success of the parse is stored internally so that you can later
338             query it with the C method. Even in the presence of syntax
339             errors, you'll usually get something resembling your input, but it's
340             usually not wise to try to do anything with it. Just call C,
341             and if it returns false then silently skip to the next entry. (The
342             error messages printed out by the parser should be quite adequate for
343             the user to figure out what's wrong. And no, there's currently no way
344             for you to capture or redirect those error messages -- they're always
345             printed to C by the underlying C code. That should change in
346             future releases.)
347              
348             If no '@' signs are seen on the input before reaching end-of-file, then
349             we've exhausted all the entries in the file, and C returns a
350             false value. Otherwise, it returns a true value -- even if there were
351             syntax errors. Hence, it's important to check C.
352              
353             The FILENAME parameter is only used for generating error messages, but
354             anybody using your program will certainly appreciate your setting it
355             correctly!
356              
357             Passing C to FILEHANDLE will reset the state of the underlying
358             C parser, which is required in order to parse multiple files.
359              
360             =item parse_s (TEXT)
361              
362             Parses a BibTeX entry (using the above rules) from the string TEXT. The
363             string is not modified; repeatedly calling C with the same string
364             will give you the same results each time. Thus, there's no point in
365             putting multiple entries in one string.
366              
367             Passing C to TEXT will reset the state of the underlying
368             C parser, which may be required in order to parse multiple strings.
369              
370             =back
371              
372             =cut
373              
374             sub _preserve
375             {
376 126     126   174 my ($self, $preserve) = @_;
377              
378             $preserve = $self->{'file'}->preserve_values
379             if ! defined $preserve &&
380             defined $self->{'file'} &&
381 126 100 66     677 $self->{'file'}->isa ('Text::BibTeX::File');
      66        
382 126 50       246 require Text::BibTeX::Value if $preserve;
383 126         174 $preserve;
384             }
385              
386             sub parse
387             {
388 106     106 1 2628 my ($self, $filename, $filehandle, $preserve) = @_;
389              
390 106         189 $preserve = $self->_preserve ($preserve);
391 106 100       186 if (defined $filehandle) {
392 96         5128 _parse ($self, $filename, $filehandle, $preserve);
393             } else {
394 10         66 _reset_parse ();
395             }
396             }
397              
398              
399             sub parse_s
400             {
401 20     20 1 32138 my ($self, $text, $preserve) = @_;
402              
403 20         62 $preserve = $self->_preserve ($preserve);
404 20 100       59 if (defined $text) {
405 18         1156 _parse_s ($self, $text, $preserve);
406             } else {
407 2         12 _reset_parse_s ();
408             }
409             }
410              
411              
412             =head2 Entry query methods
413              
414             =over 4
415              
416             =item parse_ok ()
417              
418             Returns false if there were any serious errors encountered while parsing
419             the entry. (A "serious" error is a lexical or syntax error; currently,
420             warnings such as "undefined macro" result in an error message being
421             printed to C for the user's edification, but no notice is
422             available to the calling code.)
423              
424             =item type ()
425              
426             Returns the type of the entry. (The `type' is the word that follows the
427             '@' sign; e.g. `article', `book', `inproceedings', etc. for the standard
428             BibTeX styles.)
429              
430             =item metatype ()
431              
432             Returns the metatype of the entry. (The `metatype' is a numeric value used
433             to classify entry types into four groups: comment, preamble, macro
434             definition (C<@string> entries), and regular (all other entry types).
435             C exports four constants for these metatypes: C,
436             C, C, and C.)
437              
438             =item key ()
439              
440             Returns the key of the entry. (The key is the token immediately
441             following the opening `{' or `(' in "regular" entries. Returns C
442             for entries that don't have a key, such as macro definition (C<@string>)
443             entries.)
444              
445             =item num_fields ()
446              
447             Returns the number of fields in the entry. (Note that, currently, this is
448             I equivalent to putting C in front of a call to C.
449             See below for the consequences of calling C in a scalar
450             context.)
451              
452             =item fieldlist ()
453              
454             Returns the list of fields in the entry.
455              
456             B In scalar context, it no longer returns a
457             reference to the object's own list of fields.
458              
459             =cut
460              
461 19     19 1 11306 sub parse_ok { shift->{'status'}; }
462              
463             sub metatype {
464 2     2 1 9 my $self = shift;
465 2         6 Text::BibTeX->_process_result( $self->{'metatype'}, $self->{binmode}, $self->{normalization} );
466             }
467              
468             sub type {
469 33     33 1 69 my $self = shift;
470 33         182 Text::BibTeX->_process_result( $self->{'type'}, $self->{binmode}, $self->{normalization} );
471             }
472              
473             sub key {
474 28     28 1 54 my $self = shift;
475             exists $self->{key}
476             ? Text::BibTeX->_process_result($self->{key}, $self->{binmode}, $self->{normalization})
477 28 100       144 : undef;
478             }
479              
480 0     0 1 0 sub num_fields { scalar @{shift->{'fields'}}; }
  0         0  
481              
482             sub fieldlist {
483 21     21 1 10776 my $self = shift;
484 21         39 return map { Text::BibTeX->_process_result($_, $self->{binmode}, $self->{normalization})} @{$self->{'fields'}};
  64         218  
  21         62  
485             }
486            
487             =item exists (FIELD)
488              
489             Returns true if a field named FIELD is present in the entry, false
490             otherwise.
491              
492             =item get (FIELD, ...)
493              
494             Returns the value of one or more FIELDs, as a list of values. For example:
495              
496             $author = $entry->get ('author');
497             ($author, $editor) = $entry->get ('author', 'editor');
498              
499             If a FIELD is not present in the entry, C will be returned at its
500             place in the return list. However, you can't completely trust this as a
501             test for presence or absence of a field; it is possible for a field to be
502             present but undefined. Currently this can only happen due to certain
503             syntax errors in the input, or if you pass an undefined value to C, or
504             if you create a new field with C (the new field's value is
505             implicitly set to C).
506              
507             Normally, the field value is what the input looks like after "maximal
508             processing"--quote characters are removed, whitespace is collapsed (the
509             same way that BibTeX itself does it), macros are expanded, and multiple
510             tokens are pasted together. (See L for details on the
511             post-processing performed by B.)
512              
513             For example, if your input file has the following:
514              
515             @string{of = "of"}
516             @string{foobars = "Foobars"}
517              
518             @article{foobar,
519             title = { The Mating Habits } # of # " Adult " # foobars
520             }
521              
522             then using C to query the value of the C field from the </td> </tr> <tr> <td class="h" > <a name="523">523</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> C<foobar> entry would give the string "The Mating Habits of Adult Foobars". </td> </tr> <tr> <td class="h" > <a name="524">524</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="525">525</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> However, in certain circumstances you may wish to preserve the values as </td> </tr> <tr> <td class="h" > <a name="526">526</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> they appear in the input. This is done by setting a C<preserve_values> </td> </tr> <tr> <td class="h" > <a name="527">527</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> flag at some point; then, C<get> will return not strings but </td> </tr> <tr> <td class="h" > <a name="528">528</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> C<Text::BibTeX::Value> objects. Each C<Value> object is a list of </td> </tr> <tr> <td class="h" > <a name="529">529</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> C<Text::BibTeX::SimpleValue> objects, which in turn consists of a simple </td> </tr> <tr> <td class="h" > <a name="530">530</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> value type (string, macro, or number) and the text of the simple value. </td> </tr> <tr> <td class="h" > <a name="531">531</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Various ways to set the C<preserve_values> flag and the interface to </td> </tr> <tr> <td class="h" > <a name="532">532</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> both C<Value> and C<SimpleValue> objects are described in </td> </tr> <tr> <td class="h" > <a name="533">533</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> L<Text::BibTeX::Value>. </td> </tr> <tr> <td class="h" > <a name="534">534</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="535">535</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item value () </td> </tr> <tr> <td class="h" > <a name="536">536</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="537">537</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Returns the single string associated with C<@comment> and C<@preamble> </td> </tr> <tr> <td class="h" > <a name="538">538</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> entries. For instance, the entry </td> </tr> <tr> <td class="h" > <a name="539">539</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="540">540</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> @preamble{" This is a preamble" # </td> </tr> <tr> <td class="h" > <a name="541">541</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> {---the concatenation of several strings}} </td> </tr> <tr> <td class="h" > <a name="542">542</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="543">543</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> would return a value of "This is a preamble---the concatenation of </td> </tr> <tr> <td class="h" > <a name="544">544</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> several strings". </td> </tr> <tr> <td class="h" > <a name="545">545</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="546">546</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> If this entry was parsed in "value preservation" mode, then C<value> </td> </tr> <tr> <td class="h" > <a name="547">547</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> acts like C<get>, and returns a C<Value> object rather than a simple </td> </tr> <tr> <td class="h" > <a name="548">548</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> string. </td> </tr> <tr> <td class="h" > <a name="549">549</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="550">550</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="551">551</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="552">552</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="553">553</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="554">554</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub exists </td> </tr> <tr> <td class="h" > <a name="555">555</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="556">556</a> </td> <td class="c3" > 91 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#556-1"> 91 </a> </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#556-1"> 1 </a> </td> <td > 628 </td> <td class="s"> my ($self, $field) = @_; </td> </tr> <tr> <td class="h" > <a name="557">557</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="558">558</a> </td> <td class="c3" > 91 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 277 </td> <td class="s"> exists $self->{values}{Text::BibTeX->_process_argument($field, $self->{binmode}, $self->{normalization})}; </td> </tr> <tr> <td class="h" > <a name="559">559</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="560">560</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="561">561</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub get </td> </tr> <tr> <td class="h" > <a name="562">562</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="563">563</a> </td> <td class="c3" > 123 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#563-1"> 123 </a> </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#563-1"> 1 </a> </td> <td > 32137 </td> <td class="s"> my ($self, @fields) = @_; </td> </tr> <tr> <td class="h" > <a name="564">564</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="565">565</a> </td> <td class="c3" > 123 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 264 </td> <td class="s"> my @x = @{$self->{'values'}}{map {Text::BibTeX->_process_argument($_, $self->{binmode}, $self->{normalization})} @fields}; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 123 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 348 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 179 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 608 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="566">566</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="567">567</a> </td> <td class="c3" > 123 </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--branch.html#567-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 217 </td> <td class="s"> @x = map {defined($_) ? Text::BibTeX->_process_result($_, $self->{binmode}, $self->{normalization}): undef} @x; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 179 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 525 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="568">568</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="569">569</a> </td> <td class="c3" > 123 </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--branch.html#569-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 768 </td> <td class="s"> return (@x > 1) ? @x : $x[0]; </td> </tr> <tr> <td class="h" > <a name="570">570</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="571">571</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="572">572</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub value { </td> </tr> <tr> <td class="h" > <a name="573">573</a> </td> <td class="c3" > 2 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#573-1"> 2 </a> </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#573-1"> 1 </a> </td> <td > 10 </td> <td class="s"> my $self = shift; </td> </tr> <tr> <td class="h" > <a name="574">574</a> </td> <td class="c3" > 2 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 7 </td> <td class="s"> Text::BibTeX->_process_result($self->{value}, $self->{binmode}, $self->{normalization}); </td> </tr> <tr> <td class="h" > <a name="575">575</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="576">576</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="577">577</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="578">578</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 Author name methods </td> </tr> <tr> <td class="h" > <a name="579">579</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="580">580</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> This is the only part of the module that makes any assumption about the </td> </tr> <tr> <td class="h" > <a name="581">581</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> nature of the data, namely that certain fields are lists delimited by a </td> </tr> <tr> <td class="h" > <a name="582">582</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> simple word such as "and", and that the delimited sub-strings are human </td> </tr> <tr> <td class="h" > <a name="583">583</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> names of the "First von Last" or "von Last, Jr., First" style used by </td> </tr> <tr> <td class="h" > <a name="584">584</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> BibTeX. If you are using this module for anything other than </td> </tr> <tr> <td class="h" > <a name="585">585</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> bibliographic data, you can most likely forget about these two methods. </td> </tr> <tr> <td class="h" > <a name="586">586</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> However, if you are in fact hacking on BibTeX-style bibliographic data, </td> </tr> <tr> <td class="h" > <a name="587">587</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> these could come in very handy -- the name-parsing done by BibTeX is not </td> </tr> <tr> <td class="h" > <a name="588">588</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> trivial, and the list-splitting would also be a pain to implement in </td> </tr> <tr> <td class="h" > <a name="589">589</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Perl because you have to pay attention to brace-depth. (Not that it </td> </tr> <tr> <td class="h" > <a name="590">590</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> wasn't a pain to implement in C -- it's just a lot more efficient than a </td> </tr> <tr> <td class="h" > <a name="591">591</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Perl implementation would be.) </td> </tr> <tr> <td class="h" > <a name="592">592</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="593">593</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Incidentally, both of these methods assume that the strings being split </td> </tr> <tr> <td class="h" > <a name="594">594</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> have already been "collapsed" in the BibTeX way, i.e. all leading and </td> </tr> <tr> <td class="h" > <a name="595">595</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> trailing whitespace removed and internal whitespace reduced to single </td> </tr> <tr> <td class="h" > <a name="596">596</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> spaces. This should always be the case when using these two methods on </td> </tr> <tr> <td class="h" > <a name="597">597</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> a C<Text::BibTeX::Entry> object, but these are actually just front ends </td> </tr> <tr> <td class="h" > <a name="598">598</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> to more general functions in C<Text::BibTeX>. (More general in that you </td> </tr> <tr> <td class="h" > <a name="599">599</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> supply the string to be parsed, rather than supplying the name of an </td> </tr> <tr> <td class="h" > <a name="600">600</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> entry field.) Should you ever use those more general functions </td> </tr> <tr> <td class="h" > <a name="601">601</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> directly, you might have to worry about collapsing whitespace; see </td> </tr> <tr> <td class="h" > <a name="602">602</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> L<Text::BibTeX> (the C<split_list> and C<split_name> functions in </td> </tr> <tr> <td class="h" > <a name="603">603</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> particular) for more information. </td> </tr> <tr> <td class="h" > <a name="604">604</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="605">605</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Please note that the interface to author name parsing is experimental, </td> </tr> <tr> <td class="h" > <a name="606">606</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> subject to change, and open to discussion. Please let me know if you </td> </tr> <tr> <td class="h" > <a name="607">607</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> have problems with it, think it's just perfect, or whatever. </td> </tr> <tr> <td class="h" > <a name="608">608</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="609">609</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =over 4 </td> </tr> <tr> <td class="h" > <a name="610">610</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="611">611</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item split (FIELD [, DELIM [, DESC]]) </td> </tr> <tr> <td class="h" > <a name="612">612</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="613">613</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Splits the value of FIELD on DELIM (default: `and'). Don't assume that </td> </tr> <tr> <td class="h" > <a name="614">614</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> this works the same as Perl's builtin C<split> just because the names are </td> </tr> <tr> <td class="h" > <a name="615">615</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> the same: in particular, DELIM must be a simple string (no regexps), and </td> </tr> <tr> <td class="h" > <a name="616">616</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> delimiters that are at the beginning or end of the string, or at non-zero </td> </tr> <tr> <td class="h" > <a name="617">617</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> brace depth, or not surrounded by whitespace, are ignored. Some examples </td> </tr> <tr> <td class="h" > <a name="618">618</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> might illuminate matters: </td> </tr> <tr> <td class="h" > <a name="619">619</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="620">620</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> if field F is... then split (F) returns... </td> </tr> <tr> <td class="h" > <a name="621">621</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Name1 and Name2' ('Name1', 'Name2') </td> </tr> <tr> <td class="h" > <a name="622">622</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Name1 and and Name2' ('Name1', undef, 'Name2') </td> </tr> <tr> <td class="h" > <a name="623">623</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Name1 and' ('Name1 and') </td> </tr> <tr> <td class="h" > <a name="624">624</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'and Name2' ('and Name2') </td> </tr> <tr> <td class="h" > <a name="625">625</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 'Name1 {and} Name2 and Name3' ('Name1 {and} Name2', 'Name3') </td> </tr> <tr> <td class="h" > <a name="626">626</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> '{Name1 and Name2} and Name3' ('{Name1 and Name2}', 'Name3') </td> </tr> <tr> <td class="h" > <a name="627">627</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="628">628</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Note that a warning will be issued for empty names (as in the second </td> </tr> <tr> <td class="h" > <a name="629">629</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> example above). A warning ought to be issued for delimiters at the </td> </tr> <tr> <td class="h" > <a name="630">630</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> beginning or end of a string, but currently this isn't done. (Hmmm.) </td> </tr> <tr> <td class="h" > <a name="631">631</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="632">632</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> DESC is a one-word description of the substrings; it defaults to 'name'. </td> </tr> <tr> <td class="h" > <a name="633">633</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> It is only used for generating warning messages. </td> </tr> <tr> <td class="h" > <a name="634">634</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="635">635</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item names (FIELD) </td> </tr> <tr> <td class="h" > <a name="636">636</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="637">637</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Splits FIELD as described above, and further splits each name into four </td> </tr> <tr> <td class="h" > <a name="638">638</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> components: first, von, last, and jr. </td> </tr> <tr> <td class="h" > <a name="639">639</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="640">640</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Returns a list of C<Text::BibTeX::Name> objects, each of which represents </td> </tr> <tr> <td class="h" > <a name="641">641</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> one name. Use the C<part> method to query these objects; see </td> </tr> <tr> <td class="h" > <a name="642">642</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> L<Text::BibTeX::Name> for details on the interface to name objects (and on </td> </tr> <tr> <td class="h" > <a name="643">643</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> name-parsing as well). </td> </tr> <tr> <td class="h" > <a name="644">644</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="645">645</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> For example if this entry: </td> </tr> <tr> <td class="h" > <a name="646">646</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="647">647</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> @article{foo, </td> </tr> <tr> <td class="h" > <a name="648">648</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> author = {John Smith and </td> </tr> <tr> <td class="h" > <a name="649">649</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Hacker, J. Random and </td> </tr> <tr> <td class="h" > <a name="650">650</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Ludwig van Beethoven and </td> </tr> <tr> <td class="h" > <a name="651">651</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> {Foo, Bar and Company}}} </td> </tr> <tr> <td class="h" > <a name="652">652</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="653">653</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> has been parsed into a C<Text::BibTeX::Entry> object C<$entry>, then </td> </tr> <tr> <td class="h" > <a name="654">654</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="655">655</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> @names = $entry->names ('author'); </td> </tr> <tr> <td class="h" > <a name="656">656</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="657">657</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> will put a list of C<Text::BibTeX::Name> objects in C<@names>. These can </td> </tr> <tr> <td class="h" > <a name="658">658</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> be queried individually as described in L<Text::BibTeX::Name>; for instance, </td> </tr> <tr> <td class="h" > <a name="659">659</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="660">660</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> @last = $names[0]->part ('last'); </td> </tr> <tr> <td class="h" > <a name="661">661</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="662">662</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> would put the list of tokens comprising the last name of the first author </td> </tr> <tr> <td class="h" > <a name="663">663</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> into the C<@last> array: C<('Smith')>. </td> </tr> <tr> <td class="h" > <a name="664">664</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="665">665</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="666">666</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="667">667</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub split </td> </tr> <tr> <td class="h" > <a name="668">668</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="669">669</a> </td> <td class="c3" > 20 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#669-1"> 20 </a> </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#669-1"> 1 </a> </td> <td > 1150 </td> <td class="s"> my ($self, $field, $delim, $desc) = @_; </td> </tr> <tr> <td class="h" > <a name="670">670</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="671">671</a> </td> <td class="c3" > 20 </td> <td class="c0" > <a href="blib-lib-Text-BibTeX-Entry-pm--branch.html#671-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 44 </td> <td class="s"> return unless $self->exists($field); </td> </tr> <tr> <td class="h" > <a name="672">672</a> </td> <td class="c3" > 20 </td> <td >   </td> <td class="c0" > <a href="blib-lib-Text-BibTeX-Entry-pm--condition.html#672-1"> 50 </a> </td> <td >   </td> <td >   </td> <td > 82 </td> <td class="s"> $delim ||= 'and'; </td> </tr> <tr> <td class="h" > <a name="673">673</a> </td> <td class="c3" > 20 </td> <td >   </td> <td class="c0" > <a href="blib-lib-Text-BibTeX-Entry-pm--condition.html#673-1"> 50 </a> </td> <td >   </td> <td >   </td> <td > 62 </td> <td class="s"> $desc ||= 'name'; </td> </tr> <tr> <td class="h" > <a name="674">674</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="675">675</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # local $^W = 0 # suppress spurious warning from </td> </tr> <tr> <td class="h" > <a name="676">676</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # unless defined $filename; # undefined $filename </td> </tr> <tr> <td class="h" > <a name="677">677</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Text::BibTeX::split_list($self->{values}{$field}, </td> </tr> <tr> <td class="h" > <a name="678">678</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $delim, </td> </tr> <tr> <td class="h" > <a name="679">679</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ($self->{file} && $self->{file}{filename}), </td> </tr> <tr> <td class="h" > <a name="680">680</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self->{lines}{$field}, </td> </tr> <tr> <td class="h" > <a name="681">681</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $desc, </td> </tr> <tr> <td class="h" > <a name="682">682</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> {binmode => $self->{binmode}, </td> </tr> <tr> <td class="h" > <a name="683">683</a> </td> <td class="c3" > 20 </td> <td >   </td> <td class="c0" > <a href="blib-lib-Text-BibTeX-Entry-pm--condition.html#683-1"> 66 </a> </td> <td >   </td> <td >   </td> <td > 135 </td> <td class="s"> normalization => $self->{normalization}}); </td> </tr> <tr> <td class="h" > <a name="684">684</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="685">685</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="686">686</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub names </td> </tr> <tr> <td class="h" > <a name="687">687</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="688">688</a> </td> <td class="c3" > 14 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#688-1"> 14 </a> </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#688-1"> 1 </a> </td> <td > 641 </td> <td class="s"> require Text::BibTeX::Name; </td> </tr> <tr> <td class="h" > <a name="689">689</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="690">690</a> </td> <td class="c3" > 14 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 42 </td> <td class="s"> my ($self, $field) = @_; </td> </tr> <tr> <td class="h" > <a name="691">691</a> </td> <td class="c3" > 14 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 29 </td> <td class="s"> my (@names, $i); </td> </tr> <tr> <td class="h" > <a name="692">692</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="693">693</a> </td> <td class="c3" > 14 </td> <td >   </td> <td class="c0" > <a href="blib-lib-Text-BibTeX-Entry-pm--condition.html#693-1"> 66 </a> </td> <td >   </td> <td >   </td> <td > 54 </td> <td class="s"> my $filename = ($self->{'file'} && $self->{'file'}{'filename'}); </td> </tr> <tr> <td class="h" > <a name="694">694</a> </td> <td class="c3" > 14 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 23 </td> <td class="s"> my $line = $self->{'lines'}{$field}; </td> </tr> <tr> <td class="h" > <a name="695">695</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="696">696</a> </td> <td class="c3" > 14 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 46 </td> <td class="s"> @names = $self->split ($field); </td> </tr> <tr> <td class="h" > <a name="697">697</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # local $^W = 0 # suppress spurious warning from </td> </tr> <tr> <td class="h" > <a name="698">698</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # unless defined $filename; # undefined $filename </td> </tr> <tr> <td class="h" > <a name="699">699</a> </td> <td class="c3" > 14 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 92 </td> <td class="s"> for $i (0 .. $#names) </td> </tr> <tr> <td class="h" > <a name="700">700</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="701">701</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $names[$i] = Text::BibTeX::Name->new( </td> </tr> <tr> <td class="h" > <a name="702">702</a> </td> <td class="c3" > 27 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 117 </td> <td class="s"> {binmode => $self->{binmode}, normalization => $self->{normalization}},$names[$i], $filename, $line, $i); </td> </tr> <tr> <td class="h" > <a name="703">703</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="704">704</a> </td> <td class="c3" > 14 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 47 </td> <td class="s"> @names; </td> </tr> <tr> <td class="h" > <a name="705">705</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="706">706</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="707">707</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="708">708</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="709">709</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 Entry modification methods </td> </tr> <tr> <td class="h" > <a name="710">710</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="711">711</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =over 4 </td> </tr> <tr> <td class="h" > <a name="712">712</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="713">713</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item set_type (TYPE) </td> </tr> <tr> <td class="h" > <a name="714">714</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="715">715</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Sets the entry's type. </td> </tr> <tr> <td class="h" > <a name="716">716</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="717">717</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item set_metatype (METATYPE) </td> </tr> <tr> <td class="h" > <a name="718">718</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="719">719</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Sets the entry's metatype (must be one of the four constants </td> </tr> <tr> <td class="h" > <a name="720">720</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> C<BTE_COMMENT>, C<BTE_PREAMBLE>, C<BTE_MACRODEF>, and C<BTE_REGULAR>, which </td> </tr> <tr> <td class="h" > <a name="721">721</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> are all optionally exported from C<Text::BibTeX>). </td> </tr> <tr> <td class="h" > <a name="722">722</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="723">723</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item set_key (KEY) </td> </tr> <tr> <td class="h" > <a name="724">724</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="725">725</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Sets the entry's key. </td> </tr> <tr> <td class="h" > <a name="726">726</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="727">727</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item set (FIELD, VALUE, ...) </td> </tr> <tr> <td class="h" > <a name="728">728</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="729">729</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Sets the value of field FIELD. (VALUE might be C<undef> or unsupplied, </td> </tr> <tr> <td class="h" > <a name="730">730</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> in which case FIELD will simply be set to C<undef> -- this is where the </td> </tr> <tr> <td class="h" > <a name="731">731</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> difference between the C<exists> method and testing the definedness of </td> </tr> <tr> <td class="h" > <a name="732">732</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> field values becomes clear.) </td> </tr> <tr> <td class="h" > <a name="733">733</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="734">734</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Multiple (FIELD, VALUE) pairs may be supplied; they will be processed in </td> </tr> <tr> <td class="h" > <a name="735">735</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> order (i.e. the input is treated like a list, not a hash). For example: </td> </tr> <tr> <td class="h" > <a name="736">736</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="737">737</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $entry->set ('author', $author); </td> </tr> <tr> <td class="h" > <a name="738">738</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $entry->set ('author', $author, 'editor', $editor); </td> </tr> <tr> <td class="h" > <a name="739">739</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="740">740</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> VALUE can be either a simple string or a C<Text::BibTeX::Value> object; </td> </tr> <tr> <td class="h" > <a name="741">741</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> it doesn't matter if the entry was parsed in "full post-processing" or </td> </tr> <tr> <td class="h" > <a name="742">742</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "preserve input values" mode. </td> </tr> <tr> <td class="h" > <a name="743">743</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="744">744</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item delete (FIELD) </td> </tr> <tr> <td class="h" > <a name="745">745</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="746">746</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Deletes field FIELD from an entry. </td> </tr> <tr> <td class="h" > <a name="747">747</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="748">748</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item set_fieldlist (FIELDLIST) </td> </tr> <tr> <td class="h" > <a name="749">749</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="750">750</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Sets the entry's list of fields to FIELDLIST, which must be a list </td> </tr> <tr> <td class="h" > <a name="751">751</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> reference. If any of the field names supplied in FIELDLIST are not </td> </tr> <tr> <td class="h" > <a name="752">752</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> currently present in the entry, they are created with the value C<undef> </td> </tr> <tr> <td class="h" > <a name="753">753</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and a warning is printed. Conversely, if any of the fields currently </td> </tr> <tr> <td class="h" > <a name="754">754</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> present in the entry are not named in the list of fields supplied to </td> </tr> <tr> <td class="h" > <a name="755">755</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> C<set_fields>, they are deleted from the entry and another warning is </td> </tr> <tr> <td class="h" > <a name="756">756</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> printed. </td> </tr> <tr> <td class="h" > <a name="757">757</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="758">758</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="759">759</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="760">760</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="761">761</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="762">762</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub set_type </td> </tr> <tr> <td class="h" > <a name="763">763</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="764">764</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#764-1"> 1 </a> </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#764-1"> 1 </a> </td> <td > 3 </td> <td class="s"> my ($self, $type) = @_; </td> </tr> <tr> <td class="h" > <a name="765">765</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="766">766</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 2 </td> <td class="s"> $self->{'type'} = $type; </td> </tr> <tr> <td class="h" > <a name="767">767</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="768">768</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="769">769</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub set_metatype </td> </tr> <tr> <td class="h" > <a name="770">770</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="771">771</a> </td> <td class="c0" > <a href="#773"> 0 </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#771-1"> 0 </a> </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#771-1"> 1 </a> </td> <td > 0 </td> <td class="s"> my ($self, $metatype) = @_; </td> </tr> <tr> <td class="h" > <a name="772">772</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="773">773</a> </td> <td class="c0" > <a href="#793"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $self->{'metatype'} = $metatype; </td> </tr> <tr> <td class="h" > <a name="774">774</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="775">775</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="776">776</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub set_key </td> </tr> <tr> <td class="h" > <a name="777">777</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="778">778</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#778-1"> 1 </a> </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#778-1"> 1 </a> </td> <td > 3 </td> <td class="s"> my ($self, $key) = @_; </td> </tr> <tr> <td class="h" > <a name="779">779</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="780">780</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 4 </td> <td class="s"> $self->{'key'} = Text::BibTeX->_process_argument($key, $self->{binmode}, $self->{normalization}); </td> </tr> <tr> <td class="h" > <a name="781">781</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="782">782</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="783">783</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub set </td> </tr> <tr> <td class="h" > <a name="784">784</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="785">785</a> </td> <td class="c3" > 3 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#785-1"> 3 </a> </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#785-1"> 1 </a> </td> <td > 905 </td> <td class="s"> my $self = shift; </td> </tr> <tr> <td class="h" > <a name="786">786</a> </td> <td class="c3" > 3 </td> <td class="c0" > <a href="blib-lib-Text-BibTeX-Entry-pm--branch.html#786-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 12 </td> <td class="s"> croak "set: must supply an even number of arguments" </td> </tr> <tr> <td class="h" > <a name="787">787</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> unless (@_ % 2 == 0); </td> </tr> <tr> <td class="h" > <a name="788">788</a> </td> <td class="c3" > 3 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 6 </td> <td class="s"> my ($field, $value); </td> </tr> <tr> <td class="h" > <a name="789">789</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="790">790</a> </td> <td class="c3" > 3 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 8 </td> <td class="s"> while (@_) </td> </tr> <tr> <td class="h" > <a name="791">791</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="792">792</a> </td> <td class="c3" > 4 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 19 </td> <td class="s"> ($field,$value) = (shift,Text::BibTeX->_process_argument(shift, $self->{binmode}, $self->{normalization})); </td> </tr> <tr> <td class="h" > <a name="793">793</a> </td> <td class="c0" > <a href="#833"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> push (@{$self->{'fields'}}, $field) </td> </tr> <tr> <td class="h" > <a name="794">794</a> </td> <td class="c3" > 4 </td> <td class="c0" > <a href="blib-lib-Text-BibTeX-Entry-pm--branch.html#794-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 13 </td> <td class="s"> unless exists $self->{'values'}{$field}; </td> </tr> <tr> <td class="h" > <a name="795">795</a> </td> <td class="c3" > 4 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 12 </td> <td class="s"> $self->{'values'}{$field} = $value; </td> </tr> <tr> <td class="h" > <a name="796">796</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="797">797</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="798">798</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="799">799</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub delete </td> </tr> <tr> <td class="h" > <a name="800">800</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="801">801</a> </td> <td class="c3" > 2 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#801-1"> 2 </a> </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#801-1"> 1 </a> </td> <td > 6 </td> <td class="s"> my ($self, @fields) = @_; </td> </tr> <tr> <td class="h" > <a name="802">802</a> </td> <td class="c3" > 2 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 4 </td> <td class="s"> my (%gone); </td> </tr> <tr> <td class="h" > <a name="803">803</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="804">804</a> </td> <td class="c3" > 2 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 5 </td> <td class="s"> %gone = map {$_, 1} @fields; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 4 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 9 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="805">805</a> </td> <td class="c3" > 2 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 4 </td> <td class="s"> @{$self->{'fields'}} = grep (! $gone{$_}, @{$self->{'fields'}}); </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 2 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 35 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 2 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 6 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="806">806</a> </td> <td class="c3" > 2 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 5 </td> <td class="s"> delete @{$self->{'values'}}{@fields}; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 2 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 9 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="807">807</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="808">808</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="809">809</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub set_fieldlist </td> </tr> <tr> <td class="h" > <a name="810">810</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="811">811</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#811-1"> 1 </a> </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#811-1"> 1 </a> </td> <td > 867 </td> <td class="s"> my ($self, $fields) = @_; </td> </tr> <tr> <td class="h" > <a name="812">812</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="813">813</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Warn if any of the caller's fields aren't already present in the entry </td> </tr> <tr> <td class="h" > <a name="814">814</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="815">815</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 3 </td> <td class="s"> my ($field, %in_list); </td> </tr> <tr> <td class="h" > <a name="816">816</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 3 </td> <td class="s"> foreach $field (@$fields) </td> </tr> <tr> <td class="h" > <a name="817">817</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="818">818</a> </td> <td class="c3" > 4 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 8 </td> <td class="s"> $in_list{$field} = 1; </td> </tr> <tr> <td class="h" > <a name="819">819</a> </td> <td class="c3" > 4 </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--branch.html#819-1"> 100 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 10 </td> <td class="s"> unless (exists $self->{'values'}{$field}) </td> </tr> <tr> <td class="h" > <a name="820">820</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="821">821</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 151 </td> <td class="s"> carp "Implicitly adding undefined field \"$field\""; </td> </tr> <tr> <td class="h" > <a name="822">822</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 120 </td> <td class="s"> $self->{'values'}{$field} = undef; </td> </tr> <tr> <td class="h" > <a name="823">823</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="824">824</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="825">825</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="826">826</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # And see if there are any fields in the entry that aren't in the user's </td> </tr> <tr> <td class="h" > <a name="827">827</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # list; delete them from the entry if so </td> </tr> <tr> <td class="h" > <a name="828">828</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="829">829</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 2 </td> <td class="s"> foreach $field (keys %{$self->{'values'}}) </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 5 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="830">830</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="831">831</a> </td> <td class="c3" > 4 </td> <td class="c0" > <a href="blib-lib-Text-BibTeX-Entry-pm--branch.html#831-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 9 </td> <td class="s"> unless ($in_list{$field}) </td> </tr> <tr> <td class="h" > <a name="832">832</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="833">833</a> </td> <td class="c0" > <a href="#834"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> carp "Implicitly deleting field \"$field\""; </td> </tr> <tr> <td class="h" > <a name="834">834</a> </td> <td class="c0" > <a href="#896"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> delete $self->{'values'}{$field}; </td> </tr> <tr> <td class="h" > <a name="835">835</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="836">836</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="837">837</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="838">838</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Now we can install (a copy of) the caller's desired field list; </td> </tr> <tr> <td class="h" > <a name="839">839</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="840">840</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 6 </td> <td class="s"> $self->{'fields'} = [@$fields]; </td> </tr> <tr> <td class="h" > <a name="841">841</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="842">842</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="843">843</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="844">844</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 Entry output methods </td> </tr> <tr> <td class="h" > <a name="845">845</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="846">846</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =over 4 </td> </tr> <tr> <td class="h" > <a name="847">847</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="848">848</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item write (BIBFILE) </td> </tr> <tr> <td class="h" > <a name="849">849</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="850">850</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Prints a BibTeX entry on the filehandle associated with BIBFILE (which </td> </tr> <tr> <td class="h" > <a name="851">851</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> should be a C<Text::BibTeX::File> object, opened for output). Currently </td> </tr> <tr> <td class="h" > <a name="852">852</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> the printout is not particularly human-friendly; a highly configurable </td> </tr> <tr> <td class="h" > <a name="853">853</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> pretty-printer will be developed eventually. </td> </tr> <tr> <td class="h" > <a name="854">854</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="855">855</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item print (FILEHANDLE) </td> </tr> <tr> <td class="h" > <a name="856">856</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="857">857</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Prints a BibTeX entry on FILEHANDLE. </td> </tr> <tr> <td class="h" > <a name="858">858</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="859">859</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item print_s () </td> </tr> <tr> <td class="h" > <a name="860">860</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="861">861</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Prints a BibTeX entry to a string, which is the return value. </td> </tr> <tr> <td class="h" > <a name="862">862</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="863">863</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="864">864</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="865">865</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub write </td> </tr> <tr> <td class="h" > <a name="866">866</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="867">867</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#867-1"> 1 </a> </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#867-1"> 1 </a> </td> <td > 10 </td> <td class="s"> my ($self, $bibfile) = @_; </td> </tr> <tr> <td class="h" > <a name="868">868</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="869">869</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 2 </td> <td class="s"> my $fh = $bibfile->{'handle'}; </td> </tr> <tr> <td class="h" > <a name="870">870</a> </td> <td class="c3" > 1 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 3 </td> <td class="s"> $self->print ($fh); </td> </tr> <tr> <td class="h" > <a name="871">871</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="872">872</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="873">873</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub print </td> </tr> <tr> <td class="h" > <a name="874">874</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="875">875</a> </td> <td class="c3" > 3 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#875-1"> 3 </a> </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#875-1"> 1 </a> </td> <td > 695 </td> <td class="s"> my ($self, $handle) = @_; </td> </tr> <tr> <td class="h" > <a name="876">876</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="877">877</a> </td> <td class="c3" > 3 </td> <td >   </td> <td class="c0" > <a href="blib-lib-Text-BibTeX-Entry-pm--condition.html#877-1"> 50 </a> </td> <td >   </td> <td >   </td> <td > 9 </td> <td class="s"> $handle ||= \*STDOUT; </td> </tr> <tr> <td class="h" > <a name="878">878</a> </td> <td class="c3" > 3 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 9 </td> <td class="s"> print $handle $self->print_s; </td> </tr> <tr> <td class="h" > <a name="879">879</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="880">880</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="881">881</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub print_s </td> </tr> <tr> <td class="h" > <a name="882">882</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="883">883</a> </td> <td class="c3" > 4 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#883-1"> 4 </a> </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#883-1"> 1 </a> </td> <td > 7 </td> <td class="s"> my $self = shift; </td> </tr> <tr> <td class="h" > <a name="884">884</a> </td> <td class="c3" > 4 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 9 </td> <td class="s"> my ($field, $output); </td> </tr> <tr> <td class="h" > <a name="885">885</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="886">886</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub value_to_string </td> </tr> <tr> <td class="h" > <a name="887">887</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="888">888</a> </td> <td class="c3" > 16 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#888-1"> 16 </a> </td> <td class="c0" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#888-1"> 0 </a> </td> <td > 19 </td> <td class="s"> my $value = shift; </td> </tr> <tr> <td class="h" > <a name="889">889</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="890">890</a> </td> <td class="c3" > 16 </td> <td class="c0" > <a href="blib-lib-Text-BibTeX-Entry-pm--branch.html#890-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 30 </td> <td class="s"> if (! ref $value) # just a string </td> </tr> <tr> <td class="h" > <a name="891">891</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="892">892</a> </td> <td class="c3" > 16 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 37 </td> <td class="s"> return "{$value}"; </td> </tr> <tr> <td class="h" > <a name="893">893</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="894">894</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> else # a Text::BibTeX::Value object </td> </tr> <tr> <td class="h" > <a name="895">895</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="896">896</a> </td> <td class="c0" > <a href="#898"> 0 </a> </td> <td class="c0" > <a href="blib-lib-Text-BibTeX-Entry-pm--branch.html#896-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> confess "value is a reference, but not to Text::BibTeX::Value object" </td> </tr> <tr> <td class="h" > <a name="897">897</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> unless $value->isa ('Text::BibTeX::Value'); </td> </tr> <tr> <td class="h" > <a name="898">898</a> </td> <td class="c0" > <a href="#899"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> my @values = $value->values; </td> </tr> <tr> <td class="h" > <a name="899">899</a> </td> <td class="c0" > <a href="#901"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> foreach (@values) </td> </tr> <tr> <td class="h" > <a name="900">900</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="901">901</a> </td> <td class="c0" > <a href="#903"> 0 </a> </td> <td class="c0" > <a href="blib-lib-Text-BibTeX-Entry-pm--branch.html#901-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $_ = $_->type == &BTAST_STRING ? '{' . $_->text . '}' : $_->text; </td> </tr> <tr> <td class="h" > <a name="902">902</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="903">903</a> </td> <td class="c0" > <a href="#923"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> return join (' # ', @values); </td> </tr> <tr> <td class="h" > <a name="904">904</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="905">905</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="906">906</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="907">907</a> </td> <td class="c3" > 4 </td> <td class="c0" > <a href="blib-lib-Text-BibTeX-Entry-pm--branch.html#907-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 12 </td> <td class="s"> carp "entry type undefined" unless defined $self->{'type'}; </td> </tr> <tr> <td class="h" > <a name="908">908</a> </td> <td class="c3" > 4 </td> <td class="c0" > <a href="blib-lib-Text-BibTeX-Entry-pm--branch.html#908-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 10 </td> <td class="s"> carp "entry metatype undefined" unless defined $self->{'metatype'}; </td> </tr> <tr> <td class="h" > <a name="909">909</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="910">910</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Regular and macro-def entries have to be treated differently when </td> </tr> <tr> <td class="h" > <a name="911">911</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # printing the first line, because the former have keys and the latter </td> </tr> <tr> <td class="h" > <a name="912">912</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # do not. </td> </tr> <tr> <td class="h" > <a name="913">913</a> </td> <td class="c3" > 4 </td> <td class="c0" > <a href="blib-lib-Text-BibTeX-Entry-pm--branch.html#913-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 104 </td> <td class="s"> if ($self->{'metatype'} == &BTE_REGULAR) </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td class="c0" > <a href="blib-lib-Text-BibTeX-Entry-pm--branch.html#-2"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="914">914</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="915">915</a> </td> <td class="c3" > 4 </td> <td class="c0" > <a href="blib-lib-Text-BibTeX-Entry-pm--branch.html#915-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 12 </td> <td class="s"> carp "entry key undefined" unless defined $self->{'key'}; </td> </tr> <tr> <td class="h" > <a name="916">916</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $output = sprintf ("@%s{%s,\n", </td> </tr> <tr> <td class="h" > <a name="917">917</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self->{'type'} || '', </td> </tr> <tr> <td class="h" > <a name="918">918</a> </td> <td class="c3" > 4 </td> <td >   </td> <td class="c0" > <a href="blib-lib-Text-BibTeX-Entry-pm--condition.html#918-1"> 50 </a> </td> <td >   </td> <td >   </td> <td > 32 </td> <td class="s"> $self->{'key'} || ''); </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-Text-BibTeX-Entry-pm--condition.html#-2"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="919">919</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="920">920</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> elsif ($self->{'metatype'} == &BTE_MACRODEF) </td> </tr> <tr> <td class="h" > <a name="921">921</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="922">922</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $output = sprintf ("@%s{\n", </td> </tr> <tr> <td class="h" > <a name="923">923</a> </td> <td class="c0" > <a href="#932"> 0 </a> </td> <td >   </td> <td class="c0" > <a href="blib-lib-Text-BibTeX-Entry-pm--condition.html#923-1"> 0 </a> </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $self->{'type'} || ''); </td> </tr> <tr> <td class="h" > <a name="924">924</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="925">925</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="926">926</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Comment and preamble entries are treated the same -- we print out </td> </tr> <tr> <td class="h" > <a name="927">927</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # the entire entry, on one line, right here. </td> </tr> <tr> <td class="h" > <a name="928">928</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> else # comment or preamble </td> </tr> <tr> <td class="h" > <a name="929">929</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="930">930</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> return sprintf ("@%s{%s}\n\n", </td> </tr> <tr> <td class="h" > <a name="931">931</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $self->{'type'}, </td> </tr> <tr> <td class="h" > <a name="932">932</a> </td> <td class="c0" > <a href="#942"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> value_to_string ($self->{'value'})); </td> </tr> <tr> <td class="h" > <a name="933">933</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="934">934</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="935">935</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Here we print out all the fields/values of a regular or macro-def entry </td> </tr> <tr> <td class="h" > <a name="936">936</a> </td> <td class="c3" > 4 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 9 </td> <td class="s"> my @fields = @{$self->{'fields'}}; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c3" > 4 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 15 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="937">937</a> </td> <td class="c3" > 4 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 12 </td> <td class="s"> while ($field = shift @fields) </td> </tr> <tr> <td class="h" > <a name="938">938</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="939">939</a> </td> <td class="c3" > 16 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 31 </td> <td class="s"> my $value = $self->{'values'}{$field}; </td> </tr> <tr> <td class="h" > <a name="940">940</a> </td> <td class="c3" > 16 </td> <td class="c0" > <a href="blib-lib-Text-BibTeX-Entry-pm--branch.html#940-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 31 </td> <td class="s"> if (! defined $value) </td> </tr> <tr> <td class="h" > <a name="941">941</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="942">942</a> </td> <td class="c0" > <a href="#943"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> carp "field \"$field\" has undefined value\n"; </td> </tr> <tr> <td class="h" > <a name="943">943</a> </td> <td class="c0" > <a href="#996"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $value = ''; </td> </tr> <tr> <td class="h" > <a name="944">944</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="945">945</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="946">946</a> </td> <td class="c3" > 16 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 32 </td> <td class="s"> $output .= " $field = "; </td> </tr> <tr> <td class="h" > <a name="947">947</a> </td> <td class="c3" > 16 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 29 </td> <td class="s"> $output .= value_to_string ($value); </td> </tr> <tr> <td class="h" > <a name="948">948</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="949">949</a> </td> <td class="c3" > 16 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 36 </td> <td class="s"> $output .= ",\n"; </td> </tr> <tr> <td class="h" > <a name="950">950</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="951">951</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="952">952</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Tack on the last line, and we're done! </td> </tr> <tr> <td class="h" > <a name="953">953</a> </td> <td class="c3" > 4 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 8 </td> <td class="s"> $output .= "}\n\n"; </td> </tr> <tr> <td class="h" > <a name="954">954</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> </td> </tr> <tr> <td class="h" > <a name="955">955</a> </td> <td class="c3" > 4 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 25 </td> <td class="s"> Text::BibTeX->_process_result($output, $self->{binmode}, $self->{normalization}); </td> </tr> <tr> <td class="h" > <a name="956">956</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="957">957</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="958">958</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="959">959</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="960">960</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head2 Miscellaneous methods </td> </tr> <tr> <td class="h" > <a name="961">961</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="962">962</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =over 4 </td> </tr> <tr> <td class="h" > <a name="963">963</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="964">964</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item warn (WARNING [, FIELD]) </td> </tr> <tr> <td class="h" > <a name="965">965</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="966">966</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Prepends a bit of location information (filename and line number(s)) to </td> </tr> <tr> <td class="h" > <a name="967">967</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> WARNING, appends a newline, and passes it to Perl's C<warn>. If FIELD is </td> </tr> <tr> <td class="h" > <a name="968">968</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> supplied, the line number given is just that of the field; otherwise, the </td> </tr> <tr> <td class="h" > <a name="969">969</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> range of lines for the whole entry is given. (Well, almost -- currently, </td> </tr> <tr> <td class="h" > <a name="970">970</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> the line number of the last field is used as the last line of the whole </td> </tr> <tr> <td class="h" > <a name="971">971</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> entry. This is a bug.) </td> </tr> <tr> <td class="h" > <a name="972">972</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="973">973</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> For example, if lines 10-15 of file F<foo.bib> look like this: </td> </tr> <tr> <td class="h" > <a name="974">974</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="975">975</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> @article{homer97, </td> </tr> <tr> <td class="h" > <a name="976">976</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> author = {Homer Simpson and Ned Flanders}, </td> </tr> <tr> <td class="h" > <a name="977">977</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> title = {Territorial Imperatives in Modern Suburbia}, </td> </tr> <tr> <td class="h" > <a name="978">978</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> journal = {Journal of Suburban Studies}, </td> </tr> <tr> <td class="h" > <a name="979">979</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> year = 1997 </td> </tr> <tr> <td class="h" > <a name="980">980</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="981">981</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="982">982</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> then, after parsing this entry to C<$entry>, the calls </td> </tr> <tr> <td class="h" > <a name="983">983</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="984">984</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $entry->warn ('what a silly entry'); </td> </tr> <tr> <td class="h" > <a name="985">985</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $entry->warn ('what a silly journal', 'journal'); </td> </tr> <tr> <td class="h" > <a name="986">986</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="987">987</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> would result in the following warnings being issued: </td> </tr> <tr> <td class="h" > <a name="988">988</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="989">989</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> foo.bib, lines 10-14: what a silly entry </td> </tr> <tr> <td class="h" > <a name="990">990</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> foo.bib, line 13: what a silly journal </td> </tr> <tr> <td class="h" > <a name="991">991</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="992">992</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="993">993</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="994">994</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub warn </td> </tr> <tr> <td class="h" > <a name="995">995</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="996">996</a> </td> <td class="c0" > <a href="#998"> 0 </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#996-1"> 0 </a> </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#996-1"> 1 </a> </td> <td > 0 </td> <td class="s"> my ($self, $warning, $field) = @_; </td> </tr> <tr> <td class="h" > <a name="997">997</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="998">998</a> </td> <td class="c0" > <a href="#999"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> my $location = ''; </td> </tr> <tr> <td class="h" > <a name="999">999</a> </td> <td class="c0" > <a href="#1001"> 0 </a> </td> <td class="c0" > <a href="blib-lib-Text-BibTeX-Entry-pm--branch.html#999-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> if ($self->{'file'}) </td> </tr> <tr> <td class="h" > <a name="1000">1000</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="1001">1001</a> </td> <td class="c0" > <a href="#1004"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $location = $self->{'file'}{'filename'} . ", "; </td> </tr> <tr> <td class="h" > <a name="1002">1002</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1003">1003</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1004">1004</a> </td> <td class="c0" > <a href="#1005"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> my $lines = $self->{'lines'}; </td> </tr> <tr> <td class="h" > <a name="1005">1005</a> </td> <td class="c0" > <a href="#1009"> 0 </a> </td> <td class="c0" > <a href="blib-lib-Text-BibTeX-Entry-pm--branch.html#1005-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> my $entry_range = ($lines->{'START'} == $lines->{'STOP'}) </td> </tr> <tr> <td class="h" > <a name="1006">1006</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ? "line $lines->{'START'}" </td> </tr> <tr> <td class="h" > <a name="1007">1007</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> : "lines $lines->{'START'}-$lines->{'STOP'}"; </td> </tr> <tr> <td class="h" > <a name="1008">1008</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1009">1009</a> </td> <td class="c0" > <a href="#1011"> 0 </a> </td> <td class="c0" > <a href="blib-lib-Text-BibTeX-Entry-pm--branch.html#1009-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> if (defined $field) </td> </tr> <tr> <td class="h" > <a name="1010">1010</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="1011">1011</a> </td> <td class="c0" > <a href="#1017"> 0 </a> </td> <td class="c0" > <a href="blib-lib-Text-BibTeX-Entry-pm--branch.html#1011-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $location .= (exists $lines->{$field}) </td> </tr> <tr> <td class="h" > <a name="1012">1012</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> ? "line $lines->{$field}: " </td> </tr> <tr> <td class="h" > <a name="1013">1013</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> : "$entry_range (unknown field \"$field\"): "; </td> </tr> <tr> <td class="h" > <a name="1014">1014</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1015">1015</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> else </td> </tr> <tr> <td class="h" > <a name="1016">1016</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="1017">1017</a> </td> <td class="c0" > <a href="#1020"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> $location .= "$entry_range: "; </td> </tr> <tr> <td class="h" > <a name="1018">1018</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1019">1019</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1020">1020</a> </td> <td class="c0" > <a href="#1049"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> warn "$location$warning\n"; </td> </tr> <tr> <td class="h" > <a name="1021">1021</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1022">1022</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1023">1023</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1024">1024</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item line ([FIELD]) </td> </tr> <tr> <td class="h" > <a name="1025">1025</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1026">1026</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Returns the line number of FIELD. If the entry was parsed from a string, </td> </tr> <tr> <td class="h" > <a name="1027">1027</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> this still works--it's just the line number relative to the start of the </td> </tr> <tr> <td class="h" > <a name="1028">1028</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> string. If the entry was parsed from a file, this works just as you'd </td> </tr> <tr> <td class="h" > <a name="1029">1029</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> expect it to: it returns the absolute line number with respect to the </td> </tr> <tr> <td class="h" > <a name="1030">1030</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> whole file. Line numbers are one-based. </td> </tr> <tr> <td class="h" > <a name="1031">1031</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1032">1032</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> If FIELD is not supplied, returns a two-element list containing the line </td> </tr> <tr> <td class="h" > <a name="1033">1033</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> numbers of the beginning and end of the whole entry. (Actually, the </td> </tr> <tr> <td class="h" > <a name="1034">1034</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "end" line number is currently inaccurate: it's really the the line </td> </tr> <tr> <td class="h" > <a name="1035">1035</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> number of the last field in the entry. But it's better than nothing.) </td> </tr> <tr> <td class="h" > <a name="1036">1036</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1037">1037</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="1038">1038</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1039">1039</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub line </td> </tr> <tr> <td class="h" > <a name="1040">1040</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="1041">1041</a> </td> <td class="c3" > 6 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#1041-1"> 6 </a> </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#1041-1"> 1 </a> </td> <td > 8 </td> <td class="s"> my ($self, $field) = @_; </td> </tr> <tr> <td class="h" > <a name="1042">1042</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1043">1043</a> </td> <td class="c3" > 6 </td> <td class="c0" > <a href="blib-lib-Text-BibTeX-Entry-pm--branch.html#1043-1"> 50 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td > 11 </td> <td class="s"> if (defined $field) </td> </tr> <tr> <td class="h" > <a name="1044">1044</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="1045">1045</a> </td> <td class="c3" > 6 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 20 </td> <td class="s"> return $self->{'lines'}{$field}; </td> </tr> <tr> <td class="h" > <a name="1046">1046</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1047">1047</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> else </td> </tr> <tr> <td class="h" > <a name="1048">1048</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="1049">1049</a> </td> <td class="c0" > <a href="# "> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s"> return @{$self->{'lines'}}{'START','STOP'}; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c0" > 0 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 0 </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1050">1050</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1051">1051</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1052">1052</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1053">1053</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item filename () </td> </tr> <tr> <td class="h" > <a name="1054">1054</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1055">1055</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Returns the name of the file from which the entry was parsed. Only </td> </tr> <tr> <td class="h" > <a name="1056">1056</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> works if the file is represented by a C<Text::BibTeX::File> object---if </td> </tr> <tr> <td class="h" > <a name="1057">1057</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> you just passed a filename/filehandle pair to C<parse>, you can't get </td> </tr> <tr> <td class="h" > <a name="1058">1058</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> the filename back. (Sorry.) </td> </tr> <tr> <td class="h" > <a name="1059">1059</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1060">1060</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="1061">1061</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1062">1062</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub filename </td> </tr> <tr> <td class="h" > <a name="1063">1063</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> { </td> </tr> <tr> <td class="h" > <a name="1064">1064</a> </td> <td class="c3" > 6 </td> <td >   </td> <td >   </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#1064-1"> 6 </a> </td> <td class="c3" > <a href="blib-lib-Text-BibTeX-Entry-pm--subroutine.html#1064-1"> 1 </a> </td> <td > 10 </td> <td class="s"> my $self = shift; </td> </tr> <tr> <td class="h" > <a name="1065">1065</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1066">1066</a> </td> <td class="c3" > 6 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td > 20 </td> <td class="s"> $self->{'file'}{'filename'}; # ooh yuck -- poking into File object </td> </tr> <tr> <td class="h" > <a name="1067">1067</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="1068">1068</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1069">1069</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 1; </td> </tr> <tr> <td class="h" > <a name="1070">1070</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1071">1071</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="1072">1072</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1073">1073</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head1 SEE ALSO </td> </tr> <tr> <td class="h" > <a name="1074">1074</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1075">1075</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> L<Text::BibTeX>, L<Text::BibTeX::File>, L<Text::BibTeX::Structure> </td> </tr> <tr> <td class="h" > <a name="1076">1076</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1077">1077</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head1 AUTHOR </td> </tr> <tr> <td class="h" > <a name="1078">1078</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1079">1079</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Greg Ward <gward@python.net> </td> </tr> <tr> <td class="h" > <a name="1080">1080</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1081">1081</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head1 COPYRIGHT </td> </tr> <tr> <td class="h" > <a name="1082">1082</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1083">1083</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Copyright (c) 1997-2000 by Gregory P. Ward. All rights reserved. This file </td> </tr> <tr> <td class="h" > <a name="1084">1084</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> is part of the Text::BibTeX library. This library is free software; you </td> </tr> <tr> <td class="h" > <a name="1085">1085</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> may redistribute it and/or modify it under the same terms as Perl itself. </td> </tr> <tr> <td class="h" > <a name="1086">1086</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="1087">1087</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> </table> </body> </html>