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 #");
##我们首先检查该行含有GNOME bug,
##如果有,那末我们按照以上的1,2两种情况来处理
##对于1,2两种情况来讲,我认为只需要获得GNOME bug的位置,
##然后将该行分成3截
##例如,对于情况1
##we wewe jk GNOME bug #123123 RH bug #123123 sdfsdfw
##
##情况1->分成3截:
###1截:we wewe jk
###2截:GNOME bug #123123
###2截:RH bug #123123 sdfsdfw
##
##对于情况2
##we wewe jk GNOME bug #123123 sdfsdfsdf
##
##情况2->分成3截:
###1截:we wewe jk
###2截:GNOME bug #123123
###2截:sdfsdfsdf
##
##通过以上两种情况来看,我们只需要将包含GNOME bug的行,截成3截即可,
##含有GNOME bug的那截不需要,另外两截提取bug号
###
$bugstr1="";
$bugstr2="";
$bugstr3="";
if($pos ==0)
{
##此处处理以GNOME bug开头的行,此时将该行分成两截即可
$str1=substr($item,0,17);
$str2=substr($item,17);
$bugstr1=$str2;
}
else
{
if($pos>0)
{
##此处处理GNOME bug在行的中间的情况,此时将该行分成三截即可
$str1=substr($item,0,$pos);
$str2=substr($item,$pos,17);
$str3=substr($item,$pos+17);
$bugstr1=$str1;
$bugstr2=$str3;
}
else
{
$bugstr1=$item;
}
}
##在以上处理中,我们直接将需要提取bug号的字符串赋给了$bugstr1,$bugstr2
##那么,我将这几个字符串直接合并,让程序统一提取出bug 号来
$item="$bugstr1 $bugstr2";
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);
}
}
@result;
}