私はPerlの初心者ですが、Schwartz、foy、Phoenixによる「LearningPerl」を読んだことがあり、言語の理解が弱いです。本やウェブを使った後も、まだ苦労しています。
私の目標は、次のことができるようにすることです。
特定のフォルダー(現在のフォルダー)を検索し、フルパスでファイル名を取得します。完全なパスと現在のフォルダ名でファイル名を保存します。
テンプレートファイルを開き、特定の場所(置換を使用するなど)と現在のフォルダー名(同じテキストファイルの別の場所に、まだここまで取得していません)にフルパスでファイル名を挿入します。
新しく変更したファイルを特定の場所(現在のフォルダー)の新しいファイルに保存します。
処理したいファイル/フォルダーがたくさんあり、perlプログラムが新しいものを作成できるように、perlプログラムをこれらの各フォルダーにコピーする予定です。
私はこれまでに得ました...:
use strict;
use warnings;
use Cwd;
use File::Spec;
use File::Basename;
my $current_dir = getcwd;
open SECONTROL_TEMPLATE, '<secontrol_template.txt' or die "Can't open SECONTROL_TEMPLATE: $!\n";
my @secontrol_template = <SECONTROL_TEMPLATE>;
close SECONTROL_TEMPLATE;
opendir(DIR, $current_dir) or die $!;
my @seq_files = grep {
/gz/
} readdir (DIR);
open FASTQFILENAMES, '> fastqfilenames.txt' or die "Can't open fastqfilenames.txt: $!\n";
my @fastqfiles;
foreach (@seq_files) {
$_ = File::Spec->catfile($current_dir, $_);
push(@fastqfiles,$_);
}
print FASTQFILENAMES @fastqfiles;
open (my ($fastqfilenames), "<", "fastqfilenames.txt") or die "Can't open fastqfilenames.txt: $!\n";
my @secontrol;
foreach (@secontrol_template) {
$_ =~ s/@/$fastqfilenames/eg;
push(@secontrol,$_);
}
open SECONTROL, '> secontrol.txt' or die "Can't open SECONTROL: $!\n";
print SECONTROL @secontrol;
close SECONTROL;
close FASTQFILENAMES;
私の問題は、ファイルのリストを使用してテンプレートテキストファイルの「@」を置き換える方法がわからないことです。
my @secontrol;
foreach (@secontrol_template) {
$_ =~ s/@/$fastqfilenames/eg;
push(@secontrol,$_);
}
置換関数は、「@」を$fastqfilenamesにリストされているファイルのリストに置き換えません。「@」をGLOB(0x8ab1dc)に置き換えます。
私はこれを間違った方法でやっていますか?代用を使用することはできません。代わりに、ファイルのリスト($ fastqfilenames)をtemplate.txtファイルに挿入する必要がありますか?$ fastqfilenamesの代わりに、ファイルのコンテンツ(s / A / {r file.txt ...など)に置き換えることはできますか?助言がありますか?
乾杯、
JamesT
編集:
これはそれをすべて良くしました。
foreach (@secontrol_template) {
s/@/$fastqfilenames/g;
push @secontrol, $_;
}
そして両方の提案として、$fastqfilesはファイルハンドルです。
これを置き換えました: open(my($ fastqfilenames)、 "<"、 "fastqfilenames.txt")またはdie "Ca n't open fastqfilenames.txt:$!\ n";
これとともに:
my $fastqfilenames = join "\n", @fastqfiles;
それをすべて良くしました。お二人に感謝します。