From 23f9de752c2ad439a7b989fb9d6a4e327b313011 Mon Sep 17 00:00:00 2001 From: Steve Hancock Date: Wed, 4 Oct 2023 16:53:06 -0700 Subject: [PATCH] simplify sub streamhandle --- lib/Perl/Tidy.pm | 84 ++++++++++++++++++++----------------- lib/Perl/Tidy/Debugger.pm | 5 +-- lib/Perl/Tidy/HtmlWriter.pm | 9 ++-- lib/Perl/Tidy/Logger.pm | 17 ++++---- 4 files changed, 60 insertions(+), 55 deletions(-) diff --git a/lib/Perl/Tidy.pm b/lib/Perl/Tidy.pm index 3c397b8b..c8eb6d7f 100644 --- a/lib/Perl/Tidy.pm +++ b/lib/Perl/Tidy.pm @@ -157,17 +157,16 @@ sub streamhandle { # (check for 'print' method for 'w' mode) # (check for 'getline' method for 'r' mode) - # An optional flag $is_encoded_data may be given, as follows: - - # Case 1. Any non-empty string: encoded data is being transferred, set - # encoding to be utf8 for files and for stdin. - - # Case 2. Not given, or an empty string: unencoded binary data is being - # transferred, set binary mode for files and for stdin. + # An optional flag '$is_encoded_data' may be given, as follows: + # - true: encoded data is being transferred, + # set encoding to be utf8 for files and for stdin. + # - false: unencoded binary data is being transferred, + # set binary mode for files and for stdin. my ( $filename, $mode, $is_encoded_data ) = @_; - # sub slurp_stream is preferred for reading (for efficiency). + # Note: mode 'r' works but is no longer used. + # Use sub stream_slurp instead for mode 'r' (for efficiency). if ( $mode ne 'w' && $mode ne 'W' ) { if ( DEVEL_MODE || ( $mode ne 'r' && $mode ne 'R' ) ) { Fault("streamhandle called in unexpected mode '$mode'\n"); @@ -178,7 +177,9 @@ sub streamhandle { my $New; my $fh; + #------------------- # handle a reference + #------------------- if ($ref) { if ( $ref eq 'ARRAY' ) { $New = sub { Perl::Tidy::IOScalarArray->new( $filename, $mode ) }; @@ -233,7 +234,9 @@ EOM } } + #---------------- # handle a string + #---------------- else { if ( $filename eq '-' ) { $New = sub { $mode eq 'w' ? *STDOUT : *STDIN } @@ -242,41 +245,46 @@ EOM $New = sub { IO::File->new( $filename, $mode ) }; } } - $fh = $New->( $filename, $mode ); - if ( !$fh ) { - Warn("Couldn't open file:$filename in mode:$mode : $OS_ERROR\n"); + #-------------- + # Open the file + #-------------- + $fh = $New->( $filename, $mode ); + if ( !$fh ) { + Warn("Couldn't open file:'$filename' in mode:$mode : $OS_ERROR\n"); } - else { - # Case 1: handle encoded data - if ($is_encoded_data) { - if ( ref($fh) eq 'IO::File' ) { - ## binmode object call not available in older perl versions - ## $fh->binmode(":raw:encoding(UTF-8)"); - binmode $fh, ":raw:encoding(UTF-8)"; - } - elsif ( $filename eq '-' ) { - binmode STDOUT, ":raw:encoding(UTF-8)"; - } - else { - # shouldn't happen - } + #------------ + # Set binmode + #------------ + else { + if ( ref($fh) eq 'IO::File' ) { + ## binmode object call not available in older perl versions + ## $fh->binmode(":raw:encoding(UTF-8)"); + if ($is_encoded_data) { binmode $fh, ":raw:encoding(UTF-8)"; } + else { binmode $fh } + } + elsif ( $filename eq '-' ) { + if ($is_encoded_data) { binmode STDOUT, ":raw:encoding(UTF-8)"; } + else { binmode STDOUT } } - - # Case 2: handle unencoded data else { - if ( ref($fh) eq 'IO::File' ) { binmode $fh } - elsif ( $filename eq '-' ) { binmode STDOUT } - else { } # shouldn't happen + + # shouldn't get here + if (DEVEL_MODE) { + my $ref_fh = ref($fh); + Fault(<[_rOpts_]; - my $rinput_string = slurp_stream($input_file); + my $rinput_string = stream_slurp($input_file); return unless ( defined($rinput_string) ); $rinput_string = $self->set_line_separator($rinput_string); @@ -2602,8 +2609,7 @@ sub process_iteration_layer { { $tee_file = $self->[_teefile_stream_] || $fileroot . $self->make_file_extension('TEE'); - ( $fh_tee, my $tee_filename ) = - Perl::Tidy::streamhandle( $tee_file, 'w', $is_encoded_data ); + $fh_tee = Perl::Tidy::streamhandle( $tee_file, 'w', $is_encoded_data ); if ( !$fh_tee ) { Warn("couldn't open TEE file $tee_file: $OS_ERROR\n"); } @@ -4248,7 +4254,7 @@ EOM # open any config file my $rconfig_string; if ($config_file) { - $rconfig_string = slurp_stream($config_file); + $rconfig_string = stream_slurp($config_file); if ( !defined($rconfig_string) ) { ${$rconfig_file_chatter} .= "# $config_file exists but cannot be opened\n"; diff --git a/lib/Perl/Tidy/Debugger.pm b/lib/Perl/Tidy/Debugger.pm index 4ee36ee9..4cb211e4 100644 --- a/lib/Perl/Tidy/Debugger.pm +++ b/lib/Perl/Tidy/Debugger.pm @@ -30,10 +30,9 @@ sub really_open_debug_file { my $self = shift; my $debug_file = $self->{_debug_file}; my $is_encoded_data = $self->{_is_encoded_data}; - my ( $fh, $filename ) = - Perl::Tidy::streamhandle( $debug_file, 'w', $is_encoded_data ); + my $fh = Perl::Tidy::streamhandle( $debug_file, 'w', $is_encoded_data ); if ( !$fh ) { - Perl::Tidy::Warn("can't open $debug_file: $OS_ERROR\n"); + Perl::Tidy::Warn("can't open debug file '$debug_file'\n"); } $self->{_debug_file_opened} = 1; $self->{_fh} = $fh; diff --git a/lib/Perl/Tidy/HtmlWriter.pm b/lib/Perl/Tidy/HtmlWriter.pm index 014b4be3..27ed4c49 100644 --- a/lib/Perl/Tidy/HtmlWriter.pm +++ b/lib/Perl/Tidy/HtmlWriter.pm @@ -98,15 +98,12 @@ sub new { my $html_toc_extension = $args{html_toc_extension}; my $html_src_extension = $args{html_src_extension}; - my $html_file_opened = 0; - my $html_fh; - ( $html_fh, my $html_filename ) = - Perl::Tidy::streamhandle( $html_file, 'w' ); + my $html_fh = Perl::Tidy::streamhandle( $html_file, 'w' ); if ( !$html_fh ) { - Perl::Tidy::Warn("can't open $html_file: $OS_ERROR\n"); + Perl::Tidy::Warn("can't open html file '$html_file'\n"); return; } - $html_file_opened = 1; + my $html_file_opened = 1; if ( !$input_file || $input_file eq '-' || ref($input_file) ) { $input_file = "NONAME"; diff --git a/lib/Perl/Tidy/Logger.pm b/lib/Perl/Tidy/Logger.pm index 14cc62e5..44dc02c4 100644 --- a/lib/Perl/Tidy/Logger.pm +++ b/lib/Perl/Tidy/Logger.pm @@ -382,11 +382,12 @@ sub warning { my $is_encoded_data = $self->{_is_encoded_data}; if ( !$fh_warnings ) { my $warning_file = $self->{_warning_file}; - ( $fh_warnings, my $filename ) = + $fh_warnings = Perl::Tidy::streamhandle( $warning_file, 'w', $is_encoded_data ); - $fh_warnings - or Perl::Tidy::Die("couldn't open $filename: $OS_ERROR\n"); - Perl::Tidy::Warn_msg("## Please see file $filename\n") + if ( !$fh_warnings ) { + Perl::Tidy::Die("couldn't open warning file '$warning_file'\n"); + } + Perl::Tidy::Warn_msg("## Please see file $warning_file\n") unless ref($warning_file); $self->{_fh_warnings} = $fh_warnings; $fh_warnings->print("Perltidy version is $Perl::Tidy::VERSION\n"); @@ -501,9 +502,11 @@ sub finish { if ($save_logfile) { my $is_encoded_data = $self->{_is_encoded_data}; - my ( $fh, $filename ) = - Perl::Tidy::streamhandle( $log_file, 'w', $is_encoded_data ); - if ($fh) { + my $fh = Perl::Tidy::streamhandle( $log_file, 'w', $is_encoded_data ); + if ( !$fh ) { + Perl::Tidy::Warn("unable to open log file '$log_file'\n"); + } + else { my $routput_array = $self->{_output_array}; foreach my $line ( @{$routput_array} ) { $fh->print($line) } if ( $fh->can('close') -- 2.39.5