package LIMS::Local::DevelCycle;
use strict;
use warnings;
use IO::All;
use Path::Tiny;
use Devel::Cycle;
use FindBin qw($Bin); # warn $Bin;
use Capture::Tiny ':all';
use Data::Printer alias => 'p';
{ # patched _get_type sub to prevent "Unhandled type: REGEXP" warning:
# https://rt.cpan.org/Public/Bug/Display.html?id=56681
no warnings 'redefine';
sub Devel::Cycle::_get_type {
my $thingy = shift; # p $thingy; # very large output!!
return unless ref $thingy;
# return 'SCALAR' if UNIVERSAL::isa($thingy,'SCALAR') || UNIVERSAL::isa($thingy,'REF');
# https://rt.cpan.org/Public/Bug/Display.html?id=56681 (also added GLOB):
return 'SCALAR' if grep UNIVERSAL::isa($thingy, $_),
qw(SCALAR REF REGEXP GLOB);
return 'ARRAY' if UNIVERSAL::isa($thingy,'ARRAY');
return 'HASH' if UNIVERSAL::isa($thingy,'HASH');
return 'CODE' if UNIVERSAL::isa($thingy,'CODE');
undef;
}
}
sub find {
my $thing = shift;
my $captured = capture_merged { find_cycle($thing) }; # warn $captured;
if ($captured) {
# return var if not fastcgi, will die if defined value:
return $captured if grep $ENV{$_}, qw/DEVEL_SERVER HARNESS_ACTIVE/;
my $logfile = path($Bin, '..', 'logs', 'devel_cycle.log')->realpath; # warn $logfile;
io($logfile)->append($captured);
}
return 0; # don't die;
}
# exit 0;
1;