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"));
}
不适合我。
答案 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);