Если заявление не видит файл - PullRequest
0 голосов
/ 07 сентября 2018

У меня проблема с оператором if в Perl.

Я не могу получить оператор if для просмотра файла с помощью -e. У меня в основном есть файлы с расширением .new и .old.

my $dir      = "/Users/henry/Desktop/perltest/templates";
my @oldfiles = glob "$dir/*.new";
my $oldfile;

print "checking for new templates\n";

foreach $oldfile ( @oldfiles ) {

    print "$oldfile\n";

    if ( $oldfile =~ /(\S+)\.new/ ) {

        my $newfile = $1;
        print "$newfile\n";

        if ( -e $newfile ) {
            print "file exist\n";
        }
        else {
            print "file does not exist\n";
        }
    }
};

Вот мой вывод:

checking for new templates
/Users/henry/Desktop/perltest/templates/a.txt.new
/Users/henry/Desktop/perltest/templates/a.txt
file does not exist
/Users/henry/Desktop/perltest/templates/b.txt.new
/Users/henry/Desktop/perltest/templates/b.txt
file does not exist
/Users/henry/Desktop/perltest/templates/m.txt.new
/Users/henry/Desktop/perltest/templates/m.txt
file does not exist
/Users/henry/Desktop/perltest/templates/n.txt.new
/Users/henry/Desktop/perltest/templates/n.txt
file does not exist

1 Ответ

0 голосов
/ 07 сентября 2018

У меня есть файлы с расширением .new и .old

Итак, у вас есть a.txt.new и a.txt.old, но нет a.txt, и сообщение file does not exist кажется правильным

Вы, похоже, запутались в своих переменных: у вас есть все имена файлов *.txt.new в массиве с именем @oldfiles, в то время как $newfile не имеет суффикса .new или .old. Возможно, вы имели в виду нечто большее?

my $dir      = "/Users/henry/Desktop/perltest/templates";
my @oldfiles = glob "$dir/*.old";

print "Checking for new templates\n\n";

for my $oldfile ( @oldfiles ) {

    print "Old file \"$oldfile\"\n";

    my $newfile = $oldfile;
    $newfile =~ s/\.old$/.new/;

    print "New file \"$newfile\" ";

    if ( -e $newfile ) {
        print "exists\n";
    }
    else {
        print "doesn't exist\n";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...