Sorry, hier nochmal etwas was eher dein Bedürfnis abdecken dürfte. Das ganze ist stark vereinfacht, aber die Idee ist das das jeweilige Objekt ein Attribut Position bekommt. Du brauchst natürlich statt generischer Stat-Objekte, ProcStats- und MemStats- Objekte, die wiederum aus einfacheren Objekten bestehen können, die ebenfalls ein Positions-Attribut bekommen (und evtl. viele andere).
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
package Stat;
use Moose;
has 'val' => (isa => 'HashRef', is => 'rw');
has 'position' => (is => 'rw');
sub add_kv {
my $self = shift;
my %to_add = @_;
my ($k, $v);
$self->{val}->{$k} = $v while (($k, $v) = each %to_add);
}
sub to_s {
my $self = shift;
my ($k, $v, $s);
$s .= $k . "\t" . $v . "\n" while (($k, $v) = each %{$self->{val}});
return $s;
}
package StatSet;
use Moose;
has 'stats' => (isa => 'ArrayRef', is => 'rw');
sub add_stat {
my $self = shift;
my $stat = shift;
push @{$self->{stats}}, $stat if $stat;
}
sub report {
my $self = shift;
my $s;
$s .= $_->to_s . "\n" for (sort { $a->position <=> $b->position } @{$self->stats});
return $s;
}
package main;
my $set = new StatSet;
my $stat1 = new Stat;
my $stat2 = new Stat;
$stat1->add_kv( color => 'green', size => 'huge' );
$stat1->add_kv( amount => 'some' );
$stat1->position(1);
$stat2->add_kv( color => 'blue', size => 'large', amount => 'many' );
$stat2->position(2);
$set->add_stat($stat1);
$set->add_stat($stat2);
print $set->report;
\n\n
<!--EDIT|Ronnie|1146851611-->