Thread EasyReportGenerator: New CPAN module in development (16 answers)
Opened by jpr65 at 2013-04-18 08:30

Raubtier
 2013-04-19 01:03
#167146 #167146
User since
2012-05-04
1054 articles
BenutzerIn

user image
2013-04-18T20:25:04 jpr65
2013-04-18T09:11:56 Raubtier
2. 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.


Habe ich nicht verstanden. Was geht mit dem String, das mit einer sub nicht ginge?

Quote
Bei 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.


Sind es also Performancegründe? Sind die gebenchmarkt?

Quote
Aber 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
Code: (dl )
1
2
3
sub const_length_L
sub const_length_R
sub const_length_C

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.

Ebenso ü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.

View full thread EasyReportGenerator: New CPAN module in development