2013-04-18T23:03:30
RaubtierHabe ich nicht verstanden. Was geht mit dem String, das mit einer sub nicht ginge?
Andersrum: Ich benötige hier die sub, weil ich sonst nicht mehr auf die Daten zugreifen kann. Daher
muss ich den String in eine anonyme sub umwandeln. Aber nur in diesem Fall.
2013-04-18T23:03:30
RaubtierSind es also Performancegründe? Sind die gebenchmarkt?
Das Benchmarking habe ich vor. Man hat viel gehört, was langsam und schnell sein soll, aber das muss man immer austesten, wenn man es wirklich wissen will. Ich mache das aber nur in ausgesuchten Fällen oder falls Performance-Probleme auffallen.
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
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.
Ja, wenn ich nicht sowieso schon
eval("string") durchführen würde, dann würde ich das auch nicht machen.
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.
Interessant, ich wusste gar nicht, dass das möglich ist. Sieht besser aus.