2012-01-19 7 views
2

Perlのnoobの - 私は例えばNN141NJのため、郵便番号のスペースを入れて設計されています私のPerlスクリプトが `0`と` `` `を区別できないのはなぜですか?ここ

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

次のスクリプトは、しかし、それは何もしないようなNN102DEとして郵便番号を... NN14 1NJなってい、Perlはありません" ""0"は同じですか? 4番目の文字として0で文字列を無視しないでperlについてどうやって行くことができますか?

+4

に見えるかもしれません;'。警告メッセージが表示されます。 – toolic

+2

私はそれをもう一度。 'use strict;を使用してください。 ' – ikegami

+0

@darchよりずっと良いタイトル@darch、長い日だった - これはエラーメッセージを念頭に置いている、これは文字通り初めて私がperlを使用した初めてのものだった – rickyduck

答えて

7

!=の代わりにneを使用してください。後者は数値比較のためのもので、両方ともあなたのケースでは0です。 perldoc perlop

+0

私は構文がほぼ同一であると思ったPHPには、あまりにも真実であることが分かっていました。 – rickyduck

3

ne(等しくない)演算子を使用する場合は、!=演算子を使用しています。 !=は数字のみの比較で、neは文字列比較です。

3

これは、文字比較と数値比較の間の仕様が必要なためです。あなたが0に代わりにこれを行う「」変換します数値比較を使用している言語:Perlで

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

を、文字列バッシングのこの種は、通常は正規表現演算子を使用して行われます。

m//および/またはs///を使用してください。

perlopのドキュメントページの「Regexp Quote-Like Operators」およびPerlretutのドキュメントページを参照してください。その後

あなたは英国の郵便番号を扱っている場合は、もう一度、あなたがsearch for "Postcode" on CPANしたいか、あなたは `警告を使用する場合、それが何かを行いますGeo::Postcode

+0

良い代替案、有用なリンクを提供しています。私はすでにこのスクリプトの別の部分で 'Geo :: Postcode'を使っています – rickyduck

関連する問題