|
| Hjælp til Perl forståelse... (kender C, me~ Fra : Brian Ipsen |
Dato : 27-05-01 01:11 |
|
Hej!
Fra et Perl script (til analyse af multipost-completition på NNTP)
har jeg følgende data:
while (<FILE>) {
# This ugly thing will pull out the subject in $1, the
# part number of this message in $2 and the number of
# parts in this beast in $3. The pattern match will get
#
# subject to extract followed by a (num/num)
# or
# subject to extract followed by a [num/num]
#
if(/(.+) [\(\[]([0-9]+)\/([0-9]+)[\)\]]$/ ) {
# Ignore the "index" parts since they don't contribute
# to the multi-part completion.
next if $2 eq "00" || $2 eq "0";
if( defined ($subj{"$1"}) ) {
($tot_parts,$cnt_parts,$part_no) = split /\t/,
$subj{"$1"};
} else {
($tot_parts,$cnt_parts) = 0;
$part_no = "";
}
if ($tot_parts == 0) {
$tot_parts = $3;
} elsif ($tot_parts != $3) {
#print STDERR "Problems with $1, Total parts should be
$tot_parts not $3\n";
}
$cnt_parts++;
$part_no = $part_no." ".$2;
$subj{"$1"} = $tot_parts."\t".$cnt_parts."\t".$part_no;
}
Mit spørgmål går på hvad det egentlig laver... If statement'en leder
vel efter strenge/linier indeholdende (tal1/tal2) eller [tal1/tal2] -
tal1 vil ligge i $2 og tal2 i $3 - hvis $2 er 00 eller 0 hoppes til
næste linie.
Resten er rimeligt utydeligt for mig (noget for komplekst), men hvis
en eller anden kan forklare (i mere logisk eller C-termer) hvad der
foregår, så har jeg lidt større mulighed for at forstå, hvad der rent
fatisk sker i koden....
/Brian
| |
|
|