Perl: проверить наличие файла с подстановочным знаком - PullRequest
1 голос
/ 05 марта 2020

Я пытаюсь использовать -e для проверки существования файла, $ name - это любой ввод, указанный пользователем, "_file_" - это что-то фиксированное, и * может быть что угодно. В настоящее время он не может обнаружить файл.

if (-e $name."_file_*.txt)
{
   do something;
}

Ответы [ 3 ]

6 голосов
/ 05 марта 2020

Почему бы не использовать glob() для этого?

if (my @files = glob("\Q$name\E_file_*.txt")) {
  # do something
}
1 голос
/ 05 марта 2020

Я бы предложил вам использовать модуль File :: Find.

use strict;
use warnings;
use File::Find;

# this takes the function a reference and will be executed for each file in the directory.
find({ wanted => \&process, follow => 1 }, '/dir/to/search' );

sub process {
  my $filename = $_; 
  my $filepath = $File::Find::name;
  if( $filename=~m/$name\_file\_(.*?)\.txt/ ){
    # file exists and do further processing
  } else {
    # file does not exists
  }
}


1 голос
/ 05 марта 2020

Это один из способов найти существующие файлы с определенным именем:

use strict;
use warnings;
use Cwd;

my $name = "Test";
my $curdir = getcwd();
my @txtfiles = glob "$curdir/*.txt";
foreach my $txtfile (@txtfiles)
{
    if($txtfile=~m/$name\_file\_(.*?)\.txt/)
    {
        print "Ok...\n";    
    }
    else {  next;  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...