On Sat, 26 Jul 2003 20:32:21 +0200, Anders wrote:
> Jeg har eksperimenteret med splice men kan ikke få det til at
> virke...
> Nogen der har nogle forslag til hvordan problemet kan løses?
Jeg foreslår at du poster det du har prøvet, og spørger ud fra det.
Herunder er to muligheder, en der bruger split og splice, og en der
bruger et regulært udtryk. regexp() er væsentligt hurtigere end
splitsplice() (som jo splitter op i atomer og samler igen).
== =
#!/usr/bin/perl
use strict;
use warnings;
my (@snmplist, @maclist, @valuelist);
while (<>) {
regexp($_);
}
use Data::Dumper; print Dumper(\@snmplist, \@maclist, \@valuelist);
###
use Benchmark qw(:all);
cmpthese(
250000,
{
splitsplice=>'splitsplice("17.4.3.1.2.0.0.180.75.15.173 = 1\n");',
regexp=>'regexp("17.4.3.1.2.0.0.180.75.15.173 = 1\n");',
}
);
sub splitsplice {
my ($line)=@_;
chomp $line;
my ($a, $value)=split /\s*=\s*/, $line;
my @mac=split "[.]", $a;
my @snmp=splice @mac, 0, 5;
my $mac=join ".", @mac;
my $snmp=join ".", @snmp;
push @snmplist, $snmp;
push @maclist, $mac;
push @valuelist, $value;
}
sub regexp {
my ($line)=@_;
$line=~/^((\d+[.]){4}\d+)[.]([\d.]*)\s*=\s*(.*)$/;
my ($snmp, $mac, $value)=($1, $3, $4);
push @snmplist, $snmp;
push @maclist, $mac;
push @valuelist, $value;
}
== =
Nu kommer der sikkert en masse og gør det meget smartere
Mvh.
--
"This whole business of Santa rewarding good kids and Adam Sjøgren
neglecting bad kids really bugs me." asjo@koldfront.dk