我认为之前给出的脚本令人困惑,这是我现在要运行的脚本,这不是创建目录,请在此帮助我。
如果代码是愚蠢的,我不会批评,因为我只是perl的初学者。你能否建议我使用这个脚本的正确方法,如果我有任何错误?
output_folder1.txt
包含10010
,output_folder.txt_2
包含30001
。
我无法创建输出文件。
#!/usr/local/bin/perl -w
use strict;
print "Content-type:text/html\n\n";
my(@folder_name,$temp1,$temp2);
open ONE,"<","/var/www/html/piRNA_html/UNAFold/output_folder_1.txt" || die "Cannot open the file";
@folder_name=<ONE>;
close ONE;
open TWO,"<","/var/www/html/piRNA_html/UNAFold/output_folder_2.txt" || die "Cannot open the file";
push(@folder_name,<TWO>);
close TWO;
print $folder_name[0],"\n",$folder_name[1],"\n";
$temp1 = pop(@folder_name);
$temp2 = pop(@folder_name);
if($temp1 < 30050)
{
mkdir "/var/www/html/piRNA_html/UNAFold/output/$temp2/$temp1",0777 or die "File cannot be created";
}
答案 0 :(得分:8)
您需要将$!
添加到您的骰子字符串(die "File cannot be created: $!"
)。这会给你原因。 $!
是来自操作系统的错误消息。请参阅"Error Variables" in perlvar。
您似乎很可能一次尝试mkdir两个目录(…/$temp2
和…/$temp2/$temp1
)。您需要两次mkdir调用,或使用File::Path
的make_path
。
答案 1 :(得分:3)
您应首先检查$temp2
目录是否存在:
unless ( -d "/var/www/html/piRNA_html/UNAFold/output/$temp2" ) {
mkdir "/var/www/html/piRNA_html/UNAFold/output/$temp2",0777 or die $!;
}
mkdir "/var/www/html/piRNA_html/UNAFold/output/$temp2/$temp1",0777 or die $!;
答案 2 :(得分:2)
File::Path::make_path与Path::Class一起使用(或者如果你不关心平台无关路径的漂亮接口),应该可以消除大部分的痛苦。