NAME Data::PrintUtils - A Collection of Pretty Print routines like Data::Dumper VERSION Version 0.09 SYNOPSIS Provides a collection of pretty print routines PURPOSE This module is meant to provide some Data::Dumper like print routines tailored to DBI style tables and hashes along with some debug options EXPORT print_pid say_pid formatList formatOneLineHash formatHash formatTable pivotTable joinTable $USE_PIDS $USE_TIME SUBROUTINES/METHODS print_pid A replacement for print that will optionally prepend the processID and the timestamp to a line These two fields are turned off/on with the package variables: $Data::PrintUtils::USE_PIDS = 1 or 0; $Data::PrintUtils::USE_TIME = 1 or 0; say_pid A replacement for say that will optionally prepend the processID and the timestamp to a line These two fields are turned off/on with the package variables: $Data::PrintUtils::USE_PIDS = 1 or 0; $Data::PrintUtils::USE_TIME = 1 or 0; formatList Formats a list as a single line of comma seperated values in '(' ')' An optional hash may be passed as the first argument to configure the following: LIST_START => "(", # The String denoting the start of the list LIST_END => ")", # The String denoting the end of the list ELEMENT_SEPARATOR => ", ", # The String seperating elements of the list Note that these means that the unadorned list may not start with a hash ref :( formatOneLineHash Formats a hash as a single line of => and comma separated values in '{' '}' The hash to be printed is passed as a reference in the first parameter The rest of the arguments are parsed as options in Getopt::CommandLineExports format: PRIMARY_KEY_ORDER => undef, # ordering for the has keys (undef means undefined perl ordering) HASH_START => "{", # String denoting the start of the hash HASH_END => "}", # String denoting the end of the hash ELEMENT_SEPARATOR => ", ", # String seperating the key/value pairs of the hash KEY_VALUE_SEPARATOR => " => ",# String seperating the keys and the values of the hash UNDEF_VALUE => "undef", # String to print if the value of the hash is undefined or if the key does not exist, but does in the PRIMARY_KEY_ORDER NOTEXIST_VALUE => "notExist", # String to print if the key does not exist, but does in the PRIMARY_KEY_ORDER formatHash Formats a Hash with one level deep expansion Each key/value pair is a single line that may be justified right or left for prettiness KEY_JUSTIFCATION => 'Right', # justifcation (Right or Left) for the key column VALUE_JUSTIFICATION => 'Left', # justifcation (Right or Left) for the Value column MAX_KEY_WIDTH => 10000, # maximum column width for the key column MAX_VALUE_WIDTH => 10000, # maximum column width for the Value column PRIMARY_KEY_ORDER => undef, # ordering for the hash keys (undef means undefined perl ordering) SECONDARY_KEY_ORDER => undef, # ordering for the hash keys of any sub keys (undef means undefined perl ordering) KEY_VALUE_SEPARATOR => " => ",# String seperating the keys and the values of the hash UNDEF_VALUE => "undef", # String to print if the value of the hash is undefined or if the key does not exist, but does in the PRIMARY_KEY_ORDER NOTEXIST_VALUE => "notExist", # String to print if the key does not exist, but does in the PRIMARY_KEY_ORDER formatTable Formats a table (given as an array of hash references (as returned from DBI) ) into a somewhat pleasant display. With the Columns argument, you can chose to only print a subset of the columns (and you can define the column ordering). ROWS This is a reference to the table (which should be an array of hashes refs) COLUMNS This is a list of columns (in order) to be displayed UNDEF_VALUE This is a string value to be displayed whenever an item is "undefined" pivotTable pivots an attribute-value table (given as an array of hash references (as returned from DBI) ) into a new table with a row for each unique PIVOT_KEY and a column for each attribute example: my @table = ( {COL1 => 1, Name => 'PID', VALUE => '1a', XTRA1 => '111'}, {COL1 => 1, Name => 'SID', VALUE => 's1', XTRA1 => '112'}, {COL1 => 1, Name => 'XV1', VALUE => 'YY', XTRA1 => '116'}, {COL1 => 1, Name => 'XV2', VALUE => 'XX', XTRA1 => '117'}, {COL1 => 2, Name => 'PID', VALUE => '2a', XTRA1 => '221'}, {COL1 => 2, Name => 'SID', VALUE => 's2', XTRA1 => '222'}, {COL1 => 2, Name => 'XV2', VALUE => 'XX2', XTRA1 => '224'}, ); my @newTable1 = pivotTable { ROWS => \@table, PIVOT_KEY => 'COL1', VALUE_HEADER_KEY=> 'Name', VALUE_KEY => 'VALUE'}; say formatTable { ROWS => \@newTable1, UNDEF_VALUE => 'NULL'} if @newTable1; results in COL1 PID SID XV1 XV2 1 1a s1 YY XX 2 2a s2 NULL XX2 example: my @table = ( {COL1 => 1, Name => 'PID', VALUE => '1a', XTRA1 => '111'}, {COL1 => 1, Name => 'SID', VALUE => 's1', XTRA1 => '112'}, {COL1 => 1, Name => 'XV1', VALUE => 'YY', XTRA1 => '116'}, {COL1 => 1, Name => 'XV1', VALUE => 'ZZ', XTRA1 => '116'}, {COL1 => 1, Name => 'XV2', VALUE => 'XX', XTRA1 => '117'}, {COL1 => 2, Name => 'PID', VALUE => '2a', XTRA1 => '221'}, {COL1 => 2, Name => 'SID', VALUE => 's2', XTRA1 => '222'}, {COL1 => 2, Name => 'XV2', VALUE => 'XX2', XTRA1 => '224'}, ); my @newTable1 = pivotTable { ROWS => \@table, PIVOT_KEY => 'COL1', VALUE_HEADER_KEY=> 'Name', VALUE_KEY => 'VALUE', CONCAT_DUPLICATE => 1}; say formatTable { ROWS => \@newTable1, UNDEF_VALUE => 'NULL'} if @newTable1; results in COL1 PID SID XV1 XV2 1 1a s1 YY | ZZ XX 2 2a s2 NULL XX2 joinTable creates a new table that is either the simple equijoin of the left and right table, or, if LEFT_JOIN_KEY_UNIQUE is set, then Joins the Right Table to the Left Table (all rows of the left table are included) AUTHOR Robert Haxton, "" BUGS Please report any bugs or feature requests to "bug-Data-printutils at rt.cpan.org", or through the web interface at . I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. SUPPORT You can find documentation for this module with the perldoc command. perldoc Data::PrintUtils You can also look for information at: * RT: CPAN's request tracker (report bugs here) * AnnoCPAN: Annotated CPAN documentation * CPAN Ratings * Search CPAN * Code Repository ACKNOWLEDGEMENTS LICENSE AND COPYRIGHT Copyright 2008-2011 Robert Haxton. This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License. See http://dev.perl.org/licenses/ for more information.