Files
2024-10-14 00:08:40 +02:00

72 lines
1.7 KiB
Perl

# --
# Copyright (C) 2001-2018 OTRS AG, https://otrs.com/
# --
# This software comes with ABSOLUTELY NO WARRANTY. For details, see
# the enclosed file COPYING for license information (GPL). If you
# did not receive this file, see https://www.gnu.org/licenses/gpl-3.0.txt.
# --
package Devel::REPL::Plugin::OTRS;
use strict;
use 5.008_005;
our $VERSION = '0.01';
use Devel::REPL::Plugin;
use Data::Printer use_prototypes => 0;
=head1 NAME
Devel::REPL::Plugin::OTRS - Devel::Repl plugin to improve formatting of hashes and lists
=head1 SYNOPSIS
This plugin checks if the returned data could be a hash or a list, and turns it
into a hash or list reference for improved output formatting. This may lead to false
positives for hash detection, but you can avoid this by using references in the REPL directly.
=cut
around 'format_result' => sub {
my $Original = shift;
my $Self = shift;
my @ToDump = @_;
if (@ToDump <= 1) {
return $Self->DataDump(@ToDump);
}
# Guess if the list could be actually a hash:
# tt must have an even size and no non-unique keys.
if (scalar @ToDump % 2 == 0) {
my %Hash = @ToDump;
if ( ( scalar keys %Hash ) * 2 == scalar @ToDump) {
return $Self->DataDump( { @ToDump } );
}
}
# Otherwise, treat it as a list.
return $Self->DataDump( [ @ToDump ] );
};
sub DataDump {
my ($Self, @ToDump) = @_;
my $Result;
for my $Element (@ToDump) {
my $Buf;
p(\$Element,
output => \$Buf,
colored => $Self->{ColoredOutput} // 1,
caller_info => 0 );
$Result .= $Buf;
}
return $Result;
}
sub ColoredOutput {
my ($Self, $ColoredOutput) = @_;
$Self->{ColoredOutput} = $ColoredOutput;
}
1;