Tri sur une colonne d'un tableau
Bonjour,
Je n'arrive toujours pas à faire des tris dans les tableau :arf:
Voici une script qui utilise la fonction CPAN Proc::ProcessTable dont j'ai demandé de me donner le temps d'utilisation de processus chrome :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| #!/usr/bin/perl
use strict;
use warnings;
use Proc::ProcessTable;
use POSIX ;
#Temps epoc Local
my $times = mktime (localtime);
my $t = new Proc::ProcessTable;
foreach my $p ( @{$t->table() } ){
if ( $p->cmndline() =~ /chrome/ ) {
# association de l'uid avec le login
my $login= getpwuid $p->uid();
my $pid = $p->pid() ;
# calcul du temps d'utilisation
my $diff_times=$times - $p->start() ;
my $jours=int($diff_times / 86400 ) ;
my $heures=int($diff_times / 3600 ) ;
my $minutes=int(($diff_times % 3600) / 60);
my $secondes=int((($diff_times % 3600) % 60));
# Concaténation du tableau
my @tab = ($login, $diff_times, $pid, $jours, $heures, $minutes, $secondes );
print "@tab\n";
}
} |
Cela me donne le tableau suivant :
user 2388 13654 0 0 39 48
user 2388 13659 0 0 39 46
user 2388 13660 0 0 39 45
user 2388 13662 0 0 39 40
user 2388 13666 0 0 39 36
J'aimerais que le processus le plus jeunes apparaisse en premier.
J'ai essayé la fonction sort de différente manière avec cette fonction par exemple :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
..../...
my @tab = ($login, $diff_times, $pid, $jours, $heures, $minutes, $secondes );
@tab = sort bydiff_times @tab;
}
}
sub bydiff_times {
my $a1 = $$a[2];
my $b1 = $$b[2];
print "$a1\n";
$a1 <=> $b1;
} |
et j'ai eu le message d'erreur suivant :
Can't use string ("user) as an ARRAY ref while "strict refs" in use at ./Monitor_Chrome.pl line 27.
Merci de votre aide.