in reply to Re: Print string in same line
in thread Print string in same line

Well, that should work, basically, for strings of non-decreasing length.

If the OP expects that some of the strings to print may decrease in length, then saving the length, so that an appropriate number of spaces can be added to shorter strings to wipe out the prior longer string, could be helpful.

Further, depending on the terminal (or console window) type, if the string exceeds the terminal's line width, there may be some wrap-around that is not recoverable, except via curses (Unix) or some other OS-specific facilities. If the OP expects that some of the lines may exceed the line width of the terminal, then some method of abbreviating the line, showing the most important data, and staying within the line width, could be helpful.

Replies are listed 'Best First'.
Re^3: Print string in same line
by olus (Curate) on Jul 23, 2008 at 10:43 UTC
    If the OP expects that some of the strings to print may decrease in length, then saving the length, so that an appropriate number of spaces can be added to shorter strings to wipe out the prior longer string, could be helpful.

    Just change the print statement to print("\e[1K\r$_");

    As to showing the most important data the OP should take care of formating the line to show what matters. Still, if there is wrapping around, one possible approach is to clear the screen and reprint. An example:

    use strict; use warnings; my @a=("qwert","as","z"); $| = 1; for (0..2) { print "\e[1J\e[H"; print"$a[$_]"x100; sleep(1); } print "\n";

    legend:

    \e[1K - clear from cursor to beginning of the line \r - goto beginning of the line \e[1J - clear from cursor to beginning of the screen. \e[H - Moves the cursor to top left corner
      That's terminal specific. It doesn't work on mine, for example. If you're want that level of control, use Curses or somthing.
      Yeah its much better this way. But I think you forgot to mention to use the "use Win32::Console::ANSI" module. Because when I tried w/o this module there are extra characters displayed in the console and it kept appending to the previous string. Anyways thanks olus and to the others for the suggestions. I'll try to check which of these are more applicable for my script...thanks.
Re^3: Print string in same line
by pau_G (Novice) on Jul 23, 2008 at 09:50 UTC
    You're right, So what I did is get the difference (if there are any) of the number of characters of the previous string to the next to identify the number of spaces to be added in the shorter strings...
      Remember to use Text::CharWidth::mbswidth instead of length if you use unicode...
      []s, HTH, Massa (κς,πμ,πλ)