Perl“使用未初始化的值”

时间:2018-06-02 00:14:28

标签: perl

Perl脚本

my ($directory) = @ARGV; #"www"

if ( not defined $directory ) {
    die "ERROR";
}

if ( defined $directory ) {

    print "Yes or No ? (y/n) : ";
    my $terminer = <>; 
    chomp $terminer;

    if ( $terminer eq "o" ) {       
        print "OK";     
    }
    elsif ( $terminer eq "n" ) {
        ##########
    }
}

出现错误消息:

  

在test.pl的标量chomp中使用未初始化的值$ terminer   在test.pl

的字符串eq中使用未初始化的值$ terminer

你能帮助我吗?

2 个答案:

答案 0 :(得分:6)

当从空尖括号<>读取时,Perl会从@ARGV中提供的文件中读取(如果有)。但是那里没有文件:它是一个目录名。

您将@ARGV中的条目复制到$directory,但也将其保留在@ARGV中。然后,在您的代码中,my $terminer = <>尝试从“文件”(您在@ARGV中作为目录)读取。

修复可以是my $directory = shift @ARGV,它应该为空@ARGV,并让您在代码中进一步从空括号中读取键盘输入。

或者您可以编写my $terminer= <STDIN>,以便Perl只能从键盘读取,而不能从@ARGV数组中列出的文件中读取。

答案 1 :(得分:0)

此外,您还可以执行以下操作:

chomp(my $terminar = <STDIN>);