このコードは友人の 1 人から入手しましたが、perl を使用したことがないため、どのように機能するのかわかりません。それを理解するのを手伝ってもらえますか。
このファイルは、遅延を示すいくつかのデータを含むファイルを取得し、間隔内で累積分布関数を取得する必要があります。
#!/usr/bin/perl
#print "Starting converter on file $ARGV[0]\n";
if ($#ARGV < 2 || $#ARGV > 3) {
print "Usage: ac_hist_gen.pl <input file> <num intervals> <output file> [ <interval size> ]\n";
exit(-1);
}
open(infile,"$ARGV[0]") || die "Couldn't open $ARGV[0] for reading.\n";
open(outfile,">$ARGV[2]") || die "Couldn't open $ARGV[2] for writing.\n";
for ($i=0; $i< 100 / $ARGV[1]; $i++) {
$dist[$i] = 0;
$acum[$i] = 0;
}
$max=0;
if ($#ARGV == 2) {
while (<infile>) {
if ($_ > $max) {
$max=$_;
}
}
$intsize = $max / $ARGV[1];
} else {
$intsize= $ARGV[3];
}
close(infile);
#print "size is $numpkts, max is $max, div is $intsize , test is $test\n";
open(infile,"$ARGV[0]") || die "Couldn't open $ARGV[0] for reading.\n";
while (<infile>) {
$val = int($_ / $intsize);
if (($_ / $intsize) == $val) {
$dist[$val-1]++;
} else {
$dist[$val]++;
}
# print "val is $val\n";
}
for ($i=0; $i< $ARGV[1]; $i++) {
$limit = ($i+1) * $intsize;
$acum[$i]+= $dist[$i];
$acum[$i+1] = $acum[$i];
print outfile "$limit $acum[$i]\n";
}
close(outfile);