2012-01-19 33 views
2

Perl的小白在這裏 - 我有以下腳本爲什麼我的Perl腳本不能區分`0`和`「」`?

if(substr($pc, 3,1)!=" "){ 
     $newpc = substr($pc, 0, 4) . " " . substr($pc, 4); 
} 

它的設計投入郵政編碼的空間,例如NN141NJ成爲NN14 1NJ ...但與郵政編碼如NN102DE它不會做任何事情,還包括Perl如同" ""0"一樣嗎?我怎樣才能讓Perl不忽略字符串0作爲第四個字母?

+4

它會做一些事情,如果你使用'警告;'。你會收到一條警告消息。 – toolic

+2

我第二。請使用'use strict;使用警告;' – ikegami

+0

好得多的標題@darch,這是漫長的一天 - 將記住錯誤信息,這實際上是我第一次使用perl – rickyduck

回答

7

使用ne而不是!=。後者用於數字比較,其中兩種都是0。請參閱perldoc perlop

+0

歡呼隊友,我認爲它的語法幾乎完全相同到PHP,知道它太好,不能成爲真 – rickyduck

3

當您想要使用ne(不等於)運算符時,您正在使用!=運算符。 !=是一個僅用於數字的比較,而ne是一個字符串比較。

3

這是因爲perl需要字符串比較和數字比較之間的規範。您正在使用數字比較這將「」轉換爲0而是執行此操作:

if(substr($pc, 3,1) ne " "){ 
     $newpc = substr($pc, 0, 4) . " " . substr($pc, 4); 
} 
1

在Perl中,這種字符串撲通常是使用正則表達式運算符來完成。

所以你可能想看看使用m//和/或s///

請參閱perlop文檔頁面中的「Regexp Quote-Like Operators」以及整個perlretut文檔頁面。

話又說回來,如果你正在處理與英國的郵政編碼,你可能想search for "Postcode" on CPAN或看Geo::Postcode

+0

提供了一個很好的替代,有用的鏈接,我已經在這個腳本的另一部分使用'Geo :: Postcode' – rickyduck

相關問題