-if ($opt{markers} // 1 and $size > 0) {
- my sub orderpos { (($order[$_[0]] + $order[$_[0] + .5]) / 2 - $minval) * $size }
- $barmark[ (sum(@order) / @order - $minval) * $size ] = '='; # average
- $barmark[ orderpos($#order * .31731) ] = '>';
- $barmark[ orderpos($#order * .68269) ] = '<';
- $barmark[ orderpos($#order / 2) ] = '+'; # mean
- $barmark[ -$minval * $size ] = '|' if $minval < 0; # zero
- color(36) for @barmark;
+if ($opt{markers} and $size > 0) {
+ for my $markspec (split /\h/, $opt{markers}) {
+ my ($char, $func) = split //, $markspec, 2;
+ my $pos = eval {
+ if ($func eq 'avg') {
+ return sum(@order) / @order;
+ }
+ elsif ($func =~ /\A([0-9.]+)v\z/) {
+ my $index = $#order * $1 / 100;
+ return ($order[$index] + $order[$index + .5]) / 2;
+ }
+ else {
+ return $func;
+ }
+ };
+ color(36) for $barmark[($pos - $minval) * $size] = $char;
+ }