2015-05-29 249 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";' 
<>