如果用户没有给出输入,则通过命令行传递参数并弹出

时间:2011-03-10 16:48:52

标签: perl

下面的代码创建一个文件并通过命令行接受输入参数。

我想做两件事:

  1. 如果用户忘记在命令行输入输入,系统应该提供某种警报或消息。假设我忘记给出输入参数,那么系统不应继续执行脚本。

  2. 假设系统是否尝试创建已存在的文件,目前我们正在管理显示“文件已存在”之类的消息,但我想问一下“文件已经存在,你确定吗?你想覆盖?是/否“。如果他回答是,则简单地覆盖现有的,否则系统应该要求用户提供另一个输入。


  3. #!/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);
    }
    

2 个答案:

答案 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!"; }