zentara has asked for the wisdom of the Perl Monks concerning the following question:

Hi, this is in regards to Re^10: file open in perl tk, where a file being read in, is not being properly displayed in a Tk::Text widget. I sure it is an encoding issue, but I can't quite see what to do.

Simply, I have a file, I create test1.txt

1 2 3 4 5 6 7 8 9 a b c d e f
it's hex view is (minus the f)
31 0A 32 0A | 33 0A 34 0A | 35 0A 36 0A | 37 0A 38 0A | 39 0A 61 0A | +62 0A 63 0A | 64 0A 65 0A 1 2 3 4 5 6 7 8 9 a b c d
Now when I run this thru the following program, the Tk Text widget inserts an unwanted space
#!/usr/bin/perl use warnings; use strict; use Tk; use Tk::FileSelect; use Encode; use utf8; my $mw = MainWindow->new; $mw->configure( -background => 'black', -foreground => 'white' ); $mw->geometry( "400x100" ); $mw->title( "Multiple Windows Test" ); my $button1 = $mw->Button( -text => "view Results", -background => "cyan", -command => \&button1_sub )->pack( -side => "right" ); $mw->Button( -text => "Exit", -command => sub { exit } ) ->pack( -side => "bottom" ); MainLoop; sub button1_sub { my $subwin1 = $mw->Toplevel; $subwin1->geometry( "500x400" ); $subwin1->title( "Sub Window #1" ); my $fh; open( $fh, '<', "./test1.txt" ) or die $!; my @contents = <$fh>; print "@contents\n"; close( $fh ); my $sublable = $subwin1->Scrolled( 'Text', -scrollbars => 'osoe', )- +>pack; $sublable->insert( 'end', "@contents" ); my $subwin_button = $subwin1->Button( -text => "Close window", -command => sub {$subwin1 => 'destroy'} )->pack( -side => "bottom" ); }
The Tk::Text output has an extra space inserted,
1 2 3 4 5 6 7 8 9 a b c d e f
Additionally, if I un-quote "@contents" in the insert
$sublable->insert( 'end', @contents );
I get this strange output
1 3 5 7 9 b d f
It is very cold in my camp, and my brain can't quite figure out what is happening? Thanks. :-)

Update, I see a similar answer was given in Re^2: File contents are not displaying in Perl tk, where

$sublable->insert( 'end', $_ ) for @contents ;
works well. But there still is some strange behavior there.

I'm not really a human, but I play one on earth.
Old Perl Programmer Haiku ................... flash japh

Replies are listed 'Best First'.
Re: Tk::Text and odd unicode behavior
by Anonyrnous Monk (Hermit) on Dec 08, 2010 at 17:43 UTC
    $sublable->insert( 'end', $_ ) for @contents ;
    $sublable->insert( 'end', join('',@contents) );
    works fine for me, too, because - unlike your array interpolation in double quoted strings with default setting of $" - this does not add spaces.

    As for

    $sublable->insert( 'end', @contents );
    behaving strangely: the synopsis for the insert method is
    $text->insert(index, chars, ?tagList, chars, tagList, ...?)

    so when you pass a list of arguments, every other of its elements is being interpreted as a "tagList" parameter. I think this explains what you're getting... No encoding mysteries involved.

      Wow, thanks for restoring my faith in the Textbox. :-) I knew there had to be a rational explanation. ++

      I'm not really a human, but I play one on earth.
      Old Perl Programmer Haiku ................... flash japh