2015-05-29 250 views
0

考虑:如何在Perl中使用'if'语句?

#!/usr/bin/perl 
if ($ARGV[0]=="-v") { 
    print "MY name: abc\n"; 
    print "MY student ID:111110\n"; 
} 
if ($ARGV[0]=="-s" && $ARGV[1]==printing_usage_file) { 
    open (INFILE, $ARGV[1]) or die "An input file is required as argument\n"; 
    $totalbytes=0; 
    $data=""; 
    while(<INFILE>) { 
     chomp(); 
     @data=split(/,/); 
     $totalbytes += $data[1]; 
    } 
    print "Total number of bytes printed: $totalbytes\n"; 
} 

在这种情况下,我想要的是当我运行./perl.pl -v,它打印my nameid。我运行./perl.pl -s printing_usage_file时,它打印totalbytes(printing_usage_file file is list like:aaa,240,ccc)

但在这里,当我运行/perl.pl -v./perl.pl -s printing_usage_file它打印my nameidtotalbytes。我该如何解决它?

+0

如果我使用ELSIF在第二if语句,/perl.pl -s printing_usage_file将打印我的名字和ID没有totalbytes –

+2

添加'使用警告;'和'使用严格的;',你会得到一个抱怨裸字'printing_usage_file'。使用单词不是一个好习惯。你也会被告知用'my'声明所有的变量。请注意,标量'$ data'在脚本的其余部分未被使用。有经验的Perl程序员使用严格和警告来确保他们没有犯任何愚蠢的错误;新手Perl程序员也应该使用它们,出于同样的原因。 –

回答

2

您的问题是,当您需要使用eq运算符时,您正在使用==运算符比较两个字符串。

$ perl -e 'print q{<}, "a" == "b", q{>}, "\n";' 
<1> 

如果使用eq运营商,它会返回一个空字符串这是一个错误的值。

$ perl -e 'print q{<}, "a" eq "b", q{>}, "\n";' 
<>