2013-05-29 159 views
2

我是Perl的新手,我一直在學習過去兩天的Perl基礎知識。 我正在逐漸將Perl腳本轉換爲Java程序。 在Perl腳本中,我遇到了這個代碼。

if($arr[$i]=~/^0$/){ 
... 
... 
} 

我知道$arr[$i]意味着從陣列arr得到i th元素。

但是=~/^0$/是什麼意思?

他們比較數組的元素是什麼?

我搜索了這個,但我找不到它。

有人請解釋我。

僅供參考,arr包含浮點值。

+4

聽起來像那個perl腳本是一段很棒的代碼。 '=〜/^0 $ /'是應用於'$ arr [$ i]'的內容的正則表達式。它試圖檢查內容是否爲「0」。 – innaM

+0

@innaM'/^0 $ /'也匹配'「0 \ n」' – mob

回答

10

if ($arr[$i]) =~ /^0$/)大致相當於if ($arr[$i] eq "0"),但不完全一樣,因爲它會同時匹配字符串「0」和「0\n」。如果從文件或標準輸入讀取$arr[$1],但它不是chomp,這可能是一個非常重要的區別。

if ($arr[$i] == 0)另一方面,將匹配以非數字字符或零/空白字符串開頭的任何字符串,該字符串後面沒有數字字符,但如果字符串包含非空字符,則會生成警告。空格,非數字字符或僅包含空格(當然,啓用警告)。

+1

「後跟一個非數字字符」?沒有。 「」== 0和「000」== 0。另外,警告不僅僅依賴於第一個非空白字符。 – ysth

+0

@ysth:公平點。編輯更加接近現實。 –

+0

你指出這和'$ arr [$ i] eq「0」'之間的重要區別,如果可以的話+ 20! – zx81

9

^$是正則表達式錨它說$arr[$i]應該0開始並沒有緊隨其後字符串的結尾。

它可以寫爲

if ($arr[$i] eq "0" or $arr[$i] eq "0\n") 
+3

'更好'是否更好取決於你是多麼的開心,它比原來更真實。 '更好'是最好的,沒有'使用',(文本)並行性,作者推測他可能會返回到這個測試,以添加到正則表達式。 –

+4

「更好」的版本是一個糟糕的主意,因爲'$ arr [$ i]'是任何非數字字符串,比如「hello world」,它將會是真實的。 –

+0

謝謝,更新。最後,作者最清楚他在'$ arr [$ i]'中放置了什麼,以及是否應該有字符串或數字。 –

9

=~binding operator

"Binary "=~" binds a scalar expression to a pattern match" 

右手邊/^0$/regex

^  Match the beginning of the line 
$  Match the end of the line (or before newline at the end) 

和零有沒有特殊的含義。