]> git.donarmstrong.com Git - perltidy.git/commitdiff
simplify sub streamhandle
authorSteve Hancock <perltidy@users.sourceforge.net>
Wed, 4 Oct 2023 23:53:06 +0000 (16:53 -0700)
committerSteve Hancock <perltidy@users.sourceforge.net>
Wed, 4 Oct 2023 23:53:06 +0000 (16:53 -0700)
lib/Perl/Tidy.pm
lib/Perl/Tidy/Debugger.pm
lib/Perl/Tidy/HtmlWriter.pm
lib/Perl/Tidy/Logger.pm

index 3c397b8baea53ee522bfa112cce87ea5cb8a8bd4..c8eb6d7f843b7c6767949e4464482e9cea4b7e56 100644 (file)
@@ -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(<<EOM);
+unexpected streamhandle state for file='$filename' mode='$mode' ref(fh)=$ref_fh
+EOM
+            }
         }
     }
 
-    return $fh, ( $ref or $filename );
+    return $fh;
 } ## end sub streamhandle
 
-sub slurp_stream {
+sub stream_slurp {
 
     my ($filename) = @_;
 
@@ -348,7 +356,7 @@ EOM
     }
 
     return $rinput_string;
-} ## end sub slurp_stream
+} ## end sub stream_slurp
 
 {    ## begin closure for sub catfile
 
@@ -647,8 +655,7 @@ EOM
     my $postfilter         = $input_hash{'postfilter'};
 
     if ($stderr_stream) {
-        ( $fh_stderr, my $stderr_file ) =
-          Perl::Tidy::streamhandle( $stderr_stream, 'w' );
+        $fh_stderr = Perl::Tidy::streamhandle( $stderr_stream, 'w' );
         if ( !$fh_stderr ) {
             croak <<EOM;
 ------------------------------------------------------------------------
@@ -1525,7 +1532,7 @@ sub get_decoded_string_buffer {
 
     my $rOpts = $self->[_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";
index 4ee36ee9e73b538455ec13528337bb91a7b81132..4cb211e4a4cbd15cf54890edfa9e0932b93b3110 100644 (file)
@@ -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;
index 014b4be3dd20773e23d0887dee512fee21388d2e..27ed4c4938cbd30ee87eb87195ab9ffadeef035f 100644 (file)
@@ -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";
index 14cc62e505626ec8635af13692396233def5461a..44dc02c4e69b97ceddf3af8d87c23dfa4748c385 100644 (file)
@@ -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')