print "pls input file path:/n";
$fpath=<STDIN>;
chop $fpath;
print "pls input pakage name:/n";
$pgname=<STDIN>;
chop $pgname;
print "pls input group name:/n";
$Gname=<STDIN>;
chop $Gname;
@listNo=&bugNo($fpath, $pgname, $Gname);
print "@listNo/n";
####################################################33
sub bugNo
{
$filepath=$_[0];
$packagename=$_[1];
$groupname=$_[2];
open(MYFILE,"$filepath");
@test1= <MYFILE>;
$num=@test1;
@result=();
$A="";
$B="";
$flag="0";
$packagefalg="0";
for($n=0; $n<=$num; $n++)
{
$item=$test1[$n];
chop $item;
##检查是否是*****DESKT GRoup*****
if ($item =~ //*+ ([a-zA-Z0-9 ]+)/*/)
{
if($1 eq "$groupname")
{
$flag="1";
}
else
{
$flag="0";
}
}
if($flag eq "1")
{
##检查是否是<package name>
if ($item =~ /^< ([a-zA-Z.]+[a-zA-Z0-9-]+[a-zA-Z]+/d?)/)
{
if($1 eq "$packagename")
{
$packagefalg="1";
}
else
{
$packagefalg="0";
}
}
if($packagefalg eq "1")
{
##获取BUG NO,这里我们给子函数传了两个参数,
##一个是当前行的字符串
##一个是已经找到的bug 的数组(主要是让子函数直接将找到的)
@result=&getbuginner($item,@result);
}
}
##返回查找到的数据
@result;
}
##在以下getbuginner函数中,我们将试图处理以下几种情况
##
###1.we wewe jk GNOME bug #123123 RH bug #123123 sdfsdfw
##
###2.we wewe jk GNOME bug #123123 sdfsdfsdf
##
###3.we wewe jk RH bug #123123 sdfsdfsdf
##
###4.we wewe jk #123123 RH bug #123123 sdfsdfw
##
###5.we wewe jk #123123 Rsdsds sdfsd #123123 sdfsdfw
##
##以上五种情况,其实,对于3,4,5来说,我们并不需要特殊处理
##只要把#后面的bug号拿到就行了,也就是说只要该行没有出现GNOME bug
##那末,我们就直接提取#就行了。
##
##也就是说,我们可以先判断该行中是否有GNOME bug,
##如果有,那么就按照1,2来处理
##如果没有,那么直接提取#后面的bug号就行了。
##
##
sub getbuginner
{
$item=$_[0];
@result=$_[1];
$pos=index($item,"GNOME bug");
if($pos != 0)
{
##这种情况是该行含有GNOME bug,
##那么在这里我们可以按照以上的1,2两种情况来处理
##对于1,2两种情况来讲,我认为只需要获得GNOME bug的位置,
##然后将该行分成3截
##例如,对于情况1
##we wewe jk GNOME bug #123123 RH bug #123123 sdfsdfw
##
##分成3截:
###1截:we wewe jk
###2截:GNOME bug #123123
###2截:RH bug #123123 sdfsdfw
##
##对于情况2
##we wewe jk GNOME bug #123123 sdfsdfsdf
##
##分成3截:
###1截:we wewe jk
###2截:GNOME bug #123123
###2截:sdfsdfsdf
##此处按照以上的分析加上相应代码
}
else
##这种情况是该行没有GNOME bug,
##那么在这里我们可以直接提取#bug no
while($item =~ /(#[a-zA-Z0-9]+)/g)
{
$itemflag="0";
for($a=0; $a<@result; $a++)
{
if(@result[$a] eq $B)
{
$itemflag="1";
last;
}
}
if ($itemflag eq "0")
{
@result=(@result, $B);
}
}
}
}