2015-02-06 108 views
0

當我嘗試匹配2個相同的變量時,它會一直工作,直到在我的perl中有一個方括號。 VAR1 = u6701,VAR2 = u6701匹配並給出等於 但是,VAR1 = aw [101],VAR2 = aw [101]給了我UNEQUAL。在Perl中匹配內部方括號

我使用$ VAR1 == $ VAR2來檢查並且這兩個變量都是字符串。請幫忙。

謝謝。

+0

這看起來不像Perl。我懷疑你沒有向我們展示真實的代碼。 – Schwern 2015-02-06 06:10:45

+0

雖然只是爲了混淆這個問題,但標量實際上是幕後的雙重價值:http://stackoverflow.com/questions/28186617/concerns-with-concatenating-strings-and-ints/28187890#28187890 – Sobrique 2015-02-06 15:42:56

+0

@Sobrique Total離題,但我不能幫助自己。標量可以是一個三元值,[PVNV可以包含一個標量的字符串,整數和雙精度表示](https://gist.github.com/schwern/d4dcf7523151acd9e0b8)。你可以在[illguts - Illustrated Perl Guts]中看到它(https://github.com/rurban/illguts/blob/master/illguts.pdf?raw=true)。 – Schwern 2015-02-06 18:48:05

回答

2

在Perl中,以檢查兩個字符串值,我建議你使用eq

爲如

if($VAR1 eq $VAR2) 
     return true; 
else 
     return false; 

==對數字測試平等。 eq對字符串也一樣。

也可以使用cmp操作者,這是< =>操作人員的非數值當量:

$result = $string1 cmp $string2; 

$結果將是:

`0` if the strings are equal 
`1` if string1 is greater than string2 
`-1` if string1 is less than string2 
3

==是數字平等運算符在Perl中,它會檢查兩件事是否等於,編號爲eq是字符串相等運算符,這就是你想要使用的。 「1」和「01.00」等於數字,但不是字符串。 Here's the docs on all the equality operators。還有不錯的在線書籍Beginning Perl

==爲什麼有時會起作用是因爲Perl對於將字符串解釋爲數字而言非常自由,至於絕望的地步。通常它會將字符串視爲0,但有時它會在字符串中找到一個數字並使用它。例如,「101aw」將被解釋爲101,但「aw101」爲0.不要依賴於此。

順便說一句,Perl會警告你所有這些,但不是默認的。你必須turn on strict and warnings和我高度建議你做,並處理它帶來的所有問題。它會節省你(和我們)很多時間。

相關問題