2013-04-03 61 views
1

我想檢查數組條目的最後一個字符,如果它是一個括號。Perl,檢查最後一個字符是否爲括號

我的代碼如下所示:

 my $lastchar = substr $blub[8],-1,1; 
     print "$lastchar..............................\n"; 
     if ($lastchar == "\(") 
     { 
      splice @blub, 8, 2, join('', @blub[8,9]); 
     } 

但這種代碼不工作......它的每一個支架相匹配,當它是一個開放的「(」或閉合支架「)」 ...

在此先感謝。 問候,約翰。

+5

你應該使用情商,而不是== – BSen

+0

哇,那是快。工作正常。如果你以此作爲答案,我會接受它。但爲什麼是eq? –

+3

'使用嚴格;'和'使用警告;'。幫助Perl來幫助你。 –

回答

4

正如其他人所提到的,你需要使用eq而字符串比較比==

eq tests string equality, while == tests numeric equality。這是必要的,因爲Perl是動態輸入的。它需要知道你是否想把某些東西當作數字或字符串。例如,"123.00"在數字上等同於"123",但這兩者不是字符串等效的。

在你的原代碼,Perl的挽着$lastchar"\("和他們相比的數字部分。然而,既然沒有任何數字,每個數字的「數字部分」就相當於零,並且比較總是正確的。

您應該在您的代碼中始終使用use warnings; use strict;。如果您啓用了警告,則會在比較中收到有關非數字值的警告。

但是,它會更Perlish的和易於使用正則表達式此:

if ($blub[8] =~ /\($/) 
{ 
    splice @blub, 8, 2, join('', @blub[8,9]); 
} 
+0

感謝您的詳細解答!現在它是有道理的。 –

3

您需要使用eq==是數字和eq是字符串),只是"("(有沒有必要在這裏逃吧)

my $lastchar = substr $blub[8],-1,1; 
    print "$lastchar..............................\n"; 
    if ($lastchar eq "(") 
    { 
     splice @blub, 8, 2, join('', @blub[8,9]); 
    } 
相關問題