[Toulouse-pm] OSCON (3)

Jérôme Augé eguaj at free.fr
Tue Jul 27 16:42:01 CDT 2004


On Tue, Jul 27, 2004 at 03:16:12PM -0400, Michel Rodriguez wrote:
> 
>     Un autre truc que je savais pas: "print "\r";" revient au début de
>     la ligne sans changer de ligne (sous unix).
> 

Dans le même genre il y a le "\b" pour effacer des caractères. On fait
reculer le curseur et on écrit par dessus les caractères...

Bien pratique pour faire des « petits trucs qui bougent » pour faire
patienter l'utilisateur par exemple :

--8<--
package Roller;

use strict;
use warnings;

sub new {
	my $class = shift;
	my $self = {};
        $self->{'pattern'} = $#_>0?[@_]:[ '-', '\\', '|', '/' ];
	bless $self, $class;
	return $self;
}

sub begin {
	my $self = shift;
	print " " x length($self->{'pattern'}[-1]);
}

sub end {
	my $self = shift;
	print "$_" x length($self->{'pattern'}[-1]) foreach (("\b", " ", "\b"));
}

sub roll {
	my $self = shift;
	my $pattern = shift @{ $self->{'pattern'} };
	print "$_" x length($self->{'pattern'}[-1]) foreach (("\b", " "));
	print "\b" x length($pattern), "$pattern";
	push @{ $self->{'pattern'} }, $pattern;
}

package main;

select STDOUT; $|=1;

my $roller = Roller->new();

print "Let the good times roll... ";

$roller->begin();

my $things_to_do = 30;
while( $things_to_do-- ) {
	$roller->roll();
	select(undef,undef,undef,0.25);
}

$roller->end();

print "Done.\n";
-->8--

Quelques idées de patterns :

  my $roller = Roller->new(
    '[*---]', '[-*--]', '[--*-]', '[---*]', '[--*-]', '[-*--]'
  );

  my $roller = Roller->new(
    '(. )(. )', '( .)( .)', '( °)( °)', '(° )(° )'
  );


-- 
<ESC>:r $HOME/.signature<CR>



More information about the Toulouse-pm mailing list