in reply to Re: Perl or my terminal?
in thread Perl or my terminal?

Which is really weird, cos I don't see the same effect when I run the following D code:

import std.file; int main( char[][] args ) { for( int i=0; i<99; i++ ) printf( "123456789 " ); printf( "\n" ); for( int i=0; i<125; i++ ) printf( "xx\t" ); printf( "\n" ); return 0; }

Nor the equivalent C code:

#include <stdlib.h> int main( int argc, char **argv ) { int i; for( i=0; i<99; i++ ) printf( "123456789 " ); printf( "\n" ); for( i=0; i<125; i++ ) printf( "xx\t" ); printf( "\n" ); return 0; }

Nor this version of the perl code:

for( $i=0; $i<99; $i++ ){ printf( "123456789 " ) } printf( "\n" ); for( $i=0; $i<125; $i++ ){ printf( "xx\t" ) } printf( "\n" );;

It only seems to happen when I use:

print join ' ', ('123456789') x 99; print join "\t", ('xx') x 125;;

Which makes about as much sense as a chocolate teapot?


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
"Too many [] have been sedated by an oppressive environment of political correctness and risk aversion."

Replies are listed 'Best First'.
Re^3: Perl or my terminal?
by shmem (Chancellor) on Jun 24, 2007 at 07:42 UTC
    The only difference I see between your original perl version and other languages is that in the latter you loop, while in the former you output each line as one string. Could that be the reason? e.g. 512 byte boundary or such?

    What happens if you redirect the output of each version into files? are they different?

    --shmem

    _($_=" "x(1<<5)."?\n".q·/)Oo.  G°\        /
                                  /\_¯/(q    /
    ----------------------------  \__(m.====·.(_("always off the crowd"))."·
    ");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}
      ... in the latter you loop, while in the former you output each line as one string. Could that be the reason?

      Yep! You hit the nail on the head. The following C version produces the same weird output:

      #include <stdlib.h> int main( int argc, char **argv ) { int i; char l[1000] = { 0, }; for( i=0; i<99; i++ ) sprintf( &l[ i * 10 ], "%s", "123456789 " ); printf( "%s\n", l ); for( i=0; i<99; i++ ) l[ i ] = 0; for( i=0; i<125; i++ ) sprintf( &l[ i * 3 ], "%s", "xx\t" ); printf( "%s\n", l ); return 0; }

      And, if I redirect any of the correct versions to a file and then use the type command to display them, it results in the groups of 3 behaviour. The terminal driver is screwed.


      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.
      What happens if you redirect the output of each version into files? are they different?

      No. They all look identical in an editor. Which only leaves the terminal driver as suspect. Still, it is very bizarre.


      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.