这一次,我正在构建一系列数据分析脚本.大致简化,程序结构如下:
01 my $config_var = 999;03 my $result_var = 0;05 foreach my $file (@files) {06 open(my $fh,$file);07 while (<$fh>) {08 &analyzeline($_);09 }10 }12 print "$result_var\n";14 sub analyzeline ($) {15 my $line = shift(@_);16 $result_var = $result_var + calculatedStuff;17 }
在现实生活中,最多有大约六个不同的config_vars和result_vars.
这些脚本主要区别于分配给config_vars的值.主循环在每种情况下都是相同的,analyzeline()将大致相同但可能有一些小的变化.
我可以通过制作此代码的N份副本来实现我的目的,并且在这里和那里进行小的改动;但这严重违反了各种良好设计规则.理想情况下,我想编写一系列脚本,其中只包含一组config var初始化,然后是
do theCommonStuff;
请注意,config_var(及其兄弟)必须可用于公共代码,result_var及其相似内容,analyzeline()会对其进行一些计算.
我应该将“常用”代码打包到模块中吗?创建一个类?使用全局变量?
虽然不完全是代码高尔夫,但我正在寻找一个简单,紧凑的解决方案,这将允许我干,只为差异编写代码.我想我宁愿不从包含所有配置的巨大表中驱动代码,当然也不会使它适应使用数据库.
期待您的建议,谢谢!
更新
既然人们问,这里是真正的analyzeline:
# Update stats with time and call data in one line.sub processline ($) { my $line = shift(@_); return unless $line =~ m/$log_match/; # print " \n"; my ($minute,$function) = (,); $startMinute = $minute if not $startMinute; $endMinute = $minute; if ($minute eq $currentMinute) { $minuteCount = $minuteCount + 1; } else { if ($minuteCount > $topMinuteCount) { $topMinute = $currentMinute; $topMinuteCount = $minuteCount; printf ("%40s %s : %d\n",'',$topMinute,$topMinuteCount); } $totalMinutes = $totalMinutes + 1; $totalCount = $totalCount + $minuteCount; $currentMinute = $minute; $minuteCount = 1; }}
由于这些变量在很大程度上是相互依赖的,我认为单独计算的功能解决方案是不切实际的.我为误导人道歉.
解决方法 继续创建一个类层次结构.您的任务是OOP编程风格的理想选择.这是一个例子:
package Common;sub new{ my $class=shift; my $this=bless{},$class; $this->init(); return $this;}sub init{}sub theCommonStuff(){ my $this=shift; for(1..10){ $this->analyzeline($_); }}sub analyzeline(){ my($this,$line)=@_; $this->{'result'}.=$line;}package Special1;our @ISA=qw/Common/;sub init{ my $this=shift; $this->{'sep'}=','; # special param: separator}sub analyzeline(){ # modifIEd logic my($this,$line)=@_; $this->{'result'}.=$line.$this->{'sep'};}package main;my $c = new Common;my $s = new Special1;$c->theCommonStuff;$s->theCommonStuff;print $c->{'result'}."\n";print $s->{'result'}."\n";总结
以上是内存溢出为你收集整理的皮条客我的Perl代码全部内容,希望文章能够帮你解决皮条客我的Perl代码所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)