The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
NAME
    Data::PrintUtils - A Collection of Pretty Print routines like
    Data::Dumper

VERSION
    Version 0.11

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, "<robert.haxton at gmail.com>"

BUGS
    Please report any bugs or feature requests to "bug-Data-printutils at
    rt.cpan.org", or through the web interface at
    <http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Data-PrintUtils>. 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)

        <http://rt.cpan.org/NoAuth/Bugs.html?Dist=Data-PrintUtils>

    *   AnnoCPAN: Annotated CPAN documentation

        <http://annocpan.org/dist/Data-PrintUtils>

    *   CPAN Ratings

        <http://cpanratings.perl.org/d/Data-PrintUtils>

    *   Search CPAN

        <http://search.cpan.org/dist/Data-PrintUtils/>

    *   Code Repository

        <https://code.google.com/p/data-printutils/>

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.