下面的代码创建一个文件并通过命令行接受输入参数。
我想做两件事:
如果用户忘记在命令行输入输入,系统应该提供某种警报或消息。假设我忘记给出输入参数,那么系统不应继续执行脚本。
假设系统是否尝试创建已存在的文件,目前我们正在管理显示“文件已存在”之类的消息,但我想问一下“文件已经存在,你确定吗?你想覆盖?是/否“。如果他回答是,则简单地覆盖现有的,否则系统应该要求用户提供另一个输入。
#!/usr/local/bin/perl
#print "content-type: text/html \n\n"; #HTTP HEADER
$numArgs = $#ARGV + 1;
foreach $argnum (0 .. $#ARGV) {
$GET_ALL_USER_INPUTS = "$ARGV[$argnum]\n";
}
@INPUT_ARR = split(/,/, $GET_ALL_USER_INPUTS);
$filename = "DD_WRITE_${INPUT_ARR[0]}.txt";
$GET_ARR_SIZE = scalar @INPUT_ARR;
$CLIENT_NAME = "T-sys";
$DD_CONTENT = "Design Document ${INPUT_ARR[0]} - ${CLIENT_NAME} :-\n";
$DD_CONTENT .= "--------------------------------------";
#get the no length and generate dotted lines
for($i=0;$i<=length(${INPUT_ARR[0]});$i++){
$DD_CONTENT .= "-";
}
$DD_CONTENT .= "--------------\n";
$DD_CONTENT .= "Database Details\n";
if (-e "${filename}") {
print "File exists!";
exit;
}
else {
open(FILE, ">", "$filename") or die "Cannot open $filename - $!";
print FILE "${DD_CONTENT}\n";
close (FILE);
}
答案 0 :(得分:2)
我理解的问题是“如何提示用户?”因为你不知道该怎么做。我跳过了问题描述的第1部分,因为您已经了解了exit
。
首先,您应该用Getopt::Long替换命令行参数处理。正如现在所写,它是不必要的错综复杂的。
通过Perl发行版附带的ExtUtils::MakeMaker,可以在运行时从用户那里获得输入。
use ExtUtils::MakeMaker qw(prompt);
my $user_answer = prompt 'Okay to overwrite? ';
if ('y' eq $user_answer) { …
我看到你已经注释掉了一段关于HTTP的代码。如果您打算在CGI环境下运行此程序,则提示将无法正常工作。在Web上,您需要完全不同的技术和控制流程。
答案 1 :(得分:0)
可以很容易地确定命令行参数的存在:
if (exists $ARGV[0]) { do_stuff_with_args } else { die "No arguments!"; }