windows powershellでperlのプログラムを動かしたいが、一行目で以下のエラーが出て上手く動作しません
発生している問題・エラーメッセージ
'.' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
該当のソースコード
perl PMiFish.pl 以下PMiFish.plコード #!/usr/bin/perl use strict; use warnings; system "perl ./Scripts/1_Preprocessing.pl"; 以下略 以下1_Preprocessing.plのコード #!/usr/bin/perl use strict; use warnings; #2018/12/04 1_2 Strip_primers change to use the Primer_Cleaner.pl #2018/07/01 1_2_Strip_primers.pl were changed to permit no primer seq #2018/01/29 change Blast to Usearch_global #2018/01/20 output a log file at 1_1 step #2018/01/05 add compress option #This script execute below scripts in each sample #1_1 Merge_paird_reads.pl #1_2_Strip_primers.pl #1_3_Quality_filter.pl #Setting my ($db, $primer, $diff, $separate, $depth, $size, $identity, $identity2, $dictionary, $family, $temporary, $compress, $trim); open (SET, "<", "Setting.txt") or die("error:$!"); while(<SET>){ if($_ =~ /^DB\s*=\s*(\S+)/){$db = $1;} elsif($_ =~ /^Primers\s*=\s*(\S+)/){my $temp = $1;if($temp =~ /^no$/i){$primer = "No";}else{$primer = $temp;}} elsif($_ =~ /^MaxDiff\s*=\s*(\S+)/){$diff = $1;} elsif($_ =~ /^Divide\s*=\s*(\S+)/){$separate = $1;} elsif($_ =~ /^Depth\s*=\s*(\S+)/){$depth = $1;} elsif($_ =~ /^Length\s*=\s*(\d+)/){$size = $1;} elsif($_ =~ /^UIdentity\s*=\s*(\S+)/){$identity = $1;} elsif($_ =~ /^LIdentity\s*=\s*(\S+)/){$identity2 = $1;} elsif($_ =~ /^Dictionary\s*=\s*(\S+)/){$dictionary = $1;} elsif($_ =~ /^Family\s*=\s*(\S+)/){$family = $1;} elsif($_ =~ /^Temporary\s*=\s*(\S+)/){$temporary = $1;} elsif($_ =~ /^Compress\s*=\s*(\S+)/){$compress = $1;} } close(SET); if($diff =~ /^length$/i){$trim = 1;} unless($diff =~ /\d+/){$diff = 2;} unless($separate){$separate = 0;} if($separate =~ /^yes$/i){$separate = 1;} else{$separate = 0;} unless($db){print "Error!! Check the DB name in Setting.txt.\n"; exit;} unless($primer){print "Error!! Check the Primer file name in Setting.txt.\n"; exit;} unless($depth){print "Error!! Check the number of Depth in Setting.txt.\n"; exit;} unless($size){print "Error!! Check the number of Length in Setting.txt.\n"; exit;} unless($identity){print "Error!! Check the upper cut line of Homology Search in Setting.txt.\n"; exit;} unless($identity2){print "Error!! Check the lower cut line of Homology Search in Setting.txt.\n"; exit;} unless($temporary){$temporary = "YES";} unless($compress){$compress = "YES";} unless(-f "./DataBase/$db"){print "No DataBase file or DataBase name didn't match in Setting.txt\n"; exit;} unless($primer =~ /^no$/i){ unless(-f "./DataBase/$primer"){print "No Primers file or file name didn't match in Setting.txt\n"; exit;} } unless(-f "./Dictionary/$dictionary"){ if($dictionary =~ /^no$/i){undef($dictionary);} else{print "The file of Dictionary for common name isn't or don't match the name in Setting.txt\n"; exit;} } unless(-f "./Dictionary/$family"){ if($family =~ /^no$/i){undef($family);} else{print "The file of Dictionary for Family name isn't or don't match the name in Setting.txt\n"; exit;} } #Get primer sequences my $countp = 0; my (%forward, %reverse, $namep); my ($primerF, $primerR); unless($primer =~ /^no$/i){ open (DATA2, "<", "./DataBase/$primer") or die("error:$!"); while(<DATA2>){ if($_ =~ /\#/){next;} chomp($_); if($_ =~ /Forward/){$countp = 1;next;} if($_ =~ /Reverse/){$countp = 2;next;} if($countp == 1){ if($_ =~ /^>(.+)/){$namep = $1;} elsif($_ =~ /^[a-z]/i){$_ =~ tr/[a-z]/[A-Z]/; $forward{$namep} = $_;} } if($countp == 2){ if($_ =~ /^>(.+)/){$namep = $1;} elsif($_ =~ /^[a-z]/i){ my $rev = reverse($_); $rev =~ tr/ATGCURYMKDHBV/TACGAYRKMHDVB/; $reverse{$namep} = $rev;} } } close(DATA2); unless(%forward){print "Error!! No primer seqeunce in $primer\n"; exit;} unless(%reverse){print "Error!! No primer seqeunce in $primer\n"; exit;} foreach(keys %forward){ unless($reverse{$_}){print "Error!! Paird primer need to be the same name!\nCheck $primer\n"; exit;} } foreach(keys %reverse){ unless($forward{$_}){print "Error!! Paird primer need to be the same name!\nCheck $primer\n"; exit;} } my $primer_num = keys %forward; if($primer_num == 1){$separate = 0;} if($trim and $primer_num == 1){ foreach(keys %forward){$primerF = length($forward{$_}); $primerR = length($reverse{$_});} }elsif($trim and $primer_num > 1){ print "Error! \"MaxDiff = length\" in Setting.txt can use when primer pair is one pair\n"; exit; } if($trim){$separate = 0;} } #Database and Usearch check opendir (DIR, "./DataBase") or die ("error:$!"); my @database = readdir DIR; my $dbcheck = 0; foreach(@database){ if ($_ =~ /${db}.udb/){$dbcheck++;} } closedir DIR; opendir (DIR, "./Tools") or die ("error:$!"); my @tool = readdir DIR; my $usearch; foreach (@tool) { if ($_ =~ /(usearch.+)/){$usearch = $1;} } closedir DIR; unless($usearch){print "Error!! Please put an usearch exectable file in Tools directory!\n"; exit;} unless($dbcheck){ my $command = "./Tools/$usearch -makeudb_usearch \"./DataBase/$db\" -output \"./DataBase/${db}.udb\""; system $command; } #Decompressing files opendir (DIR, "./Run") or die ("error:$!"); my @run = readdir DIR; my $gzip = 0; foreach (@run) { if ($_ =~ /.gz$/){$gzip++;} } closedir DIR; if($gzip){ print "Decompressing gz file to fastq file...\n"; foreach (@run) { if ($_ =~ /.gz$/){ my $comand = "gzip -d \"./Run/$_\""; system $comand; } } } #Get data names opendir (DIR, "./Run") or die ("error:$!"); my @read = readdir DIR; my $read_count = 0; my %file; foreach (@read) { if ($_ =~ /(.+)_R1/){$file{$1}++; $read_count++;} if ($_ =~ /(.+)_R2/){$file{$1}++; $read_count++;} } closedir DIR; unless(%file){print "None of fastq files in Run file!!\n"; exit;} foreach(keys %file){ if($file{$_} < 2){print "Error!! Check the Run directory!The analysis needs both R1 and R2 fastq files.\nR1 or R2 fastq files of $_ is not.\n"; exit;} } unless(-d "./Results"){mkdir "./Results";} print "============================================================\n"; print " 1_Preprocessing \n"; print "============================================================\n"; #assemble pair seqs mkdir "./Results/1_1_Merge_paird_reads"; unless($primer =~ /^no$/i){mkdir "./Results/1_2_Strip_primers";} mkdir "./Results/1_3_Quality_filter"; open (LOG, ">", "./Results/log.txt") or die("error:$!"); my (%log, %raw); my @youbi = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'); my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $year += 1900; $mon += 1; if($min < 10){$min = "0$min";} print LOG "Start: $year/$mon/$mday ($youbi[$wday]) $hour:$min\n"; 以下略 ### 試したこと Active perlのインストールしなおし、環境変数の確認 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
そのエラーメッセージはPowerShellではなくCmdのものです。
Cmdで`. perl PMiFish.pl` としていませんか?
ご返事ありがとうございます。
いいえ、これはpowershell上で行っていて
エクスプローラーの動かしたいプログラムがある階層にてshift+右クリックで「powershellをここに開く」からpowershellを開き、コードを打ち込んでいます
そうでしたか。一応試しにその画面で`Get-ChildItem`を実行したらファイル一覧が表示されるでしょうか?
画面キャプチャご提示ください。
あとできればPMiFish.plのコードも。
画像、コード追加しました
Get-ChildItemを実行したところ、ファイルを認識しているようです
質問の編集ありがとうございます。間違いなくPowerShellから実行されてますね、失礼しました。perlのパスも通っているのでperlのスクリプトの方に問題がありそうですね。私はperlは門外漢なのでこれ以上は黙ります。(質問がマイナス評価されているようなので+1して中和しておきます。)
1. このスクリプトをコマンドプロンプトから起動すると動作しますか?
2. このスクリプトはWindowsで動作させることを想定していますか?
回答2件
あなたの回答
tips
プレビュー