У меня есть программа Perl для чтения .html и работает только в том случае, если программа находится в том же каталоге, что и .html.
Я хотел бы иметь возможность запускать в разных каталогах и передавать местоположение html в качестве параметра. Программа (пример оболочки ниже) пересекает подкаталог «sub» и его подкаталоги для поиска .html, но работает только тогда, когда мой файл perl находится в том же подкаталоге «sub». Если я помещаю файл Perl в домашний каталог, что на один шаг назад из подкаталога «sub», он не работает.Попытка передать подкаталог в качестве параметра в Perl
В оболочке, если я нахожу «perl project.pl ./sub» из моего домашнего каталога, он говорит, что не открывается ./sub/file1.html. Данный файл или каталог отсутствует. Однако файл существует в этом точном месте. file1.html - это первый файл, который он пытается прочитать.
Если я сменил каталоги в оболочке на этот подкаталог и переместил файл .pl , то тут же скажите в оболочке: «perl project.pl ./» все в порядке.
Для поиска каталогов, я был с помощью File :: Find понятие, которое я нашел здесь: How to traverse all the files in a directory; if it has subdirectories, I want to traverse files in subdirectories too Find::File to search a directory of a list of files
#!/usr/bin/perl -w
use strict;
use warnings;
use File::Find;
find(\&directories, $ARGV[0]);
sub directories {
$_ = $File::Find::name;
if(/.*\.html$/){#only read file on local drive if it is an .html
my $file = $_;
open my $info, $file or die "Could not open $file: $!";
while(my $line = <$info>) {
#perform operations on file
}
close $info;
}
return;
}
Спасибо, удалив, что сработало отлично. – com