Hello dear monks! I've been driving myself crazy over the code below, I can't figure out how to make it run properly :( The files that I'm trying to match are in the style of AC0001_F00001_S00001.tpr, AC0002_F00002_S00001.tpr, AC0003_F00003_S00001.tpr etc. AC goes from 1 to 50 (so AC0001 to AC0050) and frames go from F00001 to F00020.
So what I'm doing is: I'm putting all my tpr files in an array, then I match their names and then I want to say "for molecule 1 to 2" and "for frame 1 to 2" -> print what files you are finding. However what happens is that, because of the foreach loop, the script print the files that it finds 6 times in total, which is exactly how many tpr files I have. I have tried closing the foreach loop earlier, before the for loops, but that makes no sense. Is there a syntax error? Or am I using the loops totally wrong?
#!/usr/bin/perl/
use strict;
use warnings;
my $tpr = "tpr";
my $id;
my $filepath;
my $batch;
my $number;
my $molec;
my $frame;
my $mdstep;
my @tpr;
@tpr = `ls *.tpr`;
print "Script start \n";
print "\n";
foreach (@tpr) {
/(\w{2})(\d{4})_F(\d{5})_S(\d{5})/;
$id = "AC";
$molec = $2;
$frame = $3;
$mdstep = $4;
for ($molec=2; $molec<=2; $molec++) {
for ($frame=1; $frame<=2; $frame++) {
my $molecform = sprintf ("%04d", $molec);
my $frameform = sprintf ("%05d", $frame);
print "$id${molecform}_F${frameform}_S${mdstep}\.$tpr \n";
}
}
} # end of loop through tpr files