# This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. # # This Source Code Form is "Incompatible With Secondary Licenses", as # defined by the Mozilla Public License, v. 2.0. package Bugzilla::Quantum::Stdout; use 5.10.1; use Moo; use Bugzilla::Logging; use Encode; use English qw(-no_match_vars); has 'controller' => ( is => 'ro', required => 1, ); has '_encoding' => ( is => 'rw', default => '', ); sub TIEHANDLE { ## no critic (unpack) my $class = shift; return $class->new(@_); } sub PRINTF { ## no critic (unpack) my $self = shift; $self->PRINT( sprintf @_ ); } 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 . ( $OUTPUT_RECORD_SEPARATOR // '' ) ); } sub BINMODE { my ( $self, $mode ) = @_; if ($mode) { if ( $mode eq ':bytes' or $mode eq ':raw' ) { $self->_encoding(''); } elsif ( $mode eq ':utf8' ) { $self->_encoding('utf8'); } } } 1;