1 2 3 4 5
$report->StoreExportColumn({-header => 'Count', -value => sub { return $_[0]->[0]; } }); $report->StoreExportColumn({-header => 'TimeStamp', -w => 10, -value => sub { return $_[0]->[4]; } }); $report->StoreExportColumn({-h => 'Age', -w => 7, -value => sub { return $_[0]->[3]; } }); $report->StoreExportColumn({-h => 'Prename', -w => 11, -v => sub { return $_[0]->[1]; } }); $report->StoreExportColumn({-h => 'Surname', -width => 8, -v => '$_[0]->[2]' });
Quote1. Das Modul beginnt mit $| = 1;. Warum? Wenn du es brauchst, würde ich es nur an der entsprechenden Stelle mit local $|=1; setzen, damit es nicht für den Rest Auswirkungen hat.
2013-04-18T09:11:56 RaubtierKennst du perlform?
Habe nur ganz schnell rüber geguckt und mir sind 2 Dinge aufgefallen.
1. Das Modul beginnt mit $| = 1;.
Quote2. Ich mal kein eval { $string }.
2013-04-18T20:25:04 jpr652013-04-18T09:11:56 Raubtier2. Ich mal kein eval { $string }.
Das ist der einzige Parameter, für den die String-Variante überflüssig ist, weil hier die Referenz auf eine Sub (anonym oder nicht, macht keinen Unterschied) zwingend erforderlich ist. Sonst kann man den Wert nicht auslesen, denn der ist erst in der Run-Phase bekannt. Aber die startet erst später.
QuoteBei den anderen Parametern kann man durch einen String den Aufruf einer Sub einsparen, das sind bei Zellen 1 Mio. calls bei einer Liste von 10 Spalten und 100.000 Zeilen pro Parameter, der auf eine Zelle angewendet wird.
QuoteAber ob man nun einen String übergibt oder eine Sub-Ref startet, darin kann alles passieren. Dieser Part kann und darf nur vom Entwickler gefüllt werden, da sehe ich kein Problem.
2013-04-18T23:03:30 RaubtierHabe ich nicht verstanden. Was geht mit dem String, das mit einer sub nicht ginge?
2013-04-18T23:03:30 RaubtierSind es also Performancegründe? Sind die gebenchmarkt?
2013-04-18T23:03:30 Raubtier2013-04-18T23:03:30 jpr65Aber ob man nun einen String übergibt oder eine Sub-Ref startet, darin kann alles passieren. Dieser Part kann und darf nur vom Entwickler gefüllt werden, da sehe ich kein Problem.
Mein Punkt war hier, dass es auch an unerwarteten Stellen, wie eben beim Setzen einer Größe (wie hier einer Spaltenbreite), die eigentlich eine Zahl sein sollte, zu Problemen kommen kann, wenn man nicht sehr genau aufpasst und diese eben von außen kommen lässt. Niemand vermutet, dass man damit Code ausführen kann. Daher sollte es auch nicht gehen.
Zusätzlich hast du auch die drei subs
und dann werden solche Dinge getrieben wie $left = "const_length$align($width, ".$left;, was dann später geevalt wird. Ich halte das für extrem schlechten Stil.
2013-04-18T23:03:30 RaubtierEbenso übrigens in deinem Example das my $report = new Report::EasyReportGenerator(); - dieser indirekte Funktionsaufruf ist unschön und ich würde das besser als my $report = Report::EasyReportGenerator->new(); schreiben.
2013-04-19T06:48:16 MuffiVersteh ich das richtig, ein sub-aufruf soll langsamer sein als ein string-eval?
Das glaub ich erst nach einem benchmark.
ref($str)
StoreExportColumn({... })