我在下面的代码中有两个链接的符号链接。
onSearch = async value => {
console.log(value);
if (value) {
const searchData = await axios.get("/api/search_member", { value });
console.log(searchData);
}
};
当我在本地运行它时,效果很好。但是当我将其组合到另一个脚本中时,这会给出一个错误。
my $Directory = "/data/backups/";
my $symLinkDirectory = "newdisk/data/backups/";
opendir ( DIR, $Directory ) || die "Error in opening directory $Directory\n";
while( ( $fileName = readdir(DIR))){
my $filePath = "$Directory"."$fileName";
symlink("$filePath","$symLinkDirectory"."$fileName");
}
closedir(DIR);
知道为什么会这样吗?为什么在本地工作而不是结合在一起工作?
答案 0 :(得分:2)
您的代码中未声明$fileName
。在没有strict
模式的情况下,它隐式地成为全局变量。
但是,您的其他脚本可能会执行use strict;
(应该这样做),因此未声明的变量是错误的。解决方法是(如错误消息所建议的那样)使用my
将其设置为局部变量:
while( ( my $fileName = readdir(DIR))){
顺便说一句,DIR
在您的代码中也是有效的全局变量。没有理由:
opendir(my $dh, $Directory) or die "$0: error in opening directory $Directory: $!\n";
while (my $fileName = readdir($dh)) {
您可以使用普通变量代替裸字句柄。另外,错误消息应包含$0
(脚本名称)和$!
(错误原因)。
此外,您可能不应该尝试将.
和..
进行符号链接:
next if $fileName eq '.' || $fileName eq '..';
对于my $filePath = "$Directory"."$fileName"
,您应该使用普通串联或字符串插值:
my $filePath = $Directory . $fileName;
# -or-
my $filePath = "$Directory$fileName";
无需单独引用"$variables"
。这不是shell脚本。
symlink
可能会失败。您的代码可能应该检查一下:
symlink($filePath, $symLinkDirectory . $fileName) or warn "$0: can't symlink $filePath to $symLinkDirectory$fileName: $!\n";