Viendo el código de PDF::ReportWriter, se ve que el resultado de esas dos funciones es distinta:
Using perl Syntax Highlighting
if ( $cell->{colour_func} ) {
if ( $self->{debug} ) {
print "\nRunning colour_func() on data: " . $string . "\n";
}
$self->{txt}->fillcolor( $cell->{colour_func}( $string, $row, $opt ) || "black" );
} else {
$self->{txt}->fillcolor( $cell->{colour} || "black" );
}
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
Efectivamente, el color que la función devuelve es la que se guarda en $self->{txt}->fillcolor().
En cambio, con background_func, el funcionamiento es distinto.
Using perl Syntax Highlighting
if ( $cell->{background_func} ) {
if ( $self->{debug} ) {
print "\nRunning background_func() \n";
}
$background = $cell->{background_func}($opt->{current_value}, $opt->{current_row}, $opt);
}
else {
$background = $cell->{background};
}
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
y a partir de aquí, se utilizar $background como una referencia a un hash:
Using perl Syntax Highlighting
if ( $background->{shape} ) {
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Si miras la documentación del módulo, hay una sección que se llama
BACKGROUNDS, donde te explica que debe ser un hash con estos atributos:
Using text Syntax Highlighting
shape
colour
border
borders
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
así que es eso lo que debe devolver la función definida en background_func: una referencia a un hash de ese tipo.
Por ejemplo, podría ser así (no probado):
Using perl Syntax Highlighting
sub red_if_fantastic
{
my $data = shift;
my %background;
$background{shape
} = "box";
$background{border
} = "black";
$background{borders
} = "all";
if ( $data eq "Fantastic" ) {
$background{colour
} = "red";
} else {
$background{colour
} = "black";
}
return \%background;
}Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4