Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[RFC] Data::Counter

0 views
Skip to first unread message

shanle...@gmail.com

unread,
May 8, 2008, 10:42:44 AM5/8/08
to
Hello all -
I've written a new module called Pretty::Table that I'm planning to
put on CPAN. Take a look at the documentation and tell me what you
think, thanks.

=head1 NAME

C<Pretty::Table> - to print pretty text table

=head1 Example

use Pretty::Table;

my $pt = Pretty::Table->new(
data_type => 'row', #row mode
data_format => 'ucfirst', #upper char
if_multi_lines => 1, #enable multi-lines mode
max_col_length => 10, #set max_col_length to 10
);

my $dr = [
['id','name','sex','age','email'],
['01','tommy','male',27],
['02','jarry','male',26],
['03','shanleiguang',26,'shanle...@gmail.com'],
];

$pt->set_data_ref($dr);
$pt->set_title('Contacts');
$pt->set_align('left');
$pt->set_data_format('ucfirst');
$pt->insert(['05','jackie','male',27,'ja...@somedoain.com']);
$pt->insert(['04','marry','female',26], 4);
print $pt->output();

$pt->set_data_type('col');
$pt->set_deco_cross('*');
$pt->set_if_has_title(0);
print $pt->output();

=head1 Example Output

+---------------------------------------------+
| Contacts |
+----+------------+--------+-----+------------+
| id | name | sex | age | email |
+----+------------+--------+-----+------------+
| 01 | tommy | male | 27 | |
+----+------------+--------+-----+------------+
| 02 | jarry | male | 26 | |
+----+------------+--------+-----+------------+
| 03 | shanleigua | male | 26 | shanleigua |
| | ng | | | ng@gmail.c |
| | | | | om |
+----+------------+--------+-----+------------+
| 04 | marry | female | 26 | |
+----+------------+--------+-----+------------+

*-------*-------*-------*------------*--------*
| id | 01 | 02 | 03 | 04 |
*-------*-------*-------*------------*--------*
| name | tommy | jarry | shanleigua | marry |
| | | | ng | |
*-------*-------*-------*------------*--------*
| sex | male | male | male | female |
*-------*-------*-------*------------*--------*
| age | 27 | 26 | 26 | 26 |
*-------*-------*-------*------------*--------*
| email | | | shanleigua | |
| | | | ng@gmail.c | |
| | | | om | |
*-------*-------*-------*------------*--------*

=head2 Methods

=over

=item C<Pretty::Table-E<gt>set_data_type(<'row'|'col']>)

my $dr = [
['id','name','sex','age'], #be a 'row' or a 'col'
[...],
];

=item C<Pretty::Table-
E<gt>set_data_format(<'normal'|'uc'|'lc'|'ucfirst'>)

normal - default, not format
uc - upper character
lc - lower character
ucfirst - upper first character

=item C<Pretty::Table-E<gt>set_data_ref(<$dr>)

$dr is a 2D ArrayRef
my $dr = [
['id','name','sex','age'], #be a 'row' or a 'col'
[...],
];

=item C<Pretty::Table-E<gt>set_if_has_title(<1|0>)

if has table header title, default is 1

=item C<Pretty::Table-E<gt>set_title(<$title>)

default is __PACKAGE__ (Pretty::Table)

=item C<Pretty::Table-E<gt>set_indent(<$indent>)

default is 2

=item C<Pretty::Table-E<gt>set_align(<'left'|'center'|'right'>)

default is 'left'

=item C<Pretty::Table-E<gt>set_margin_left(<$margin_left>)

default is 1, no need to change

=item C<Pretty::Table-E<gt>set_margin_right(<$margin_right>)

default is 1, no need to change

=item C<Pretty::Table-E<gt>set_deco_horizontal(<$deco_h>)

default is '|', no need to change

=item C<Pretty::Table-E<gt>set_deco_vertical(<$deco_v>)

default is '-', no need to change

=item C<Pretty::Table-E<gt>set_deco_cross(<$deco_c>)

default is '+', '*' is also pretty

=item C<Pretty::Table-E<gt>set_empty_fill(<$empty_fill>)

default is ' '(space), no need to change

=item C<Pretty::Table-E<gt>set_if_multi_lines(<1|0>)

default is 1, enable multi-lines mode

=item C<Pretty::Table-E<gt>set_max_col_length(<$max_col_length>)

default is 40, 'if_multi_lines' must enabled

=back

=head1 AUTHOR

Shan LeiGuang E<lt>shanle...@gmail.comE<gt>

=cut

Darin McBride

unread,
May 8, 2008, 11:23:03 AM5/8/08
to
shanle...@gmail.com wrote:

> Hello all -
> I've written a new module called Pretty::Table that I'm planning to
> put on CPAN. Take a look at the documentation and tell me what you
> think, thanks.

It looks awfully similar to Text::Table... :-) I don't personally have any
issue with multiple ways to do things, but I'd suggest at least putting in
your POD an explanation of why someone may prefer your module over
Text::Table (and why anyone may prefer Text::Table over your module).

0 new messages