perl语言求助 请问下面的perl是什么意思啊? 最好能每行都给翻译下,我准备改写成python的
#!/usr/bin/perlusestrict;our(@input,%files,);foreach(@ARGV){push(@input,@ARGV);}die"U...
#!/usr/bin/perl
use strict;
our (@input,%files,
);
foreach (@ARGV)
{
push(@input,@ARGV);
}
die "Usage: $0 <xxxxx.cmd> ...\n" unless @input;
foreach my $cmd (@input)
{
open(CMD,$cmd) || die "Cannot open $cmd\n";
while (<CMD>)
{
chop;
next unless /-o\s/;
$_=$';
s/\s.*$//;
s/\.o$/.D/;
my $depFile=$_;
open (D,$depFile);
my $dir=<D>;
chop($dir);
$dir=~s/\#//;
while (<D>)
{
chop;
s/\\$//;
s/.*:\s//;
foreach my $file (split)
{
$file=$dir."/".$file unless $file=~m/^\//;
$files{$file}++;
}
}
}
}
foreach my $file (keys %files)
{
print $file,"\n";
} 展开
use strict;
our (@input,%files,
);
foreach (@ARGV)
{
push(@input,@ARGV);
}
die "Usage: $0 <xxxxx.cmd> ...\n" unless @input;
foreach my $cmd (@input)
{
open(CMD,$cmd) || die "Cannot open $cmd\n";
while (<CMD>)
{
chop;
next unless /-o\s/;
$_=$';
s/\s.*$//;
s/\.o$/.D/;
my $depFile=$_;
open (D,$depFile);
my $dir=<D>;
chop($dir);
$dir=~s/\#//;
while (<D>)
{
chop;
s/\\$//;
s/.*:\s//;
foreach my $file (split)
{
$file=$dir."/".$file unless $file=~m/^\//;
$files{$file}++;
}
}
}
}
foreach my $file (keys %files)
{
print $file,"\n";
} 展开
1个回答
展开全部
#!/usr/bin/perl
use strict;
our (@input,%files, # 定义一个包全局数组和哈希
);
foreach (@ARGV) # 循环输入参数
{
push(@input,@ARGV); # 将输入参数push到@input
}
die "Usage: $0 <xxxxx.cmd> ...\n" unless @input; # 如果@input为空,则退出并显示错误信息
foreach my $cmd (@input) # 循环@input,并将每一项赋值给$cmd
{
open(CMD,$cmd) || die "Cannot open $cmd\n"; # 使用CMD文件句柄打开文件$cmd,如果打开失败则退出并显示错误信息
while (<CMD>) # 循环读取文件句柄,并将每一行赋值给内置变量$_
{
chop; # 删除$_的最后一个字符(应该是换行符)
next unless /-o\s/; # 如果$_不匹配/-o\s/,则跳过本次循环
$_=$'; # 上个匹配信息后的字符串赋值给$_
s/\s.*$//; # 将$_中的"\s.*$"替换成空(相当于删除)
s/\.o$/.D/; # 将$_中的".o"结尾的替换成".D"
my $depFile=$_; # 赋值
open (D,$depFile); # 使用文件句柄D打开$depFile文件
my $dir=<D>; # 读取一行数据
chop($dir); # 去除最后一个字符
$dir=~s/\#//; # 替换#号
while (<D>) # 循环读取每一行,并赋值给$_
{
chop; # 去除$_的最后一个字符
s/\\$//; # 替换
s/.*:\s//; # 替换
foreach my $file (split) # 将$_以" "(空格)拆分成数组,并循环
{
$file=$dir."/".$file unless $file=~m/^\//; # 如果$file的第一个字符不是"/",则在$file的前面添加$dir."/",PS: perl中"."(点号)用来拼接字符串
$files{$file}++; # 给哈希变量赋值,这句相当于$files{$file} = 1;
}
}
}
}
foreach my $file (keys %files) # 循环%files的key
{
print $file,"\n"; # 输出
}
如有不懂的地方继续追问
use strict;
our (@input,%files, # 定义一个包全局数组和哈希
);
foreach (@ARGV) # 循环输入参数
{
push(@input,@ARGV); # 将输入参数push到@input
}
die "Usage: $0 <xxxxx.cmd> ...\n" unless @input; # 如果@input为空,则退出并显示错误信息
foreach my $cmd (@input) # 循环@input,并将每一项赋值给$cmd
{
open(CMD,$cmd) || die "Cannot open $cmd\n"; # 使用CMD文件句柄打开文件$cmd,如果打开失败则退出并显示错误信息
while (<CMD>) # 循环读取文件句柄,并将每一行赋值给内置变量$_
{
chop; # 删除$_的最后一个字符(应该是换行符)
next unless /-o\s/; # 如果$_不匹配/-o\s/,则跳过本次循环
$_=$'; # 上个匹配信息后的字符串赋值给$_
s/\s.*$//; # 将$_中的"\s.*$"替换成空(相当于删除)
s/\.o$/.D/; # 将$_中的".o"结尾的替换成".D"
my $depFile=$_; # 赋值
open (D,$depFile); # 使用文件句柄D打开$depFile文件
my $dir=<D>; # 读取一行数据
chop($dir); # 去除最后一个字符
$dir=~s/\#//; # 替换#号
while (<D>) # 循环读取每一行,并赋值给$_
{
chop; # 去除$_的最后一个字符
s/\\$//; # 替换
s/.*:\s//; # 替换
foreach my $file (split) # 将$_以" "(空格)拆分成数组,并循环
{
$file=$dir."/".$file unless $file=~m/^\//; # 如果$file的第一个字符不是"/",则在$file的前面添加$dir."/",PS: perl中"."(点号)用来拼接字符串
$files{$file}++; # 给哈希变量赋值,这句相当于$files{$file} = 1;
}
}
}
}
foreach my $file (keys %files) # 循环%files的key
{
print $file,"\n"; # 输出
}
如有不懂的地方继续追问
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询