Skip Menu |
 

This queue is for tickets about the Devel-Cycle CPAN distribution.

Report information
The Basics
Id: 109636
Status: new
Priority: 0/
Queue: Devel-Cycle

People
Owner: Nobody in particular
Requestors: ZARQUON [...] cpan.org
Cc:
AdminCc:

Bug Information
Severity: Wishlist
Broken in: (no value)
Fixed in: (no value)



Subject: FEATURE: flag to get standard reporting into scalar for applications that are already using STDOUT
Download (untitled) / with headers
text/plain 107b
While you could make your own callback, this patch seems useful to me in any case. Comes with a free test.
Subject: report_to_scalar.patch
diff --git a/lib/Devel/Cycle.pm b/lib/Devel/Cycle.pm index 68e93c1..a8d51de 100644 --- a/lib/Devel/Cycle.pm +++ b/lib/Devel/Cycle.pm @@ -20,11 +20,14 @@ our @EXPORT_OK = qw($FORMATTING); our $VERSION = '1.12'; our $FORMATTING = 'roasted'; our $QUIET = 0; +our $REPORT_TO_SCALAR = 0; my %import_args = (-quiet =>1, -raw =>1, -cooked =>1, - -roasted=>1); + -roasted=>1, + -report_to_scalar=>0, +); BEGIN { require constant; @@ -43,31 +46,36 @@ sub import { $FORMATTING = 'roasted' if exists $args{-roasted}; $FORMATTING = 'raw' if exists $args{-raw}; $FORMATTING = 'cooked' if exists $args{-cooked}; + $REPORT_TO_SCALAR = 1 if exists $args{-report_to_scalar}; $self->export_to_level(1,$self,grep {!exists $import_args{$_}} @_); } sub find_weakened_cycle { my $ref = shift; my $callback = shift; + my $report; unless ($callback) { my $counter = 0; $callback = sub { - _do_report(++$counter,shift) + $report .= _do_report(++$counter,shift) } } _find_cycle($ref,{},$callback,1,{},()); + return $report if $REPORT_TO_SCALAR; } sub find_cycle { my $ref = shift; my $callback = shift; + my $report; unless ($callback) { my $counter = 0; $callback = sub { - _do_report(++$counter,shift) + $report .= _do_report(++$counter,shift); } } _find_cycle($ref,{},$callback,0,{},()); + return $report if $REPORT_TO_SCALAR; } sub _find_cycle { @@ -182,12 +190,19 @@ sub _find_cycle_CODE { sub _do_report { my $counter = shift; my $path = shift; - print "Cycle ($counter):\n"; + my $report; + $report .= "Cycle ($counter):\n"; foreach (@$path) { my ($type,$index,$ref,$value,$is_weak) = @$_; - printf("\t%30s => %-30s\n",($is_weak ? 'w-> ' : '')._format_reference($type,$index,$ref,0),_format_reference(undef,undef,$value,1)); + $report .= sprintf("\t%30s => %-30s\n",($is_weak ? 'w-> ' : '')._format_reference($type,$index,$ref,0),_format_reference(undef,undef,$value,1)); + } + $report .=print "\n"; + if (! $REPORT_TO_SCALAR) { + print $report; + } + else { + return $report; } - print "\n"; } sub _format_reference { @@ -420,6 +435,12 @@ illustrated here: use Devel::Cycle -raw; +If you are using Devel::Cycle for an application that's already making use +of STDOUT you can use the -report_to_scalar flag to return the report +rather than having it print or having to tie STDOUT. + + use Devel::Cycle -report_to_scalar; + =head2 Code references (closures) If the PadWalker module is installed, Devel::Cycle will also report


This service is sponsored and maintained by Best Practical Solutions and runs on Perl.org infrastructure.

Please report any issues with rt.cpan.org to rt-cpan-admin@bestpractical.com.