避免代码重复

时间:2014-10-13 11:31:24

标签: perl

 if($DSTIP =~ s/(\.)(\d{1,6}$|\w{2,6})$//g){
             $dstip = $dinterface->("$DSTIP");
             $dstport = $PORTS->("$2");
     }
if($DSTIP =~ s/(\.)(\d{1,6}$|\w{2,6})$//g){
             $dstip = $dinterface->("$DSTIP");
             $dstport = $PORTS->("$2");
     }

我试图重写单行以上的代码。我试过了:

      if($SRCIP && $DSTIP  =~ s/(\.)(\)l{1,6}$|\w{2,6})$//g){
        ($srcip, $dstip) = ($dinterface->("$SRCIP"), $dinterface->("$DSTIP"));
        ($srcport, $dstport) = ($PORTS->("$2"), $PORTS->("$2"));
 }

不适合我。

1 个答案:

答案 0 :(得分:6)

如果需要将相同的代码重用于不同的数据,则将其放在函数中。请注意,在您的情况下,涉及的某些变量属于(或多或少)全局范围。可以从函数访问$dinterface$PORTS,但不在那里定义。这是不好的做法。

sub parse_ip {
  my ( $ip ) = @_;

  return ( $dinterface->($ip), $PORTS->($2) )
      if $ip && $ip  =~ s/(\.)(\)l{1,6}$|\w{2,6})$//g;
  return ( undef, undef );
}

# later
my ($dstip, $dstport) = parse_ip($DSTIP);
my ($srcip, $srcport) = parse_ip($SRCIP);