The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# Copyright (c) 1995-2003 Nick Ing-Simmons. All rights reserved.
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
package Tk::Pretty;
require Exporter;

use vars qw($VERSION @EXPORT);
$VERSION = '4.006'; # $Id: //depot/Tkutf8/Tk/Pretty.pm#6 $

use base  qw(Exporter);

@EXPORT = qw(Pretty PrintArgs);

sub pretty_list
{
 join(',',map(&Pretty($_),@_));
}

sub Pretty
{
 return pretty_list(@_) if (@_ > 1);
 my $obj = shift;
 return 'undef' unless defined($obj);
 my $type = "$obj";
 return $type if ($type =~ /=HASH/ && exists($obj->{"_Tcl_CmdInfo_\0"}));
 my $result = '';
 if (ref $obj)
  {
   my $class;
   if ($type =~ /^([^=]+)=(.*)$/)
    {
     $class = $1;
     $type  = $2;
     $result .= 'bless(';
    }
   if ($type =~ /^ARRAY/)
    {
     $result .= '[';
     $result .= pretty_list(@$obj);
     $result .= ']';
    }
   elsif ($type =~ /^HASH/)
    {
     $result .= '{';
     if (%$obj)
      {
       my ($key, $value);
       while (($key,$value) = each %$obj)
        {
         $result .= $key . '=>' . Pretty($value) . ',';
        }
       chop($result);
      }
     $result .= '}';
    }
   elsif ($type =~ /^REF/)
    {
     $result .= "\\" . Pretty($$obj);
    }
   elsif ($type =~ /^SCALAR/)
    {
     $result .= Pretty($$obj);
    }
   else
    {
     $result .= $type;
    }
   $result .= ",$class)" if (defined $class);
  }
 else
  {
   if ($obj =~ /^-?[0-9]+(.[0-9]*(e[+-][0-9]+)?)?$/ ||
       $obj =~ /^[A-Z_][A-Za-z_0-9]*$/ ||
       $obj =~ /^[a-z_][A-Za-z_0-9]*[A-Z_][A-Za-z_0-9]*$/
      )
    {
     $result .= $obj;
    }
   else
    {
     $result .= "'" . $obj . "'";
    }
  }
 return $result;
}

sub PrintArgs
{
 my $name = (caller(1))[3];
 print "$name(",Pretty(@_),")\n";
}

1;