Karawane

 

Perl Open Report Framework

CPAN: Report::Porf

Index

Karawane

 

 

Hallo,

ich entwickle ein neues Report Framework, das aus (einer Liste von) Arrays, Hashes oder Objects einen Report generiert, als Text, CSV, HTML, XML, ....

Download

Die aktuelle Version 2.x findet sich auf dem CPAN: Report::Porf

Docs

Die folgenden Docs beziehen sich auf Verson 1.x. Inzwischen wurden alle Methoden/Subs von CamelCase auf "_"-Schreibweise umgestellt.

Features

Als Einzeiler zum Debuggen mit auto_report()

 
  use Report::Porf qw(:all);

  auto_report(\@list_of_hashes);        # prints out first 10 data rows

  auto_report(\@list_of_hashes, $file); # writes out all data rows into file
 

Konfiguration

Pro Spalte (Column), Zelle (Cell):

In Planung


Warum noch ein neuer Perl-Report?

Es gibt natürlich diverse Perl-Report-Generatoren, aber ich habe nicht das passende gefunden. Ich kenne aber auch noch nicht alle...

Mindestens eine Eigenschaft fehlt den bereits vorhandenen Report-Generatoren/Frameworks:

Deshalb habe ich mit der Entwicklung des neuen Perl-Open-Report-Frameworks begonnen. HTML, Text und CSV werden bereits unterstützt.

Wer möchte, kann mit mir in meinem Blog auf blogspot über Porf diskutieren.


Beispiel

Wenn man die Automatik nicht verwenden und die Kontrolle übernehmen möchte, kann man sich die Spalten (hier drei) auch selbst konfigurieren:

 
 #### --- Alternative 1 --- ARRAY --- configure columns like this ---------------------
 my $prename = 1;
 my $surname = 2;
 my $age     = 3;

 $report->configure_column(-header => 'Prename', -value_indexed => $prename ); # long
 $report->conf_col        (-h      => 'Surname', -val_idx       => $surname ); # short
 $report->cc              (-h      => 'Age',     -vi            => $age     ); # minimal
 
oder
 
 #### --- Alternative 2 --- HASH --- configure columns like this ----------------------
 $report->configure_column(-header => 'Prename', -value_named => 'Prename' ); # long
 $report->conf_col        (-h      => 'Surname', -val_nam     => 'Surname' ); # short
 $report->cc              (-h      => 'Age',     -vn          => 'Age'     ); # minimal

 
oder
 
 #### --- Alternative 3 --- OBJECT --- configure columns like this ------------------------
 $report->configure_column(-header => 'Prename', -value_object => 'GetPrename()'); # long
 $report->conf_col        (-h      => 'Surname', -val_obj      => 'GetSurname()'); # short
 $report->cc              (-h      => 'Age',     -vo           => 'GetAge()'    ); # minimal

 
oder
 
 #### --- Alternative 4 --- Free --- configure columns like this --------------------------
 $report->configure_column(-h => 'Prename',  -value =>    '"Dr. " . $_[0]->{Surname}'    );
 $report->conf_col        (-h => 'Surname',    -val => sub { return $_[0]->{Prename}; }; );
 $report->cc              (-h => 'Age (Months)', -v =>     '(12.0 * $_[0]->GetAge())'    );
 

Das ist die absolut minimale Konfiguration. Auf CPAN gibt es Beispiele für weitere Möglichkeiten.


Ergebnisse

Und so sieht das Ergebnis aus:

Als HTML-Tabelle:
PrenameSurnameAge
Vorname 1Name 16.66666666666667
Vorname 2Name 213.3333333333333
Vorname 3Name 320
Vorname 4Name 426.6666666666667
Vorname 5Name 533.3333333333333
Vorname 6Name 640
Vorname 7Name 746.6666666666667
Vorname 8Name 853.3333333333333
Vorname 9Name 960
Vorname 10Name 1066.6666666666667
Vorname 11Name 1173.3333333333333
Vorname 12Name 1280
Vorname 13Name 1386.6666666666667
Vorname 14Name 1493.3333333333333
Vorname 15Name 15100


Als Text:

*============+============+============*
|   Prename  |   Surname  |     Age    |
*------------+------------+------------*
| Vorname 1  | Name 1     | 7.69230769 |
| Vorname 2  | Name 2     | 15.3846153 |
| Vorname 3  | Name 3     | 23.0769230 |
| Vorname 4  | Name 4     | 30.7692307 |
| Vorname 5  | Name 5     | 38.4615384 |
| Vorname 6  | Name 6     | 46.1538461 |
| Vorname 7  | Name 7     | 53.8461538 |
| Vorname 8  | Name 8     | 61.5384615 |
| Vorname 9  | Name 9     | 69.2307692 |
| Vorname 10 | Name 10    | 76.9230769 |
| Vorname 11 | Name 11    | 84.6153846 |
| Vorname 12 | Name 12    | 92.3076923 |
| Vorname 13 | Name 13    | 100        |
*============+============+============*


© 2013 - 2014 Ralf Peine / Jupiter Programs