Как открыть файл из другого каталога в Perl? - PullRequest
0 голосов
/ 28 августа 2018

Я очень плохо знаком с Perl, поэтому я хотел бы знать, есть ли способ для

  1. Открыть файл из другого каталога (например, не из того же каталога, что и perl script.pl)

  2. открыть несколько файлов с одинаковым именем, например, sameName.txt, в одном родительском каталоге, но с разным подкаталогом, например,

    directory:
    - /alias/a/1/sameName.txt
    - /alias/b/1/sameName.txt
    - /alias/c/1/sameName.txt
    

    например, как указано выше, но в то же время в другом каталоге есть тот же файл, sameName.txt, который мне не нужен, например,

    directory:
    - /alias/a/2/sameName.txt
    - /alias/b/2/sameName.txt
    - /alias/c/2/sameName.txt
    

    Как я могу автоматически искать каталог, который хочет пользователь, используя пользовательский ввод <STDIN>, а не жестко запрограммированный, например, в сценарии perl.pl, пользователю нужны все файлы sameName.txt, которые были в каталоге / 1 / sameName.txt, но с другим родителем, который является папками ab и c. Я хочу, чтобы он автоматически читал те файлы sameName.txt, которые находятся в другой папке, чтобы пользователю не приходилось настраивать скрипт каждый раз, когда создается новый путь, например d / 1 / sameName.txt.

  3. если мне нужны данные в этих файлах с одинаковыми именами в разных каталогах, следует ли их зацикливать, сохранять, например, в массивы, или я должен скопировать все содержимое и добавить его в один файл? потому что мне нужно сопоставить данные между файлами, которые я сделал сценарий.

1 Ответ

0 голосов
/ 28 августа 2018
  1. Вы можете открыть файл из любого места, которое вам нравится.

Аргумент имени файла - это путь, и вы связываете его с дескриптором файла для доступа к его данным:

  my $path = '/alias/a/1/sameName.txt';
  open my $fh, '<', $path or die "Could not open $path: $!";
  1. Perl не волнует, имеет ли другой файл в другом каталоге такое же имя.

Вы различаете их с помощью другого дескриптора файла:

  my $path2 = '/alias/a/2/sameName.txt';
  open my $fh2, '<', $path or die "Could not open $path: $!";

Вы можете создать этот второй путь, взяв часть имени файла первого пути и поместив его вместе с другим каталогом. Это основные модули Perl, которые уже должны быть там:

  use File::Basename;
  use File::Spec::Functions;

  my $other_dir = '/alias/a/2';
  my $basename = basename( $path );   # sameName.txt
  my $path2 = catfile( $other_dir, $basename );
  1. Не совсем уверен, что вы пытаетесь сделать.

Возможно, вас заинтересует Learning Perl или другие ресурсы по адресу learn.perl.org .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...