summaryrefslogtreecommitdiffstats
path: root/Bugzilla/Quantum/Stdout.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Bugzilla/Quantum/Stdout.pm')
-rw-r--r--Bugzilla/Quantum/Stdout.pm41
1 files changed, 29 insertions, 12 deletions
diff --git a/Bugzilla/Quantum/Stdout.pm b/Bugzilla/Quantum/Stdout.pm
index ee470a56a..be7b546ea 100644
--- a/Bugzilla/Quantum/Stdout.pm
+++ b/Bugzilla/Quantum/Stdout.pm
@@ -9,34 +9,51 @@ package Bugzilla::Quantum::Stdout;
use 5.10.1;
use Moo;
+use Bugzilla::Logging;
+use Encode;
+
has 'controller' => (
is => 'ro',
required => 1,
);
-sub TIEHANDLE { ## no critic (unpack)
+has '_encoding' => (
+ is => 'rw',
+ default => '',
+);
+
+sub TIEHANDLE { ## no critic (unpack)
my $class = shift;
return $class->new(@_);
}
-sub PRINTF { ## no critic (unpack)
+sub PRINTF { ## no critic (unpack)
my $self = shift;
- $self->PRINT(sprintf @_);
+ $self->PRINT( sprintf @_ );
}
-sub PRINT { ## no critic (unpack)
- my $self = shift;
-
- foreach my $chunk (@_) {
- my $str = "$chunk";
- utf8::encode($str);
- $self->controller->write($str);
+sub PRINT { ## no critic (unpack)
+ my $self = shift;
+ my $c = $self->controller;
+ my $bytes = join '', @_;
+ return unless $bytes;
+ if ( $self->_encoding ) {
+ $bytes = encode( $self->_encoding, $bytes );
}
+ $c->write($bytes.$\);
}
sub BINMODE {
- # no-op
+ my ( $self, $mode ) = @_;
+ if ($mode) {
+ if ( $mode eq ':bytes' or $mode eq ':raw' ) {
+ $self->_encoding('');
+ }
+ elsif ( $mode eq ':utf8' ) {
+ $self->_encoding('utf8');
+ }
+ }
}
-1; \ No newline at end of file
+1;