Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package perl-Data-Printer for 
openSUSE:Factory checked in at 2023-01-04 17:54:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Data-Printer (Old)
 and      /work/SRC/openSUSE:Factory/.perl-Data-Printer.new.1563 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-Data-Printer"

Wed Jan  4 17:54:24 2023 rev:7 rq:1055917 version:1.001000

Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-Data-Printer/perl-Data-Printer.changes      
2021-04-12 17:10:27.562571280 +0200
+++ 
/work/SRC/openSUSE:Factory/.perl-Data-Printer.new.1563/perl-Data-Printer.changes
    2023-01-04 17:55:02.375043396 +0100
@@ -1,0 +2,28 @@
+Fri Dec 23 03:07:02 UTC 2022 - Tina Müller <timueller+p...@suse.de>
+
+- updated to 1.001000
+   see /usr/share/doc/packages/perl-Data-Printer/Changes
+
+  1.1.0   2022-12-22
+      NEW FEATURES:
+          - new option 'coderef_stub' letting you customize what to show on
+            non-deparsed coderefs (default: 'sub { ... }')
+          - new option 'coderef_undefined' that checks if a given coderef 
points
+            to an existing reference at the time of inspection. Defaults to
+            '<undefined coderef>'. Set to 0 to disable this check.
+          - basic Object::Pad support.
+          - new option class.show_wrapped to expose methods modified with 
before,
+            after, around (Moose only for now)
+          - new option 'quiet' to avoid traversal and silence all output
+            from p() and np().
+          - new option 'live_update' to reload .dataprinter whenever
+            you make changes to it, applying them without needing to
+            restart your code.
+      BUG FIXES:
+          - properly shows inherited Moo(se) attributes.
+          - fix $@ clobbering when checking available modules.
+          - class.sort_methods also sorts attributes and roles.
+          - improved color reset.
+          - $DDP::VERSION is now hardcoded to avoid issues with PAUSE.
+
+-------------------------------------------------------------------

Old:
----
  Data-Printer-1.000004.tar.gz

New:
----
  Data-Printer-1.001000.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ perl-Data-Printer.spec ++++++
--- /var/tmp/diff_new_pack.SA5ydb/_old  2023-01-04 17:55:02.743045565 +0100
+++ /var/tmp/diff_new_pack.SA5ydb/_new  2023-01-04 17:55:02.751045612 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package perl-Data-Printer
 #
-# Copyright (c) 2021 SUSE LLC
+# Copyright (c) 2022 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,10 +18,10 @@
 
 %define cpan_name Data-Printer
 Name:           perl-Data-Printer
-Version:        1.000004
+Version:        1.001000
 Release:        0
-Summary:        Colored & full-featured pretty print of Perl data structures 
and objects
 License:        Artistic-1.0 OR GPL-1.0-or-later
+Summary:        Colored & full-featured pretty print of Perl data structures 
and objects
 URL:            https://metacpan.org/release/%{cpan_name}
 Source0:        
https://cpan.metacpan.org/authors/id/G/GA/GARU/%{cpan_name}-%{version}.tar.gz
 Source1:        cpanspec.yml

++++++ Data-Printer-1.000004.tar.gz -> Data-Printer-1.001000.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Data-Printer-1.000004/Changes 
new/Data-Printer-1.001000/Changes
--- old/Data-Printer-1.000004/Changes   2021-03-03 23:27:02.000000000 +0100
+++ new/Data-Printer-1.001000/Changes   2022-12-22 05:11:53.559523306 +0100
@@ -1,5 +1,28 @@
 Revision history for Data-Printer
 
+1.1.0   2022-12-22
+    NEW FEATURES:
+        - new option 'coderef_stub' letting you customize what to show on
+          non-deparsed coderefs (default: 'sub { ... }')
+        - new option 'coderef_undefined' that checks if a given coderef points
+          to an existing reference at the time of inspection. Defaults to
+          '<undefined coderef>'. Set to 0 to disable this check.
+        - basic Object::Pad support.
+        - new option class.show_wrapped to expose methods modified with before,
+          after, around (Moose only for now)
+        - new option 'quiet' to avoid traversal and silence all output
+          from p() and np().
+        - new option 'live_update' to reload .dataprinter whenever
+          you make changes to it, applying them without needing to
+          restart your code.
+    BUG FIXES:
+        - properly shows inherited Moo(se) attributes.
+        - fix $@ clobbering when checking available modules.
+        - class.sort_methods also sorts attributes and roles.
+        - improved color reset.
+        - $DDP::VERSION is now hardcoded to avoid issues with PAUSE.
+
+
 1.0.4   2021-03-03
     BUG FIXES:
         - fix DBIx::Class print when literal SQL is present (Veesh Goldman)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Data-Printer-1.000004/MANIFEST 
new/Data-Printer-1.001000/MANIFEST
--- old/Data-Printer-1.000004/MANIFEST  2021-03-03 23:28:28.000000000 +0100
+++ new/Data-Printer-1.001000/MANIFEST  2022-12-22 05:15:36.000000000 +0100
@@ -51,6 +51,7 @@
 t/011-class.t
 t/011.1-attributes.t
 t/011.2-roles.t
+t/011.3-object_pad.t
 t/012-code.t
 t/013-refcount.t
 t/014-memsize.t
@@ -65,6 +66,7 @@
 t/023-filters.t
 t/024-tied.t
 t/025-profiles.t
+t/026-caller_message.t
 t/100-filter_datetime.t
 t/101-filter_db.t
 t/102-filter_digest.t
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Data-Printer-1.000004/META.json 
new/Data-Printer-1.001000/META.json
--- old/Data-Printer-1.000004/META.json 2021-03-03 23:28:28.000000000 +0100
+++ new/Data-Printer-1.001000/META.json 2022-12-22 05:15:36.000000000 +0100
@@ -4,7 +4,7 @@
       "Breno G. de Oliveira <g...@cpan.org>"
    ],
    "dynamic_config" : 1,
-   "generated_by" : "ExtUtils::MakeMaker version 7.44, CPAN::Meta::Converter 
version 2.150010",
+   "generated_by" : "ExtUtils::MakeMaker version 7.64, CPAN::Meta::Converter 
version 2.150010",
    "license" : [
       "perl_5"
    ],
@@ -53,6 +53,6 @@
          "url" : "https://github.com/garu/Data-Printer";
       }
    },
-   "version" : "1.000004",
-   "x_serialization_backend" : "JSON::PP version 4.06"
+   "version" : "1.001000",
+   "x_serialization_backend" : "JSON::PP version 4.07"
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Data-Printer-1.000004/META.yml 
new/Data-Printer-1.001000/META.yml
--- old/Data-Printer-1.000004/META.yml  2021-03-03 23:28:27.000000000 +0100
+++ new/Data-Printer-1.001000/META.yml  2022-12-22 05:15:36.000000000 +0100
@@ -7,7 +7,7 @@
 configure_requires:
   ExtUtils::MakeMaker: '0'
 dynamic_config: 1
-generated_by: 'ExtUtils::MakeMaker version 7.44, CPAN::Meta::Converter version 
2.150010'
+generated_by: 'ExtUtils::MakeMaker version 7.64, CPAN::Meta::Converter version 
2.150010'
 license: perl
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -28,5 +28,5 @@
   bugtracker: https://github.com/garu/Data-Printer/issues/
   license: http://dev.perl.org/licenses/
   repository: https://github.com/garu/Data-Printer
-version: '1.000004'
+version: '1.001000'
 x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Data-Printer-1.000004/lib/DDP.pm 
new/Data-Printer-1.001000/lib/DDP.pm
--- old/Data-Printer-1.000004/lib/DDP.pm        2020-05-02 22:16:46.000000000 
+0200
+++ new/Data-Printer-1.001000/lib/DDP.pm        2022-12-22 05:11:14.000000000 
+0100
@@ -5,7 +5,8 @@
 
 BEGIN {
     push our @ISA, 'Data::Printer';
-    our $VERSION = $Data::Printer::VERSION;
+    our $VERSION = '1.001000';
+    $VERSION = eval $VERSION;
 }
 1;
 __END__
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Data-Printer-1.000004/lib/Data/Printer/Common.pm 
new/Data-Printer-1.001000/lib/Data/Printer/Common.pm
--- old/Data-Printer-1.000004/lib/Data/Printer/Common.pm        2021-02-06 
03:26:08.000000000 +0100
+++ new/Data-Printer-1.001000/lib/Data/Printer/Common.pm        2022-11-21 
04:24:09.000000000 +0100
@@ -176,8 +176,8 @@
 sub _initialize_nsort {
     return 'Sort::Key::Natural'  if $INC{'Sort/Key/Natural.pm'};
     return 'Sort::Naturally'     if $INC{'Sort/Naturally.pm'};
-    return 'Sort::Key::Natural'  if eval { require Sort::Key::Natural;  1; };
-    return 'Sort::Naturally'     if eval { require Sort::Naturally;     1; };
+    return 'Sort::Key::Natural'  if !_tryme('use Sort::Key::Natural; 1;');
+    return 'Sort::Naturally'     if !_tryme('use Sort::Naturally; 1;');
     return 'core';
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Data-Printer-1.000004/lib/Data/Printer/Filter/CODE.pm 
new/Data-Printer-1.001000/lib/Data/Printer/Filter/CODE.pm
--- old/Data-Printer-1.000004/lib/Data/Printer/Filter/CODE.pm   2021-01-30 
04:03:25.000000000 +0100
+++ new/Data-Printer-1.001000/lib/Data/Printer/Filter/CODE.pm   2022-11-25 
06:02:18.000000000 +0100
@@ -11,8 +11,23 @@
 
 sub parse {
     my ($subref, $ddp) = @_;
-    my $string = $ddp->deparse ? _deparse($subref, $ddp) : 'sub { ... }';
-    return $ddp->maybe_colorize($string, 'code');
+    my $string;
+    my $color = 'code';
+    if ($ddp->deparse) {
+        $string = _deparse($subref, $ddp);
+        if ($ddp->coderef_undefined && $string =~ /\A\s*sub\s*;\s*\z/) {
+            $string = $ddp->coderef_undefined;
+            $color = 'undef';
+        }
+    }
+    elsif ($ddp->coderef_undefined && !_subref_is_reachable($subref)) {
+        $string = $ddp->coderef_undefined;
+        $color = 'undef';
+    }
+    else {
+        $string = $ddp->coderef_stub;
+    }
+    return $ddp->maybe_colorize($string, $color);
 };
 
 #######################################
@@ -34,4 +49,11 @@
     return $sub;
 }
 
+sub _subref_is_reachable {
+    my ($subref) = @_;
+    require B;
+    my $cv = B::svref_2object($subref);
+    return !(B::class($cv->ROOT) eq 'NULL' && !${ $cv->const_sv });
+}
+
 1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Data-Printer-1.000004/lib/Data/Printer/Filter/GenericClass.pm 
new/Data-Printer-1.001000/lib/Data/Printer/Filter/GenericClass.pm
--- old/Data-Printer-1.000004/lib/Data/Printer/Filter/GenericClass.pm   
2021-01-30 04:03:25.000000000 +0100
+++ new/Data-Printer-1.001000/lib/Data/Printer/Filter/GenericClass.pm   
2022-12-22 05:01:43.000000000 +0100
@@ -60,8 +60,9 @@
         if ($INC{'Role/Tiny.pm'} && exists 
$Role::Tiny::APPLIED_TO{$class_name}) {
             %roles = %{ $Role::Tiny::APPLIED_TO{$class_name} };
         }
+        my $is_moose = 0;
 
-        foreach my $parent (@superclasses) {
+        foreach my $parent (@$linear_ISA) {
             if ($parent eq 'Moo::Object') {
                 Data::Printer::Common::_tryme(sub {
                     my $moo_maker = 'Moo'->_constructor_maker_for($class_name);
@@ -74,6 +75,7 @@
             elsif ($parent eq 'Moose::Object') {
                 Data::Printer::Common::_tryme(sub {
                     my $class_meta = $class_name->meta;
+                    $is_moose = 1;
                     %attributes = map {
                         $_->name => {
                             index => $_->insertion_order,
@@ -89,17 +91,33 @@
                 });
                 last;
             }
+            elsif ($parent eq 'Object::Pad::UNIVERSAL') {
+                Data::Printer::Common::_tryme(sub {
+                    my $meta = Object::Pad::MOP::Class->for_class( $class_name 
);
+                    %attributes = map {
+                        $_->name . $_->value($class_name) => {
+                        }
+                    } $meta->fields;
+                    %roles = map { $_->name => 1 } $meta->direct_roles;
+                });
+            }
         }
-        if (keys %roles) {
-            $string .= $ddp->newline . 'roles (' . scalar(keys %roles) . '): '
-                    . join(', ' => map $ddp->maybe_colorize($_, 'class'), keys 
%roles)
-                    ;
-        }
+        if ($ddp->class->show_methods ne 'none') {
+            if (my @role_list = keys %roles) {
+                @role_list = Data::Printer::Common::_nsort(@role_list)
+                    if @role_list && $ddp->class->sort_methods;
+                $string .= $ddp->newline . 'roles (' . scalar(@role_list) . 
'): '
+                        . join(', ' => map $ddp->maybe_colorize($_, 'class'), 
@role_list)
+                        ;
+            }
 
-        if (keys %attributes) {
-            $string .= $ddp->newline . 'attributes (' . scalar(keys 
%attributes) . '): '
-                    . join(', ' => map $ddp->maybe_colorize($_, 'method'), 
keys %attributes)
-                    ;
+            if (my @attr_list = keys %attributes) {
+                @attr_list = Data::Printer::Common::_nsort(@attr_list)
+                    if @attr_list && $ddp->class->sort_methods;
+                $string .= $ddp->newline . 'attributes (' . scalar(@attr_list) 
. '): '
+                        . join(', ' => map $ddp->maybe_colorize($_, 'method'), 
@attr_list)
+                        ;
+            }
         }
 
         my $show_linear_isa = $ddp->class->linear_isa && (
@@ -113,8 +131,30 @@
                     ;
         }
 
-        if ($ddp->class->show_methods && $ddp->class->show_methods ne 'none') {
+        if ($ddp->class->show_methods ne 'none') {
             $string .= _show_methods($class_name, $linear_ISA, \%attributes, 
$ddp);
+            if ($is_moose && $ddp->class->show_wrapped) {
+                my $modified = '';
+                my $modified_count = 0;
+                $ddp->indent;
+                for my $method ($class_name->meta->get_all_methods) {
+                    if (ref $method eq 'Class::MOP::Method::Wrapped') {
+                        foreach my $kind (qw(before around after)) {
+                            my $getter_method = $kind . '_modifiers';
+                            if (my @modlist = $method->$getter_method) {
+                                $modified .= $ddp->newline . $kind . ' ' . 
$method->name . ': '
+                                          . (@modlist > 1 ? 
$ddp->parse(\@modlist) : $ddp->parse($modlist[0]));
+                                $modified_count++;
+                            }
+                        }
+                    }
+                }
+                $ddp->outdent;
+                if ($modified_count) {
+                    $string .= $ddp->newline . 'method modifiers (' . 
$modified_count . '):'
+                            . $modified;
+                }
+            }
         }
 
         if ($ddp->class->show_overloads) {
@@ -139,6 +179,7 @@
     if ($ddp->show_tied and my $tie = ref tied $object) {
         $string .= " (tied to $tie)";
     }
+
     return $string;
 };
 
@@ -226,7 +267,7 @@
         if ($ddp->class->format_inheritance eq 'string') {
             my @method_list = keys %{$methods{$type}};
             @method_list = Data::Printer::Common::_nsort(@method_list)
-                if $ddp->class->sort_methods && @method_list;
+                if @method_list && $ddp->class->sort_methods;
 
             $string .= $ddp->newline . "$type methods (" . 
scalar(@method_list) . ')';
             if (@method_list) {
@@ -258,7 +299,7 @@
 
             # then we print them, starting with our own methods:
             @base_methods = Data::Printer::Common::_nsort(@base_methods)
-                if $ddp->class->sort_methods && @base_methods;
+                if @base_methods && $ddp->class->sort_methods;
 
             $string .= $ddp->newline . "$type methods ($total_methods)"
                     . ($total_methods ? ':' : '')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Data-Printer-1.000004/lib/Data/Printer/Object.pm 
new/Data-Printer-1.001000/lib/Data/Printer/Object.pm
--- old/Data-Printer-1.000004/lib/Data/Printer/Object.pm        2021-03-02 
13:27:08.000000000 +0100
+++ new/Data-Printer-1.001000/lib/Data/Printer/Object.pm        2022-12-22 
04:24:33.000000000 +0100
@@ -13,6 +13,7 @@
     sub show_overloads     { $_[0]->{'show_overloads'}     }
     sub show_methods       { $_[0]->{'show_methods'}       }
     sub sort_methods       { $_[0]->{'sort_methods'}       }
+    sub show_wrapped       { $_[0]->{'show_wrapped'}       }
     sub inherited          { $_[0]->{'inherited'}          }
     sub format_inheritance { $_[0]->{'format_inheritance'} }
     sub parent_filters     { $_[0]->{'parent_filters'}     }
@@ -37,6 +38,7 @@
             'parent_filters' => 
Data::Printer::Common::_fetch_scalar_or_default($params, 'parent_filters', 1),
             'universal'    => 
Data::Printer::Common::_fetch_scalar_or_default($params, 'universal', 0),
             'sort_methods' => 
Data::Printer::Common::_fetch_scalar_or_default($params, 'sort_methods', 1),
+            'show_wrapped' => 
Data::Printer::Common::_fetch_scalar_or_default($params, 'show_wrapped', 1),
             'internals'    => 
Data::Printer::Common::_fetch_scalar_or_default($params, 'internals', 1),
             'parents'      => 
Data::Printer::Common::_fetch_scalar_or_default($params, 'parents', 1),
         };
@@ -68,7 +70,7 @@
     hash_preserve unicode_charnames colored theme show_weak
     max_depth index separator end_separator class_method class hash_separator
     align_hash sort_keys quote_keys deparse return_value show_dualvar show_tied
-    warnings arrows
+    warnings arrows coderef_stub coderef_undefined
 );
 foreach my $method_name (@method_names) {
     no strict 'refs';
@@ -206,6 +208,8 @@
     $self->{'sort_keys'} = 
Data::Printer::Common::_fetch_scalar_or_default($props, 'sort_keys', 1);
     $self->{'quote_keys'} = 
Data::Printer::Common::_fetch_scalar_or_default($props, 'quote_keys', 'auto');
     $self->{'deparse'} = 
Data::Printer::Common::_fetch_scalar_or_default($props, 'deparse', 0);
+    $self->{'coderef_stub'} = 
Data::Printer::Common::_fetch_scalar_or_default($props, 'coderef_stub', 'sub { 
... }');
+    $self->{'coderef_undefined'} = 
Data::Printer::Common::_fetch_scalar_or_default($props, 'coderef_undefined', 
'<undefined coderef>');
     $self->{'return_value'} = Data::Printer::Common::_fetch_anyof(
                              $props,
                              'return_value',
@@ -572,7 +576,7 @@
 # this funcionallity separated, but refcounts increase as we find
 # them again and because of that we were seeing weird refcounting.
 # So now instead we store the refcount of the variable when we
-# first saw it.
+# first see it.
 # Finally, if we have already seen the data, we return its stringified
 # position, like "var", "var{foo}[7]", etc. UNLESS $options{seen_override}
 # is set. Why seen_override? Sometimes we want to print the same data
@@ -679,10 +683,13 @@
         }
     }
 
+    # FIXME: because of prototypes, p(@data) becomes a ref (that we don't care 
about)
+    # to the data (that we do care about). So we should not show refcounts, 
memsize
+    # or readonly status for something guaranteed to be ephemeral.
     $parsed_string .= $self->_check_readonly($data);
     $parsed_string .= $str_weak if ref($data) ne 'REF';
-
     $parsed_string .= $self->_check_memsize($data);
+
     if ($self->show_refcount && ref($data) ne 'SCALAR' && $seen->{refcount} > 
1 ) {
         $parsed_string .= ' (refcount: ' . $seen->{refcount} .')';
     }
@@ -1041,9 +1048,23 @@
 
 =head3 deparse
 
-If the data structure contains a subroutine reference, this options can be
-set to deparse it and print the underlying code, which hopefully resembles
-the original source code. (default: 0)
+If the data structure contains a subroutine reference (coderef), this option
+can be set to deparse it and print the underlying code, which hopefully
+resembles the original source code. (default: 0)
+
+=head3 coderef_stub
+
+If the data structure contains a subroutine reference (coderef) and the
+'L<deparse|/deparse>' option above is set to false, Data::Printer will print 
this
+instead. (default: 'C<< sub { ... } >>')
+
+=head3 coderef_undefined
+
+If the data structure contains a subroutine reference (coderef) that has
+not actually been defined at the time of inspection, Data::Printer will
+print this instead. Set it to '0' to disable this check, in which case
+Data::Printer will use whatever value you set on
+L<coderef_stub|/coderef_stub> above. (default: '<undefined coderef>').
 
 =head3 end_separator
 
@@ -1251,12 +1272,14 @@
 =head4 show_methods
 
 Controls which of the object's direct methods to show. Can be set to 'none',
-'all', 'private' or 'public'. (default: 'all')
+'all', 'private' or 'public'. When applicable (Moo, Moose) it will also
+show attributes and roles. (default: 'all')
 
 =head4 sort_methods
 
-When listing methods, this option will order them alphabetically, rather than
-on whatever order the list of methods returned. (default: 1)
+When listing methods, attributes and roles, this option will order them
+alphabetically, rather than on whatever order the list of methods returned.
+(default: 1)
 
 =head4 inherited
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Data-Printer-1.000004/lib/Data/Printer/Theme.pm 
new/Data-Printer-1.001000/lib/Data/Printer/Theme.pm
--- old/Data-Printer-1.000004/lib/Data/Printer/Theme.pm 2021-02-24 
04:34:52.000000000 +0100
+++ new/Data-Printer-1.001000/lib/Data/Printer/Theme.pm 2022-11-22 
04:24:48.000000000 +0100
@@ -29,7 +29,7 @@
 }
 
 # prints the SGR (terminal) color reset modifier
-sub color_reset { return "\e[0m" }
+sub color_reset { return "\e[m" }
 
 sub new {
     my ($class, %params) = @_;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Data-Printer-1.000004/lib/Data/Printer.pm 
new/Data-Printer-1.001000/lib/Data/Printer.pm
--- old/Data-Printer-1.000004/lib/Data/Printer.pm       2021-03-03 
23:27:47.000000000 +0100
+++ new/Data-Printer-1.001000/lib/Data/Printer.pm       2022-12-22 
05:11:31.000000000 +0100
@@ -5,7 +5,7 @@
 use Data::Printer::Common;
 use Data::Printer::Config;
 
-our $VERSION = '1.000004';
+our $VERSION = '1.001000';
 $VERSION = eval $VERSION;
 
 my $rc_arguments;
@@ -45,7 +45,34 @@
 sub _initialize {
     # potential race but worst case is we read it twice :)
     { no warnings 'redefine'; *_initialize = sub {} }
-    $rc_arguments = Data::Printer::Config::load_rc_file();
+
+    my $rc_filename = Data::Printer::Config::_get_first_rc_file_available();
+    $rc_arguments = Data::Printer::Config::load_rc_file($rc_filename);
+
+    if (
+           exists $rc_arguments->{'_'}{live_update}
+        && defined $rc_arguments->{'_'}{live_update}
+        && $rc_arguments->{'_'}{live_update} =~ /\A\d+\z/
+        && $rc_arguments->{'_'}{live_update} > 0) {
+        my $now = time;
+        my $last_mod = (stat $rc_filename)[9];
+        {
+            no warnings 'redefine';
+            *_initialize = sub {
+                if (time - $now > $rc_arguments->{'_'}{live_update}) {
+                    my $new_last_mod = (stat $rc_filename)[9];
+                    if (defined $new_last_mod && $new_last_mod > $last_mod) {
+                        $now = time;
+                        $last_mod = $new_last_mod;
+                        $rc_arguments = 
Data::Printer::Config::load_rc_file($rc_filename);
+                        if (!exists $rc_arguments->{'_'}{live_update} || 
!$rc_arguments->{'_'}{live_update}) {
+                            *_initialize = sub {};
+                        }
+                    }
+                }
+            };
+        }
+    }
 }
 
 sub np (\[@$%&];%) {
@@ -55,6 +82,7 @@
 
     my $caller = caller;
     my $args_to_use = _fetch_args_with($caller, \%properties);
+    return '' if $args_to_use->{quiet};
     my $printer = Data::Printer::Object->new($args_to_use);
 
     # force color level 0 on 'auto' colors:
@@ -84,6 +112,7 @@
 
     my $caller = caller;
     my $args_to_use = _fetch_args_with($caller, \%properties);
+    return if $args_to_use->{quiet};
     my $printer = Data::Printer::Object->new($args_to_use);
     my $want_value = defined wantarray;
     if ($printer->colored eq 'auto' && $printer->return_value eq 'dump' && 
$want_value) {
@@ -122,6 +151,7 @@
 
     my $caller = caller;
     my $args_to_use = _fetch_args_with($caller, \%properties);
+    return if $args_to_use->{quiet};
     my $printer = Data::Printer::Object->new($args_to_use);
 
     my $want_value = defined wantarray;
@@ -255,17 +285,16 @@
     p @array;
     p %hash;
 
-    # for anonymous array/hash references, use postderef (on perl 5.24 or 
later):
-    p [ $one, $two, $three ]->@*;
-    p { foo => $foo, bar => $bar }->%*;
-
-    # or deref the anonymous ref:
-    p @{[ $one, $two, $three ]};
-    p %{{ foo => $foo, bar => $bar }};
-
-    # or put '&' in front of the call:
-    &p( [ $one, $two, $three ] );
-    &p( { foo => $foo, bar => $bar } );
+    # printing anonymous array references:
+    p [ $one, $two, $three ]->@*;    # perl 5.24 or later!
+    p @{[ $one, $two, $three ]};     # same, older perls
+    &p( [ $one, $two, $three ] );    # same, older perls
+
+    # printing anonymous hash references:
+    p { foo => $foo, bar => $bar }->%*;   # perl 5.24 or later!
+    p %{{ foo => $foo, bar => $bar }};    # same, older perls
+    &p( { foo => $foo, bar => $bar } );   # same, older perls
+
 
 The snippets above will print the contents of the chosen variables to STDERR
 on your terminal, with colors and a few extra features to help you debug
@@ -284,7 +313,7 @@
 
 That's pretty much it :)
 
-=for html <img alt="Data::Printer in action" 
src="https://raw.githubusercontent.com/garu/Data-Printer/master/examples/ddp.gif";
 />
+=for html <img alt="samples of Data::Printer output for several kinds of data 
and objects" 
src="https://raw.githubusercontent.com/garu/Data-Printer/master/examples/ddp.gif";
 />
 
 Data::Printer is L<fully customizable|/Properties Quick Reference>, even
 on a per-module basis! Once you figure out your own preferences, create a
@@ -508,11 +537,25 @@
     multiline = 0
     output    = /var/log/myapp/debug.data
 
+    # use 'quiet' to silence all output from p() and np()
+    # called from the specified package.
+    [MyApp::Yet::Another]
+    quiet = 1
+
 Note that if you set custom properties as arguments to C<p()> or C<np()>, you
 should group suboptions as a hashref. So while the C<.dataprinter> file has
 "C<< class.expand = 0 >>" and "C<< class.inherited = none >>", the equivalent
 code is "C<< class => { expand => 0, inherited => 'none' } >>".
 
+=head3 live updating your .dataprinter without restarts
+
+Data::Printer 1.1 introduces a new 'live_update' flag that can be set to a
+positive integer to enable live updates. When this mode is on, Data::Printer
+will check if the C<.dataprinter> file has been updated and, if so, it will
+reload it. This way you can toggle features on and off and control output
+verbosity directly from your C<.dataprinter> file without needing to change
+or restart running code.
+
 =head2 Properties Quick Reference
 
 Below are (almost) all available properties and their (hopefully sane)
@@ -610,6 +653,11 @@
 values. Use this to generate complete (full) dumps of all your content,
 which is trimmed by default.
 
+=item * B<quiet> - when set to 1, disables all data parsing and returns as
+quickly as possible. Use this to disable all output from C<p()> and C<np()>
+inside a particular package, either from the 'use' call or from .dataprinter.
+(introduced in version 1.1)
+
 =back
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Data-Printer-1.000004/t/001-object.t 
new/Data-Printer-1.001000/t/001-object.t
--- old/Data-Printer-1.000004/t/001-object.t    2021-02-16 19:58:24.000000000 
+0100
+++ new/Data-Printer-1.001000/t/001-object.t    2022-11-30 03:39:23.000000000 
+0100
@@ -162,7 +162,7 @@
     is $ddp->maybe_colorize('x'), 'x', 'no color unless tag is provided';
     is $ddp->maybe_colorize('x', 'invalid tag'), 'x', 'no color unless valid 
tag';
     my $colored = $ddp->maybe_colorize('x', 'invalid tag', "\e[0;38;2m");
-    if ($colored eq "\e[0;38;2mx\e[0m") {
+    if ($colored eq "\e[0;38;2mx\e[m") {
         pass 'fallback to default color';
     }
     else {
@@ -171,7 +171,7 @@
         my $parsed = $ddp->theme->_parse_color("\e[0;38;2m");
         $parsed =~ s{\e}{\\e}gsm if defined $parsed;
         fail 'fallback to default color:'
-           . ' got "' . $colored . '" expected "\e[0;38;2mx\e[0m"'
+           . ' got "' . $colored . '" expected "\e[0;38;2mx\e[m"'
            . ' theme name: ' . $ddp->theme->name
            . ' color level: ' . $ddp->{_output_color_level}
            . ' sgr_color_for "invalid tag": '
@@ -195,7 +195,7 @@
         my $parsed = $ddp->theme->_parse_color("\e[0;38;2m");
         $parsed =~ s{\e}{\\e}gsm if defined $parsed;
         fail 'fallback to default color:'
-           . ' got "' . $colored . '" expected "\e[0;38;2mx\e[0m"'
+           . ' got "' . $colored . '" expected "\e[0;38;2mx\e[m"'
            . ' theme name: ' . $ddp->theme->name
            . ' color level: ' . $ddp->{_output_color_level}
            . ' sgr_color_for "invalid tag": '
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Data-Printer-1.000004/t/011.3-object_pad.t 
new/Data-Printer-1.001000/t/011.3-object_pad.t
--- old/Data-Printer-1.000004/t/011.3-object_pad.t      1970-01-01 
01:00:00.000000000 +0100
+++ new/Data-Printer-1.001000/t/011.3-object_pad.t      2022-12-22 
05:07:26.000000000 +0100
@@ -0,0 +1,38 @@
+use strict;
+use warnings;
+use Test::More tests => 1;
+use Data::Printer::Common;
+use Data::Printer::Object;
+
+test_object_pad();
+exit;
+
+sub test_object_pad {
+    SKIP: {
+        my $error = Data::Printer::Common::_tryme(
+            'use Object::Pad 0.60; class TestClass { has $x :param = 42; 
method one($dX) { } method two { } }'
+        );
+        skip 'Object::Pad 0.60+ not found', 1 if $error;
+        
+        my $ddp = Data::Printer::Object->new( colored => 0, class => { 
show_reftype => 1 } );
+        my $obj = TestClass->new( x => 666 );
+        my $parsed = $ddp->parse($obj);
+        is(
+            $parsed,
+            'TestClass (ARRAY)  {
+    parents: Object::Pad::UNIVERSAL
+    public methods (6):
+        DOES, META, new, one, two
+        Object::Pad::UNIVERSAL:
+            BUILDARGS
+    private methods (0)
+    internals: [
+        [0] 666
+    ]
+}',
+            'parsed Object::Pad class'
+        );
+    };
+}
+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Data-Printer-1.000004/t/026-caller_message.t 
new/Data-Printer-1.001000/t/026-caller_message.t
--- old/Data-Printer-1.000004/t/026-caller_message.t    1970-01-01 
01:00:00.000000000 +0100
+++ new/Data-Printer-1.001000/t/026-caller_message.t    2021-03-09 
02:38:08.000000000 +0100
@@ -0,0 +1,31 @@
+use strict;
+use warnings;
+use Test::More tests => 2;
+
+BEGIN {
+    use Data::Printer::Config;
+    no warnings 'redefine';
+    *Data::Printer::Config::load_rc_file = sub { {} };
+};
+
+use Data::Printer
+    colored                 => 0,
+    caller_info             => 1,
+    return_value            => 'dump',
+    caller_message_newline  => 0,
+    caller_message_position => 'before';
+
+my $x;
+my $got = p $x;
+is(
+    $got,
+    'Printing in line 19 of t/026-caller_message.t: undef',
+    'caller_info shows the proper caller message (after)'
+);
+
+$got = p $x, caller_message_position => 'after';
+is(
+    $got,
+    'undef Printing in line 26 of t/026-caller_message.t:',
+    'caller_info shows the proper caller message (before)'
+);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Data-Printer-1.000004/t/998-color.t 
new/Data-Printer-1.001000/t/998-color.t
--- old/Data-Printer-1.000004/t/998-color.t     2021-03-03 03:07:21.000000000 
+0100
+++ new/Data-Printer-1.001000/t/998-color.t     2022-11-22 18:32:43.000000000 
+0100
@@ -46,30 +46,30 @@
 push @{$data->{arrayref}}, $data->{arrayref}[0];
 
 my $got = $ddp->parse(\$data);
-my $expected = qq|\e[0;38;2;102;217;239m{\e[0m
-    \e[0;38;2;121;134;203marrayref\e[0m\e[0;38;2;102;217;239m   
\e[0m\e[0;38;2;102;217;239m[\e[0m
-        \e[0;38;2;161;187;197m[0] \e[0m\e[0;38;2;102;217;239m[\e[0m
-                \e[0;38;2;161;187;197m[0] \e[0m\e[0;38;2;247;140;106m10\e[0m
-            \e[0;38;2;102;217;239m]\e[0m (refcount: 
2)\e[0;38;2;102;217;239m,\e[0m
-        \e[0;38;2;161;187;197m[1] 
\e[0m\e[0;38;2;199;146;234mDDPTestObject\e[0m 
\e[0;38;2;102;217;239m(\e[0m\e[0;38;2;199;146;234mHASH\e[0m\e[0;38;2;102;217;239m)\e[0m
  \e[0;38;2;102;217;239m{\e[0m
-                public methods (1): \e[0;38;2;130;170;255mnew\e[0m
+my $expected = qq|\e[0;38;2;102;217;239m{\e[m
+    \e[0;38;2;121;134;203marrayref\e[m\e[0;38;2;102;217;239m   
\e[m\e[0;38;2;102;217;239m[\e[m
+        \e[0;38;2;161;187;197m[0] \e[m\e[0;38;2;102;217;239m[\e[m
+                \e[0;38;2;161;187;197m[0] \e[m\e[0;38;2;247;140;106m10\e[m
+            \e[0;38;2;102;217;239m]\e[m (refcount: 
2)\e[0;38;2;102;217;239m,\e[m
+        \e[0;38;2;161;187;197m[1] \e[m\e[0;38;2;199;146;234mDDPTestObject\e[m 
\e[0;38;2;102;217;239m(\e[m\e[0;38;2;199;146;234mHASH\e[m\e[0;38;2;102;217;239m)\e[m
  \e[0;38;2;102;217;239m{\e[m
+                public methods (1): \e[0;38;2;130;170;255mnew\e[m
                 private methods (0)
-                internals: \e[0;38;2;102;217;239m{}\e[0m
-            \e[0;38;2;102;217;239m}\e[0m\e[0;38;2;102;217;239m,\e[0m
-        \e[0;38;2;161;187;197m[2] 
\e[0m\e[0;38;2;240;113;120mvar{arrayref}[0]\e[0m
-    \e[0;38;2;102;217;239m]\e[0m\e[0;38;2;102;217;239m,\e[0m
-    \e[0;38;2;121;134;203mhashref\e[0m \e[0;38;2;102;217;239m   
\e[0m\e[0;38;2;102;217;239m{\e[0m
-        \e[0;38;2;121;134;203mlvalue\e[0m                    
\e[0;38;2;102;217;239m   
\e[0m\e[0;38;2;102;217;239m"\e[0m\e[0;38;2;144;181;90mc\e[0m\e[0;38;2;102;217;239m"\e[0m\e[0;38;2;247;140;106m
 (LVALUE)\e[0m| . (q{ (refcount: 2)}x!!($] < 5.014000)) . 
qq|\e[0;38;2;102;217;239m,\e[0m
-        \e[0;38;2;121;134;203mnumber\e[0m                    
\e[0;38;2;102;217;239m   
\e[0m\e[0;38;2;247;140;106m3.14\e[0m\e[0;38;2;102;217;239m,\e[0m
-        \e[0;38;2;121;134;203mref\e[0m                       
\e[0;38;2;102;217;239m   \e[0m\\ \e[0;38;2;247;140;106m42\e[0m 
(read-only)\e[0;38;2;102;217;239m,\e[0m
-        \e[0;38;2;121;134;203mregex\e[0m                     
\e[0;38;2;102;217;239m   \e[0m\e[0;38;2;255;203;107m(?:\\s+)\$\e[0m  
(modifiers: ix)| . (q{ (refcount: 2)}x!!($] =~ /5.01100[12]/)) . 
qq|\e[0;38;2;102;217;239m,\e[0m
-        \e[0;38;2;121;134;203mspecial\e[0m                   
\e[0;38;2;102;217;239m   
\e[0m\e[0;38;2;102;217;239m"\e[0m\e[0;38;2;144;181;90mone\e[0;38;2;0;150;136m\\t\e[0;38;2;144;181;90m\e[0;38;2;0;150;136m\\x{2603}\e[0;38;2;144;181;90mtwo\e[0;38;2;0;150;136m\\0\e[0;38;2;144;181;90m\e[0;38;2;0;150;136m\\n\e[0;38;2;144;181;90m\e[0;38;2;0;150;136m\\e\e[0;38;2;144;181;90m[0m\e[0;38;2;0;150;136m\\x{2603}\e[0;38;2;144;181;90mBBBBBBBBBBBBBBB\e[0;38;2;79;90;97m(...skipping
 85 
chars...)\e[0;38;2;144;181;90m\e[0m\e[0;38;2;102;217;239m"\e[0m\e[0;38;2;102;217;239m,\e[0m
-        \e[0;38;2;121;134;203mstring\e[0m                    
\e[0;38;2;102;217;239m   
\e[0m\e[0;38;2;102;217;239m"\e[0m\e[0;38;2;144;181;90mthis is a 
string\e[0m\e[0;38;2;102;217;239m"\e[0m\e[0;38;2;102;217;239m,\e[0m
-        \e[0;38;2;121;134;203msub\e[0m                       
\e[0;38;2;102;217;239m   \e[0m\e[0;38;2;79;90;97msub { ... }\e[0m (refcount: 
2)\e[0;38;2;102;217;239m,\e[0m
-        \e[0;38;2;121;134;203mundef\e[0m                     
\e[0;38;2;102;217;239m   
\e[0m\e[0;38;2;255;83;112mundef\e[0m\e[0;38;2;102;217;239m,\e[0m
-        
\e[0;38;2;102;217;239m"\e[0m\e[0;38;2;121;134;203mwe\e[0;38;2;0;150;136m\\e\e[0;38;2;121;134;203m[0mird\e[0;38;2;0;150;136m\\0\e[0;38;2;121;134;203mkey\e[0;38;2;0;150;136m\\x{2603}\e[0;38;2;121;134;203m!\e[0m\e[0;38;2;102;217;239m"\e[0m\e[0;38;2;102;217;239m
   \e[0m\e[0;38;2;247;140;106m1\e[0m
-    \e[0;38;2;102;217;239m}\e[0m
-\e[0;38;2;102;217;239m}\e[0m|;
+                internals: \e[0;38;2;102;217;239m{}\e[m
+            \e[0;38;2;102;217;239m}\e[m\e[0;38;2;102;217;239m,\e[m
+        \e[0;38;2;161;187;197m[2] 
\e[m\e[0;38;2;240;113;120mvar{arrayref}[0]\e[m
+    \e[0;38;2;102;217;239m]\e[m\e[0;38;2;102;217;239m,\e[m
+    \e[0;38;2;121;134;203mhashref\e[m \e[0;38;2;102;217;239m   
\e[m\e[0;38;2;102;217;239m{\e[m
+        \e[0;38;2;121;134;203mlvalue\e[m                    
\e[0;38;2;102;217;239m   
\e[m\e[0;38;2;102;217;239m"\e[m\e[0;38;2;144;181;90mc\e[m\e[0;38;2;102;217;239m"\e[m\e[0;38;2;247;140;106m
 (LVALUE)\e[m| . (q{ (refcount: 2)}x!!($] < 5.014000)) . 
qq|\e[0;38;2;102;217;239m,\e[m
+        \e[0;38;2;121;134;203mnumber\e[m                    
\e[0;38;2;102;217;239m   
\e[m\e[0;38;2;247;140;106m3.14\e[m\e[0;38;2;102;217;239m,\e[m
+        \e[0;38;2;121;134;203mref\e[m                       
\e[0;38;2;102;217;239m   \e[m\\ \e[0;38;2;247;140;106m42\e[m 
(read-only)\e[0;38;2;102;217;239m,\e[m
+        \e[0;38;2;121;134;203mregex\e[m                     
\e[0;38;2;102;217;239m   \e[m\e[0;38;2;255;203;107m(?:\\s+)\$\e[m  (modifiers: 
ix)| . (q{ (refcount: 2)}x!!($] =~ /5.01100[12]/)) . 
qq|\e[0;38;2;102;217;239m,\e[m
+        \e[0;38;2;121;134;203mspecial\e[m                   
\e[0;38;2;102;217;239m   
\e[m\e[0;38;2;102;217;239m"\e[m\e[0;38;2;144;181;90mone\e[0;38;2;0;150;136m\\t\e[0;38;2;144;181;90m\e[0;38;2;0;150;136m\\x{2603}\e[0;38;2;144;181;90mtwo\e[0;38;2;0;150;136m\\0\e[0;38;2;144;181;90m\e[0;38;2;0;150;136m\\n\e[0;38;2;144;181;90m\e[0;38;2;0;150;136m\\e\e[0;38;2;144;181;90m[0m\e[0;38;2;0;150;136m\\x{2603}\e[0;38;2;144;181;90mBBBBBBBBBBBBBBB\e[0;38;2;79;90;97m(...skipping
 85 
chars...)\e[0;38;2;144;181;90m\e[m\e[0;38;2;102;217;239m"\e[m\e[0;38;2;102;217;239m,\e[m
+        \e[0;38;2;121;134;203mstring\e[m                    
\e[0;38;2;102;217;239m   
\e[m\e[0;38;2;102;217;239m"\e[m\e[0;38;2;144;181;90mthis is a 
string\e[m\e[0;38;2;102;217;239m"\e[m\e[0;38;2;102;217;239m,\e[m
+        \e[0;38;2;121;134;203msub\e[m                       
\e[0;38;2;102;217;239m   \e[m\e[0;38;2;79;90;97msub { ... }\e[m (refcount: 
2)\e[0;38;2;102;217;239m,\e[m
+        \e[0;38;2;121;134;203mundef\e[m                     
\e[0;38;2;102;217;239m   
\e[m\e[0;38;2;255;83;112mundef\e[m\e[0;38;2;102;217;239m,\e[m
+        
\e[0;38;2;102;217;239m"\e[m\e[0;38;2;121;134;203mwe\e[0;38;2;0;150;136m\\e\e[0;38;2;121;134;203m[0mird\e[0;38;2;0;150;136m\\0\e[0;38;2;121;134;203mkey\e[0;38;2;0;150;136m\\x{2603}\e[0;38;2;121;134;203m!\e[m\e[0;38;2;102;217;239m"\e[m\e[0;38;2;102;217;239m
   \e[m\e[0;38;2;247;140;106m1\e[m
+    \e[0;38;2;102;217;239m}\e[m
+\e[0;38;2;102;217;239m}\e[m|;
 
 is($got, $expected, 'colored output');
 if ($got ne $expected) {

Reply via email to