Perl 如果命令行中给出了文件名,如何从文件中读取并将输出定向到文件,如果没有给出参数,如何打印到控制台
我创建了一个文件“rootfile”,其中包含指向特定文件的路径,perl程序mymd5.perl获取每个文件的md5sum并按特定顺序打印。如果命令行中给出了名称,如何将输出重定向到文件?例如,如果我这样做Perl 如果命令行中给出了文件名,如何从文件中读取并将输出定向到文件,如果没有给出参数,如何打印到控制台,perl,redirect,md5,output,Perl,Redirect,Md5,Output,我创建了一个文件“rootfile”,其中包含指向特定文件的路径,perl程序mymd5.perl获取每个文件的md5sum并按特定顺序打印。如果命令行中给出了名称,如何将输出重定向到文件?例如,如果我这样做 perl mymd5.perl md5file 然后它将输出馈送到md5file。如果我这么做了 perl mydm5.perl 它只会打印到控制台 这是我的根文件: /usr/local/courses/cs3423/assign8/cmdscan.c /usr/local/cou
perl mymd5.perl md5file
然后它将输出馈送到md5file。如果我这么做了
perl mydm5.perl
它只会打印到控制台
这是我的根文件:
/usr/local/courses/cs3423/assign8/cmdscan.c
/usr/local/courses/cs3423/assign8/driver.c
/usr/local/courses/cs3423/assign1/xpostitplus-2.3-3.diff.gz
这是我现在的节目:
open($in, "rootfile") or die "Can't open rootfile: $!";
$flag = 0;
if ($ARGV[0]){
open($out,$ARGV[0]) or die "Can't open $ARGV[0]: $!";
$flag = 1;
}
if ($flag == 1) {
select $out;
}
while ($line = <$in>) {
$md5line = `md5sum $line`;
@md5arr = split(" ",$md5line);
if ($flag == 0) {
printf("%s\t%s\n",$md5arr[1],$md5arr[0]);
}
}
close($out);
open($in,“rootfile”)或die“无法打开rootfile:$!”;
$flag=0;
如果($ARGV[0]){
打开($out,$ARGV[0])或死亡“无法打开$ARGV[0]:$!”;
$flag=1;
}
如果($flag==1){
选择$out;
}
而($line=){
$md5line=`md5sum$line`;
@md5arr=拆分(“,$md5line);
如果($flag==0){
printf(“%s\t%s\n”、$md5arr[1]、$md5arr[0]);
}
}
收尾(美元);
您可以按如下方式打印受@ARGV中的值影响的文件名:
这将采用$ARGV[0]
中的文件名,并使用它来命名新文件,edit.$ARGV[0]
#!/usr/bin/perl
use warnings;
use strict;
my $file = $ARGV[0];
open my $input, '<', $file or die $!;
my $editedfile = "edit.$file";
open my $name_change, '>', $editedfile or die $!;
if ($input eq "md5file"){
while ($in){
# Do something...
print $name_change "$_\n";
}
#/usr/bin/perl
使用警告;
严格使用;
my$file=$ARGV[0];
打开我的$input、、$editedfile或die$!;
如果($input eq“md5file”){
while($in){
#做点什么。。。
打印$name\u更改“$\u\n”;
}
}如果您没有将文件句柄赋予打印或打印,则输出将转到标准输出(控制台) 有几种方法可以重定向打印语句的输出
select $out; #everything you print after this line will go the file specified by the filehandle $out.
... #your print statements come here.
close $out; #close connection when done to avoid counfusing the rest of the program.
#or you can use the filehandle right after the print statement as in:
print $out "Hello World!\n";
或许以下内容会有所帮助:
use strict;
use warnings;
while (<>) {
my $md5line = `md5sum $_`;
my @md5arr = split( " ", $md5line );
printf( "%s\t%s\n", $md5arr[1], $md5arr[0] );
}
使用严格;
使用警告;
而(){
my$md5line=`md5sum$\`;
my@md5arr=split(“,$md5line);
printf(“%s\t%s\n”、$md5arr[1]、$md5arr[0]);
}
用法:perl mydm5.pl根文件[>md5file]
最后一个可选参数将直接输出到文件md5file;如果不存在,结果将打印到控制台。实际上不清楚您想要的是什么。你能说得更准确些吗?当你的
标志=1
时,你将不打印任何内容,因为你在标志必须为0的条件下包装了printf语句。好的,我尝试过这个方法,但我的输出文件是空的。我编辑了我的答案。