[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