.html を読み取る Perl プログラムがあり、プログラムが .html と同じディレクトリにある場合にのみ機能します。
別のディレクトリで開始し、html の場所をパラメーターとして渡すことができるようにしたいと考えています。プログラム (以下のシェルの例) は、サブディレクトリ "sub" とそのサブディレクトリを走査して .html を探しますが、perl ファイルが同じサブディレクトリ "sub" にある場合にのみ機能します。サブディレクトリ「sub」から一歩下がったホームディレクトリにPerlファイルを置いても動かない。
シェルで、ホーム ディレクトリから「perl project.pl ./sub」と入力すると、./sub/file1.html を開けませんでしたと表示されます。そのようなファイル、又はディレクトリはありません。それでも、ファイルはその正確な場所に存在します。file1.html は、読み取ろうとしている最初のファイルです。
シェル内のディレクトリをそのサブディレクトリに変更し、そこに .pl ファイルを移動してから、シェルで「perl project.pl ./」と言うと、すべて問題ありません。
ディレクトリを検索するために、私はここで見つけた File::Find コンセプトを使用しています: ディレクトリ内のすべてのファイルをトラバースする方法。サブディレクトリがある場合は、サブディレクトリ内のファイルもトラバースしたい Find::File ファイルのリストのディレクトリを検索する
#!/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;
}