現在、2つまたは3つのコマンドライン引数を持つプログラムを持っていますfind.pl [i] <perlRegexPattern> <listOfFiles>.
find.pl proj1 Data
またはfind.pl -i proj1 Data
を渡すと、プログラムはif文を通過しますが、私のプログラムが私はそれを渡すしようとするとfind.pl -i ".*proj1.*" DataA/*
のようなものを受け入れ、私のプログラムは2番目のifステートメントを通過しません。私はこれらをパラメータとして渡す方法を理解しておらず、それをプログラムで使用しています。Perlがコマンドライン引数を渡す
#!/usr/bin/perl -w
if(@ARGV < 2){
print "\n2) Usage: find.pl [-i] <perlRegexPattern> <listOfFiles>\n\n";
exit;
}
if(@ARGV > 3){
print "\n3) Usage: find.pl [i] <perlRegexPattern> <listOfFiles>\n\n";
exit;
}
if(@ARGV == 3 && $ARGV[0] ne "-i"){
die "\n4) Usage: find.pl [i] <perlRegexPattern> <listOfFiles>\n\n";
}
if ($#ARGV eq 1){
print "normal case\n";
my ($pattern, $filelist) = @ARGV;
print "$pattern $filelist\n";
opendir(DIR , $filelist) or die "\nCannot open directory $filelist\n\n";
while (($fp = readdir(DIR))){
if($fp =~ m/$pattern/){
print "$fp\n";
}
elsif($fp =~ m/.*\.txt/){
print "$fp is a text file\n"; #Still working on this part
open(FILE, '<' , $fp) or die ("\nCould not open file $fp\n\n");
while(<FILE>){
if($_ =~ m/$pattern/){
print "$fp : $_ : line pattern match\n";
last;
}
}
close(FILE);
}
}
}
else{
print "-i case\n";
my ($pattern, $filelist) = @ARGV[1 .. 2];
print "$pattern $filelist\n";
#TODO
}
複数のファイルが渡されたときに 'exit'を呼び出します。(' @ARGV> 3')... – ikegami
@ikegamiあなたが意味するものはかなり得られません。 –
'exit'を呼び出さなかった場合、あなたのプログラムは' exit'しないでしょう。 – ikegami