Perl 프로그램의 특수 오류

Perl 프로그램의 특수 오류

나는 특정 유형의 파일을 복사하기 위해 이 Perl 프로그램을 작성했습니다. 이 프로그램을 실행하면 매우 짜증나고 이상한 오류가 나타납니다.

#!/usr/bin/perl -w

use strict;


for (my $LAMBDA=0; $LAMBDA<1.05;$LAMBDA += 0.05) {
    print "Processing configuration $LAMBDA...\n";
    chdir "Lambda_${LAMBDA}/Production_MD";
    system("cp *.tpr   ../../dimer_tprs ");
    chdir "../..";
}

이 오류가 표시됩니다.

Processing configuration 0...

Processing configuration 0.05...

Processing configuration 0.1...

Processing configuration 0.15...

Processing configuration 0.2...

cp: cannot stat `*.tpr': No such file or directory
Processing configuration 0.25...
cp: cannot stat `*.tpr': No such file or directory
Processing configuration 0.3...
cp: cannot stat `*.tpr': No such file or directory
Processing configuration 0.35...
cp: cannot stat `*.tpr': No such file or directory
Processing configuration 0.4...
cp: cannot stat `*.tpr': No such file or directory
Processing configuration 0.45...
cp: cannot stat `*.tpr': No such file or directory
Processing configuration 0.5...
cp: cannot stat `*.tpr': No such file or directory
Processing configuration 0.55...
cp: cannot stat `*.tpr': No such file or directory
Processing configuration 0.6...
cp: cannot stat `*.tpr': No such file or directory
Processing configuration 0.65...
cp: cannot stat `*.tpr': No such file or directory
Processing configuration 0.7...
cp: cannot stat `*.tpr': No such file or directory
Processing configuration 0.75...
cp: cannot stat `*.tpr': No such file or directory
Processing configuration 0.8...
cp: cannot stat `*.tpr': No such file or directory
Processing configuration 0.85...
cp: cannot stat `*.tpr': No such file or directory
Processing configuration 0.9...
cp: cannot stat `*.tpr': No such file or directory
Processing configuration 0.95...
cp: cannot stat `*.tpr': No such file or directory
Processing configuration 1...
cp: cannot stat `*.tpr': No such file or directory

그래서 먼저 2-3을 복사한 다음 그런 파일이나 디렉터리가 없다고 하는데 파일과 디렉터리는 거기에 있습니다. 도와주세요.

답변1

두 가지 문제가 있습니다. 첫 번째는 부동 소수점 수학입니다. 부동 소수점 연산에는 항상 버그가 있지만 이 경우에는 문제가 되지 않는 것 같습니다. 또 다른 점은 s 에 대한 chdir오류 검사를 수행 하지 않았다는 것입니다. Lambda_0.2/Production_MD가 없어 보이는 모든 것이 엉망이 된 것 같습니다. 이것이 더 간단한 해결책일 수 있습니다.

find . -maxdepth 3 -mindepth 3 -path "Lambda_*/Production_MD/*.tpr" -print0 |\
grep --null-data -e "Lambda_0\.[0-9]5\?/Production_MD/*.tpr" -e "Lambda_1\.0/Production_MD/*.tpr"|\
xargs -0r cp -t dimer_tprs

관련 정보