在 perl 中构建工作目录内容的数组
Build array of the contents of the working directory in perl
我正在编写一个脚本,该脚本使用
等路径利用周围目录中的文件
"./dir/file.txt"
这工作正常,只要工作目录是包含脚本的目录。然而,该脚本将发送给多个用户,有些人可能不会更改他们的工作目录和 运行 通过键入完整路径来更改脚本,如下所示:
./path/to/script/my_script.pl
这会带来一个问题,因为当脚本试图访问 ./dir/file.txt 时,它正在寻找主目录中的 /dir 目录,当然,它无法找到它。
如果目录不正确,我正在尝试使用 readdir 和 chdir 来更正目录,这是我目前所拥有的:
my $working_directory = $ENV{PWD};
print "Working directory: $working_directory\n"; #accurately prints working directory
my @directory = readdir $working_directory; #crashes script
if (!("my_script.pl" ~~ @directory)){ #if my_script.pl isnt in @directoryies, do this
print "Adjusting directory so I work\n";
print "Your old directory: $ENV{PWD}\n";
chdir $ENV{HOME}; #make the directory home
chdir "./path/to/script/my_script.pl"; #make the directory correct
print "Your new directory: $ENV{PWD}\n";
}
包含 readdir 的行使我的脚本崩溃并出现以下错误
Bad symbol for dirhandle at ./path/to/script/my_script.pl line 250.
我觉得很奇怪,因为我是从主目录中 运行 宁此的,它事先正确打印出来并且与 "bad symbol"
无关
我愿意接受任何解决方案
提前致谢
readdir
使用目录句柄操作,而不是字符串上的路径。您需要执行以下操作:
opendir(my $dh, $working_directory) || die "can't opendir: $!";
my @directory = readdir($dh);
我认为你的做法是错误的。如果您正在寻找与您的脚本一起移动的文件,那么您可能应该考虑的是 FindBin
模块 - 它可以让您找出脚本的路径,用于路径链接。
例如
use FindBin;
my $script_path = $FindBin::Bin;
open ( my $input, '<', "$script_path/dir/file.txt" ) or warn $!;
这样你就不用再为 chdir
和 readdir
等操心了。
我正在编写一个脚本,该脚本使用
等路径利用周围目录中的文件"./dir/file.txt"
这工作正常,只要工作目录是包含脚本的目录。然而,该脚本将发送给多个用户,有些人可能不会更改他们的工作目录和 运行 通过键入完整路径来更改脚本,如下所示:
./path/to/script/my_script.pl
这会带来一个问题,因为当脚本试图访问 ./dir/file.txt 时,它正在寻找主目录中的 /dir 目录,当然,它无法找到它。
如果目录不正确,我正在尝试使用 readdir 和 chdir 来更正目录,这是我目前所拥有的:
my $working_directory = $ENV{PWD};
print "Working directory: $working_directory\n"; #accurately prints working directory
my @directory = readdir $working_directory; #crashes script
if (!("my_script.pl" ~~ @directory)){ #if my_script.pl isnt in @directoryies, do this
print "Adjusting directory so I work\n";
print "Your old directory: $ENV{PWD}\n";
chdir $ENV{HOME}; #make the directory home
chdir "./path/to/script/my_script.pl"; #make the directory correct
print "Your new directory: $ENV{PWD}\n";
}
包含 readdir 的行使我的脚本崩溃并出现以下错误
Bad symbol for dirhandle at ./path/to/script/my_script.pl line 250.
我觉得很奇怪,因为我是从主目录中 运行 宁此的,它事先正确打印出来并且与 "bad symbol"
无关我愿意接受任何解决方案
提前致谢
readdir
使用目录句柄操作,而不是字符串上的路径。您需要执行以下操作:
opendir(my $dh, $working_directory) || die "can't opendir: $!";
my @directory = readdir($dh);
我认为你的做法是错误的。如果您正在寻找与您的脚本一起移动的文件,那么您可能应该考虑的是 FindBin
模块 - 它可以让您找出脚本的路径,用于路径链接。
例如
use FindBin;
my $script_path = $FindBin::Bin;
open ( my $input, '<', "$script_path/dir/file.txt" ) or warn $!;
这样你就不用再为 chdir
和 readdir
等操心了。