質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.63%

perlのプログラムが動かない

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,257

peaceLB

score 10

イメージ説明![powershell画面](848a977b10b17ad124d14d2a8e66bf0e.png)### 前提・実現したいこと

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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • peaceLB

    2019/06/10 14:57

    画像、コード追加しました
    Get-ChildItemを実行したところ、ファイルを認識しているようです

    キャンセル

  • mitarai

    2019/06/10 21:22

    質問の編集ありがとうございます。間違いなくPowerShellから実行されてますね、失礼しました。perlのパスも通っているのでperlのスクリプトの方に問題がありそうですね。私はperlは門外漢なのでこれ以上は黙ります。(質問がマイナス評価されているようなので+1して中和しておきます。)

    キャンセル

  • harrek

    2019/06/12 05:58

    1. このスクリプトをコマンドプロンプトから起動すると動作しますか?
    2. このスクリプトはWindowsで動作させることを想定していますか?

    キャンセル

回答 2

checkベストアンサー

+1

1_Preprocessing.pl の中でgzipコマンドを起動しているようですがgzipコマンドがインストールされていないのではないでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/06/12 12:00

    必要なソフトが入っていなかったことが原因だったようで、エラーメッセージはでるもののきちんと動作してくれました。ありがとうございました。

    キャンセル

+1

'.' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

Windowsでコマンドが見つからない場合のエラーメッセージですね。
system は OS上で コマンドを実行するので、その際に出力されてるような気がします。
(なんでエラーになるのかはわかりませんが・・・)

試しに system "perl ./Scripts/... のところの ./ を外してみたらどうなりますか?

system "perl Scripts/1_Preprocessing.pl";
system "perl Scripts/1_4_Rarefaction.pl";
system "perl Scripts/2_1_Find_unique.pl";
system "perl Scripts/2_2_Denoise.pl";
system "perl Scripts/2_3_Separate_chimera.pl";
system "perl Scripts/3_1_Usearch_global.pl";
system "perl Scripts/4_1_Annotation.pl";
system "perl Scripts/5_1_Fasta_for_Phylogenetic_Analysis.pl";
system "perl Scripts/5_2_Summary_table.pl";
system "perl Scripts/5_3_Fasta_classified_by_family.pl";
system "perl Scripts/6_1_Portal.pl";
system "perl Scripts/6_2_Phylogenetic_trees.pl";

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/06/11 13:53

    >peaceLBさん
    当初の状況からは進みましたね。
    これでようやく、組まれたperlプログラムのデバッグになります。

    >KojiDoiさん
    ここから先に出てくる問題は組まれたスクリプトの問題になり、当初の問題とは別になるので、別途質問を立てて進めた方がいいと思うのですがどうでしょう?

    キャンセル

  • 2019/06/11 14:03

    >archiverさん
    1_Preprocessing.plのエラーメッセージこそが最初から出てきている問題点です。

    キャンセル

  • 2019/06/12 12:01

    必要なソフトが入っていないことが原因だったようで、同じエラーメッセージはでますが動作してくれました。皆様ご対応ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.63%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る