print join "\n", map {"$_->[0] $_->[1] $_->[2]"} map $_->[0], sort { $a->[2] <=> $b->[2] # int || $a->[3] <=> $b->[3] # fract || $a->[1] cmp $b->[1] # type || ( $a->[1] eq 'on' ? $a->[5] <=> $b->[5] # flagValue : $b->[5] <=> $a->[5] ); # off case } map { my ($type, $item, $index) = @$_; my($fract) = $index =~ /\.(\d+)/; my $mode = ${$tagTypes{$item}}[2]; my $flagValue = flagValue($mode); [ $_, $type, int($index), $fract, $mode, $flagValue ]; } @tagIndexes;