| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995 |
- # DISCLAIMER OF WARRANTY
- # Because this software is licensed free of charge, there is no warranty for the software,
- # to the extent permitted by applicable law. Except when otherwise stated in writing
- # the copyright holders and/or other parties provide the software "as is" without
- # warranty of any kind, either expressed or implied, including, but not limited to,
- # the implied warranties of merchantability and fitness for a particular purpose.
- # The entire risk as to the quality and performance of the software is with you.
- # Should the software prove defective, you assume the cost of all necessary
- # servicing, repair, or correction.
- # In no event unless required by applicable law or agreed to in writing will any
- # copyright holder, or any other party who may modify and/or redistribute the software
- # as permitted by the above licence, be liable to you for damages, including any general,
- # special, incidental, or consequential damages arising out of the use or inability
- # to use the software (including but not limited to loss of data or data being rendered
- # inaccurate or losses sustained by you or third parties or a failure of the software
- # to operate with any other software), even if such holder or other party
- # has been advised of the possibility of such damages.
- # AUTHOR
- # Current maintainer 0.40+: John McNamara jmcnamara@cpan.org
- # Maintainer 0.27-0.33: Gabor Szabo szabgab@cpan.org
- # Original author: Kawai Takanori (Hippo2000) kwitknr@cpan.org
- # COPYRIGHT
- # Copyright (c) 2009-2010 John McNamara
- # Copyright (c) 2006-2008 Gabor Szabo
- # Copyright (c) 2000-2006 Kawai Takanori
- # All rights reserved. This is free software. You may distribute under the terms of
- # the Artistic License(full text of the Artistic License http://dev.perl.org/licenses/artistic.html).
- package Spreadsheet::ParseExcel::Worksheet;
- ###############################################################################
- #
- # Spreadsheet::ParseExcel::Worksheet - A class for Worksheets.
- #
- # Used in conjunction with Spreadsheet::ParseExcel.
- #
- # Copyright (c) 2009 John McNamara
- # Copyright (c) 2006-2008 Gabor Szabo
- # Copyright (c) 2000-2006 Kawai Takanori
- #
- # perltidy with standard settings.
- #
- # Documentation after __END__
- #
- use strict;
- use warnings;
- use Scalar::Util qw(weaken);
- our $VERSION = '0.57';
- ###############################################################################
- #
- # new()
- #
- sub new {
- my ( $class, %properties ) = @_;
- my $self = \%properties;
- weaken $self->{_Book};
- $self->{Cells} = undef;
- $self->{DefColWidth} = 8.43;
- return bless $self, $class;
- }
- ###############################################################################
- #
- # get_cell( $row, $col )
- #
- # Returns the Cell object at row $row and column $col, if defined.
- #
- sub get_cell {
- my ( $self, $row, $col ) = @_;
- if ( !defined $row
- || !defined $col
- || !defined $self->{MaxRow}
- || !defined $self->{MaxCol} )
- {
- # Return undef if no arguments are given or if no cells are defined.
- return undef;
- }
- elsif ($row < $self->{MinRow}
- || $row > $self->{MaxRow}
- || $col < $self->{MinCol}
- || $col > $self->{MaxCol} )
- {
- # Return undef if outside allowable row/col range.
- return undef;
- }
- else {
- # Return the Cell object.
- return $self->{Cells}->[$row]->[$col];
- }
- }
- ###############################################################################
- #
- # row_range()
- #
- # Returns a two-element list ($min, $max) containing the minimum and maximum
- # defined rows in the worksheet.
- #
- # If there is no row defined $max is smaller than $min.
- #
- sub row_range {
- my $self = shift;
- my $min = $self->{MinRow} || 0;
- my $max = defined( $self->{MaxRow} ) ? $self->{MaxRow} : ( $min - 1 );
- return ( $min, $max );
- }
- ###############################################################################
- #
- # col_range()
- #
- # Returns a two-element list ($min, $max) containing the minimum and maximum
- # defined cols in the worksheet.
- #
- # If there is no column defined $max is smaller than $min.
- #
- sub col_range {
- my $self = shift;
- my $min = $self->{MinCol} || 0;
- my $max = defined( $self->{MaxCol} ) ? $self->{MaxCol} : ( $min - 1 );
- return ( $min, $max );
- }
- ###############################################################################
- #
- # get_name()
- #
- # Returns the name of the worksheet.
- #
- sub get_name {
- my $self = shift;
- return $self->{Name};
- }
- ###############################################################################
- #
- # sheet_num()
- #
- sub sheet_num {
- my $self = shift;
- return $self->{_SheetNo};
- }
- ###############################################################################
- #
- # get_h_pagebreaks()
- #
- # Returns an array ref of row numbers where a horizontal page break occurs.
- #
- sub get_h_pagebreaks {
- my $self = shift;
- return $self->{HPageBreak};
- }
- ###############################################################################
- #
- # get_v_pagebreaks()
- #
- # Returns an array ref of column numbers where a vertical page break occurs.
- #
- sub get_v_pagebreaks {
- my $self = shift;
- return $self->{VPageBreak};
- }
- ###############################################################################
- #
- # get_merged_areas()
- #
- # Returns an array ref of cells that are merged.
- #
- sub get_merged_areas {
- my $self = shift;
- return $self->{MergedArea};
- }
- ###############################################################################
- #
- # get_row_heights()
- #
- # Returns an array_ref of row heights.
- #
- sub get_row_heights {
- my $self = shift;
- return @{ $self->{RowHeight} };
- }
- ###############################################################################
- #
- # get_col_widths()
- #
- # Returns an array_ref of column widths.
- #
- sub get_col_widths {
- my $self = shift;
- return @{ $self->{ColWidth} };
- }
- ###############################################################################
- #
- # get_default_row_height()
- #
- # Returns the default row height for the worksheet. Generally 12.75.
- #
- sub get_default_row_height {
- my $self = shift;
- return $self->{DefRowHeight};
- }
- ###############################################################################
- #
- # get_default_col_width()
- #
- # Returns the default column width for the worksheet. Generally 8.43.
- #
- sub get_default_col_width {
- my $self = shift;
- return $self->{DefColWidth};
- }
- ###############################################################################
- #
- # _get_row_properties()
- #
- # Returns an array_ref of row properties.
- # TODO. This is a placeholder for a future method.
- #
- sub _get_row_properties {
- my $self = shift;
- return $self->{RowProperties};
- }
- ###############################################################################
- #
- # _get_col_properties()
- #
- # Returns an array_ref of column properties.
- # TODO. This is a placeholder for a future method.
- #
- sub _get_col_properties {
- my $self = shift;
- return $self->{ColProperties};
- }
- ###############################################################################
- #
- # get_header()
- #
- # Returns the worksheet header string.
- #
- sub get_header {
- my $self = shift;
- return $self->{Header};
- }
- ###############################################################################
- #
- # get_footer()
- #
- # Returns the worksheet footer string.
- #
- sub get_footer {
- my $self = shift;
- return $self->{Footer};
- }
- ###############################################################################
- #
- # get_margin_left()
- #
- # Returns the left margin of the worksheet in inches.
- #
- sub get_margin_left {
- my $self = shift;
- return $self->{LeftMargin};
- }
- ###############################################################################
- #
- # get_margin_right()
- #
- # Returns the right margin of the worksheet in inches.
- #
- sub get_margin_right {
- my $self = shift;
- return $self->{RightMargin};
- }
- ###############################################################################
- #
- # get_margin_top()
- #
- # Returns the top margin of the worksheet in inches.
- #
- sub get_margin_top {
- my $self = shift;
- return $self->{TopMargin};
- }
- ###############################################################################
- #
- # get_margin_bottom()
- #
- # Returns the bottom margin of the worksheet in inches.
- #
- sub get_margin_bottom {
- my $self = shift;
- return $self->{BottomMargin};
- }
- ###############################################################################
- #
- # get_margin_header()
- #
- # Returns the header margin of the worksheet in inches.
- #
- sub get_margin_header {
- my $self = shift;
- return $self->{HeaderMargin};
- }
- ###############################################################################
- #
- # get_margin_footer()
- #
- # Returns the footer margin of the worksheet in inches.
- #
- sub get_margin_footer {
- my $self = shift;
- return $self->{FooterMargin};
- }
- ###############################################################################
- #
- # get_paper()
- #
- # Returns the printer paper size.
- #
- sub get_paper {
- my $self = shift;
- return $self->{PaperSize};
- }
- ###############################################################################
- #
- # get_start_page()
- #
- # Returns the page number that printing will start from.
- #
- sub get_start_page {
- my $self = shift;
- # Only return the page number if the "First page number" option is set.
- if ( $self->{UsePage} ) {
- return $self->{PageStart};
- }
- else {
- return 0;
- }
- }
- ###############################################################################
- #
- # get_print_order()
- #
- # Returns the Worksheet page printing order.
- #
- sub get_print_order {
- my $self = shift;
- return $self->{LeftToRight};
- }
- ###############################################################################
- #
- # get_print_scale()
- #
- # Returns the workbook scale for printing.
- #
- sub get_print_scale {
- my $self = shift;
- return $self->{Scale};
- }
- ###############################################################################
- #
- # get_fit_to_pages()
- #
- # Returns the number of pages wide and high that the printed worksheet page
- # will fit to.
- #
- sub get_fit_to_pages {
- my $self = shift;
- if ( !$self->{PageFit} ) {
- return ( 0, 0 );
- }
- else {
- return ( $self->{FitWidth}, $self->{FitHeight} );
- }
- }
- ###############################################################################
- #
- # is_portrait()
- #
- # Returns true if the worksheet has been set for printing in portrait mode.
- #
- sub is_portrait {
- my $self = shift;
- return $self->{Landscape};
- }
- ###############################################################################
- #
- # is_centered_horizontally()
- #
- # Returns true if the worksheet has been centered horizontally for printing.
- #
- sub is_centered_horizontally {
- my $self = shift;
- return $self->{HCenter};
- }
- ###############################################################################
- #
- # is_centered_vertically()
- #
- # Returns true if the worksheet has been centered vertically for printing.
- #
- sub is_centered_vertically {
- my $self = shift;
- return $self->{HCenter};
- }
- ###############################################################################
- #
- # is_print_gridlines()
- #
- # Returns true if the worksheet print "gridlines" option is turned on.
- #
- sub is_print_gridlines {
- my $self = shift;
- return $self->{PrintGrid};
- }
- ###############################################################################
- #
- # is_print_row_col_headers()
- #
- # Returns true if the worksheet print "row and column headings" option is on.
- #
- sub is_print_row_col_headers {
- my $self = shift;
- return $self->{PrintHeaders};
- }
- ###############################################################################
- #
- # is_print_black_and_white()
- #
- # Returns true if the worksheet print "black and white" option is turned on.
- #
- sub is_print_black_and_white {
- my $self = shift;
- return $self->{NoColor};
- }
- ###############################################################################
- #
- # is_print_draft()
- #
- # Returns true if the worksheet print "draft" option is turned on.
- #
- sub is_print_draft {
- my $self = shift;
- return $self->{Draft};
- }
- ###############################################################################
- #
- # is_print_comments()
- #
- # Returns true if the worksheet print "comments" option is turned on.
- #
- sub is_print_comments {
- my $self = shift;
- return $self->{Notes};
- }
- ###############################################################################
- #
- # Mapping between legacy method names and new names.
- #
- {
- no warnings; # Ignore warnings about variables used only once.
- *sheetNo = *sheet_num;
- *Cell = *get_cell;
- *RowRange = *row_range;
- *ColRange = *col_range;
- }
- 1;
- __END__
- =pod
- =head1 NAME
- Spreadsheet::ParseExcel::Worksheet - A class for Worksheets.
- =head1 SYNOPSIS
- See the documentation for L<Spreadsheet::ParseExcel>.
- =head1 DESCRIPTION
- This module is used in conjunction with Spreadsheet::ParseExcel. See the documentation for Spreadsheet::ParseExcel.
- =head1 Methods
- The C<Spreadsheet::ParseExcel::Worksheet> class encapsulates the properties of an Excel worksheet. It has the following methods:
- $worksheet->get_cell()
- $worksheet->row_range()
- $worksheet->col_range()
- $worksheet->get_name()
- $worksheet->get_h_pagebreaks()
- $worksheet->get_v_pagebreaks()
- $worksheet->get_merged_areas()
- $worksheet->get_row_heights()
- $worksheet->get_col_widths()
- $worksheet->get_default_row_height()
- $worksheet->get_default_col_width()
- $worksheet->get_header()
- $worksheet->get_footer()
- $worksheet->get_margin_left()
- $worksheet->get_margin_right()
- $worksheet->get_margin_top()
- $worksheet->get_margin_bottom()
- $worksheet->get_margin_header()
- $worksheet->get_margin_footer()
- $worksheet->get_paper()
- $worksheet->get_start_page()
- $worksheet->get_print_order()
- $worksheet->get_print_scale()
- $worksheet->get_fit_to_pages()
- $worksheet->is_portrait()
- $worksheet->is_centered_horizontally()
- $worksheet->is_centered_vertically()
- $worksheet->is_print_gridlines()
- $worksheet->is_print_row_col_headers()
- $worksheet->is_print_black_and_white()
- $worksheet->is_print_draft()
- $worksheet->is_print_comments()
- =head2 get_cell($row, $col)
- Return the L</Cell> object at row C<$row> and column C<$col> if it is defined. Otherwise returns undef.
- my $cell = $worksheet->get_cell($row, $col);
- =head2 row_range()
- Returns a two-element list C<($min, $max)> containing the minimum and maximum defined rows in the worksheet. If there is no row defined C<$max> is smaller than C<$min>.
- my ( $row_min, $row_max ) = $worksheet->row_range();
- =head2 col_range()
- Returns a two-element list C<($min, $max)> containing the minimum and maximum of defined columns in the worksheet. If there is no column defined C<$max> is smaller than C<$min>.
- my ( $col_min, $col_max ) = $worksheet->col_range();
- =head2 col_range()
- The C<col_range()> method returns TODO.
- my $col_range = $worksheet->col_range();
- Returns 0 if the property isn't set.
- =head2 get_name()
- The C<get_name()> method returns the name of the worksheet.
- my $name = $worksheet->get_name();
- =head2 get_h_pagebreaks()
- The C<get_h_pagebreaks()> method returns an array ref of row numbers where a horizontal page break occurs.
- my $h_pagebreaks = $worksheet->get_h_pagebreaks();
- Returns C<undef> if there are no pagebreaks.
- =head2 get_v_pagebreaks()
- The C<get_v_pagebreaks()> method returns an array ref of column numbers where a vertical page break occurs.
- my $v_pagebreaks = $worksheet->get_v_pagebreaks();
- Returns C<undef> if there are no pagebreaks.
- =head2 get_merged_areas()
- The C<get_merged_areas()> method returns an array ref of cells that are merged.
- my $merged_areas = $worksheet->get_merged_areas();
- Each merged area is represented as follows:
- [ $start_row, $start_col, $end_row, $end_col]
- Returns C<undef> if there are no merged areas.
- =head2 get_row_heights()
- The C<get_row_heights()> method returns an array_ref of row heights.
- my $row_heights = $worksheet->get_row_heights();
- Returns C<undef> if the property isn't set.
- =head2 get_col_widths()
- The C<get_col_widths()> method returns an array_ref of column widths.
- my $col_widths = $worksheet->get_col_widths();
- Returns C<undef> if the property isn't set.
- =head2 get_default_row_height()
- The C<get_default_row_height()> method returns the default row height for the worksheet. Generally 12.75.
- my $default_row_height = $worksheet->get_default_row_height();
- =head2 get_default_col_width()
- The C<get_default_col_width()> method returns the default column width for the worksheet. Generally 8.43.
- my $default_col_width = $worksheet->get_default_col_width();
- =head2 get_header()
- The C<get_header()> method returns the worksheet header string. This string can contain control codes for alignment and font properties. Refer to the Excel on-line help on headers and footers or to the Spreadsheet::WriteExcel documentation for set_header().
- my $header = $worksheet->get_header();
- Returns C<undef> if the property isn't set.
- =head2 get_footer()
- The C<get_footer()> method returns the worksheet footer string. This string can contain control codes for alignment and font properties. Refer to the Excel on-line help on headers and footers or to the Spreadsheet::WriteExcel documentation for set_header().
- my $footer = $worksheet->get_footer();
- Returns C<undef> if the property isn't set.
- =head2 get_margin_left()
- The C<get_margin_left()> method returns the left margin of the worksheet in inches.
- my $margin_left = $worksheet->get_margin_left();
- Returns C<undef> if the property isn't set.
- =head2 get_margin_right()
- The C<get_margin_right()> method returns the right margin of the worksheet in inches.
- my $margin_right = $worksheet->get_margin_right();
- Returns C<undef> if the property isn't set.
- =head2 get_margin_top()
- The C<get_margin_top()> method returns the top margin of the worksheet in inches.
- my $margin_top = $worksheet->get_margin_top();
- Returns C<undef> if the property isn't set.
- =head2 get_margin_bottom()
- The C<get_margin_bottom()> method returns the bottom margin of the worksheet in inches.
- my $margin_bottom = $worksheet->get_margin_bottom();
- Returns C<undef> if the property isn't set.
- =head2 get_margin_header()
- The C<get_margin_header()> method returns the header margin of the worksheet in inches.
- my $margin_header = $worksheet->get_margin_header();
- Returns a default value of 0.5 if not set.
- =head2 get_margin_footer()
- The C<get_margin_footer()> method returns the footer margin of the worksheet in inches.
- my $margin_footer = $worksheet->get_margin_footer();
- Returns a default value of 0.5 if not set.
- =head2 get_paper()
- The C<get_paper()> method returns the printer paper size.
- my $paper = $worksheet->get_paper();
- The value corresponds to the formats shown below:
- Index Paper format Paper size
- ===== ============ ==========
- 0 Printer default -
- 1 Letter 8 1/2 x 11 in
- 2 Letter Small 8 1/2 x 11 in
- 3 Tabloid 11 x 17 in
- 4 Ledger 17 x 11 in
- 5 Legal 8 1/2 x 14 in
- 6 Statement 5 1/2 x 8 1/2 in
- 7 Executive 7 1/4 x 10 1/2 in
- 8 A3 297 x 420 mm
- 9 A4 210 x 297 mm
- 10 A4 Small 210 x 297 mm
- 11 A5 148 x 210 mm
- 12 B4 250 x 354 mm
- 13 B5 182 x 257 mm
- 14 Folio 8 1/2 x 13 in
- 15 Quarto 215 x 275 mm
- 16 - 10x14 in
- 17 - 11x17 in
- 18 Note 8 1/2 x 11 in
- 19 Envelope 9 3 7/8 x 8 7/8
- 20 Envelope 10 4 1/8 x 9 1/2
- 21 Envelope 11 4 1/2 x 10 3/8
- 22 Envelope 12 4 3/4 x 11
- 23 Envelope 14 5 x 11 1/2
- 24 C size sheet -
- 25 D size sheet -
- 26 E size sheet -
- 27 Envelope DL 110 x 220 mm
- 28 Envelope C3 324 x 458 mm
- 29 Envelope C4 229 x 324 mm
- 30 Envelope C5 162 x 229 mm
- 31 Envelope C6 114 x 162 mm
- 32 Envelope C65 114 x 229 mm
- 33 Envelope B4 250 x 353 mm
- 34 Envelope B5 176 x 250 mm
- 35 Envelope B6 176 x 125 mm
- 36 Envelope 110 x 230 mm
- 37 Monarch 3.875 x 7.5 in
- 38 Envelope 3 5/8 x 6 1/2 in
- 39 Fanfold 14 7/8 x 11 in
- 40 German Std Fanfold 8 1/2 x 12 in
- 41 German Legal Fanfold 8 1/2 x 13 in
- 256 User defined
- The two most common paper sizes are C<1 = "US Letter"> and C<9 = A4>. Returns 9 by default.
- =head2 get_start_page()
- The C<get_start_page()> method returns the page number that printing will start from.
- my $start_page = $worksheet->get_start_page();
- Returns 0 if the property isn't set.
- =head2 get_print_order()
- The C<get_print_order()> method returns 0 if the worksheet print "page order" is "Down then over" (the default) or 1 if it is "Over then down".
- my $print_order = $worksheet->get_print_order();
- =head2 get_print_scale()
- The C<get_print_scale()> method returns the workbook scale for printing. The print scale fctor can be in the range 10 .. 400.
- my $print_scale = $worksheet->get_print_scale();
- Returns 100 by default.
- =head2 get_fit_to_pages()
- The C<get_fit_to_pages()> method returns the number of pages wide and high that the printed worksheet page will fit to.
- my ($pages_wide, $pages_high) = $worksheet->get_fit_to_pages();
- Returns (0, 0) if the property isn't set.
- =head2 is_portrait()
- The C<is_portrait()> method returns true if the worksheet has been set for printing in portrait mode.
- my $is_portrait = $worksheet->is_portrait();
- Returns 0 if the worksheet has been set for printing in horizontal mode.
- =head2 is_centered_horizontally()
- The C<is_centered_horizontally()> method returns true if the worksheet has been centered horizontally for printing.
- my $is_centered_horizontally = $worksheet->is_centered_horizontally();
- Returns 0 if the property isn't set.
- =head2 is_centered_vertically()
- The C<is_centered_vertically()> method returns true if the worksheet has been centered vertically for printing.
- my $is_centered_vertically = $worksheet->is_centered_vertically();
- Returns 0 if the property isn't set.
- =head2 is_print_gridlines()
- The C<is_print_gridlines()> method returns true if the worksheet print "gridlines" option is turned on.
- my $is_print_gridlines = $worksheet->is_print_gridlines();
- Returns 0 if the property isn't set.
- =head2 is_print_row_col_headers()
- The C<is_print_row_col_headers()> method returns true if the worksheet print "row and column headings" option is turned on.
- my $is_print_row_col_headers = $worksheet->is_print_row_col_headers();
- Returns 0 if the property isn't set.
- =head2 is_print_black_and_white()
- The C<is_print_black_and_white()> method returns true if the worksheet print "black and white" option is turned on.
- my $is_print_black_and_white = $worksheet->is_print_black_and_white();
- Returns 0 if the property isn't set.
- =head2 is_print_draft()
- The C<is_print_draft()> method returns true if the worksheet print "draft" option is turned on.
- my $is_print_draft = $worksheet->is_print_draft();
- Returns 0 if the property isn't set.
- =head2 is_print_comments()
- The C<is_print_comments()> method returns true if the worksheet print "comments" option is turned on.
- my $is_print_comments = $worksheet->is_print_comments();
- Returns 0 if the property isn't set.
- =head1 AUTHOR
- Maintainer 0.40+: John McNamara jmcnamara@cpan.org
- Maintainer 0.27-0.33: Gabor Szabo szabgab@cpan.org
- Original author: Kawai Takanori kwitknr@cpan.org
- =head1 COPYRIGHT
- Copyright (c) 2009-2010 John McNamara
- Copyright (c) 2006-2008 Gabor Szabo
- Copyright (c) 2000-2006 Kawai Takanori
- All rights reserved.
- You may distribute under the terms of either the GNU General Public License or the Artistic License, as specified in the Perl README file.
- =cut
|