% for my $major (@major) { % } % for my $major (@major) { % }
    % my $i = 0; % for my $minor (@minor) { % my $percent = int( 100 * ($data->{$major}{$minor} || 0) / $max );
  • <% $minor %>: <% $percent %>%
  • % $i++; % }
<% $major %>
% my $i = 0; % for my $minor (@minor) { % }
<% $minor %>
<%args> $data $major => undef $minor => undef <%init> my $max = 1; my %minor; for my $major (keys %{$data}) { for (keys %{$data->{$major}}) { $minor{$_}++; $max = $data->{$major}{$_} if $data->{$major}{$_} > $max; } } my @major = $major ? @{$major} : sort keys %{$data}; my @minor = $minor ? @{$minor} : sort keys %minor; return unless @minor and @major; my $each = int( (100 / @minor) ); my $barwidth = int( (100 / @minor) * (3/4) ); my $baroffset = int( (100 / @minor) * (1/8) );