-1

特定のファイルへのパスを含むファイル「rootfile」を作成し、perl プログラム mymd5.perl が各ファイルの md5sum を取得し、特定の順序で出力します。コマンドラインで名前が指定されている場合、出力をファイルにリダイレクトするにはどうすればよいですか? たとえば、私がそうするなら

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);
4

3 に答える 3

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";
}

}

于 2013-10-13T21:11:28.770 に答える