私は2,000を超えるサブディレクトリのそれぞれの中で "pairsAngles.txt"から "Distance:"という文字列をgrepしようとしていました。サブディレクトリの名前はcsvファイルから取得されます。しかし何らかの理由でforeach()はループの始めからすべてを再起動します。私は、問題の原因となっているステップわからない どうやらすべての距離が1列にすることになっている...Perl:foreachで再起動するための冗長性?
:だから、出力は次のようになります。 コードを次のように
#!/usr/bin/perl -w
use strict;
use warnings;
use File::Find;
use List::MoreUtils qw(uniq);
use Cwd qw(cwd);
use Text::CSV_XS;
use Data::Dumper;
my @pairs=qw();
my @result=();
my $in;
my $out;
my $pairs;
my $dist = "";
my $dir = "/home/avabelieve/aaPROJECT/helicalPair_ax/selectedPairs/renumberedPdb/clusterPairs-1.25-12-05_windows.12.resle3.2A.RMSD1.3/oligomerAngle";
my $cluster = "clst1.csv";
open ($in, $cluster) || die "cannot open \"$cluster\": $!";
my $cU = "clst1Updated.csv";
open ($out, ">$cU") || die "cannot open '$cU' $!";
my $csv = Text::CSV_XS->new ({ binary => 1, auto_diag => 1, eol => $/ });
while (my $c1 = <$in>) {
chomp $c1;
push @pairs, $c1;
foreach $c1 (uniq @pairs) {
find (\&Matches, "$dir/$c1");
sub Matches {
open ($pairs, "pairsAngles.txt") or die "$!";
while (my $dist = <$pairs>) {
if ($dist =~ m/Distance: /) {
chomp $dist;
push (@result, "$dist\n");
@result = split "\t", $dist;
}
}
}
}
chdir "..";
if (not $csv->eof) {
$csv->error_diag();
}
$csv->say ($out, [uniq @pairs, @result]);
}
close $out or die "$!";
「* foreach()はすべてのループの先頭から再起動します」と...「何の始まり?そして、そのループの始まりは?私はあなたが何を意味するか知っていると思いますが、あなたは明確にすることができますか? – Schwern
すべてのサブディレクトリ名を含むcsvファイルの先頭。 –