メインコンテンツに移動
mattz.xii.jp

Main navigation

  • Home
  • YBR125メモ
User account menu
  • ログイン

パンくず

  1. ホーム

phpしか知らないプログラマってさ

By mattz , 2008/05/28

以前にとあるperlスクリプトをphpで書き直すってのをやってもらった訳です。ちょっとそのまんま転載するのは憚られるので、少し変えて掲載します。

if( $str =~ /ABC/ ){
  $flag = 1;
}elsif( $str =~ /DEF/ ){
  $flag = 2;
}elsif( $str =~ /GHI/ ){
  $flag = 3;
}else{
  $flag = 1;
}

要するに、変数$strに"ABC"を含んでたら$flagに1、変数$strに"DEF"を含んでたら$flagに2、変数$strに"GHI"を含んでたら$flagに3、どれでもなかった場合も$flagに1を代入しろ、っつーことです。これをphpに翻訳したA君(仮名)はこういうコードを書いた。

if( strpos( $str, "ABC" )){
  $flag = 1;
}elsif( strpos( $str, "DEF" )){
  $flag = 2;
}elsif( strpos( $str, "GHI" )){
  $flag = 3;
}else{
  $flag = 1;
}

んで、その書き直された方のphpの方のどれでもなかった場合に$flagに代入する値を1じゃなくて0にするねっていう改修を僕がやったんですが、このphpのコードの問題点に気付いてなくてへへぇ簡単簡単とかいって単純にこうやっちゃったもんですから、

}else{
  $flag = 0;
}

バグ作っちゃいましてね。死ね。俺。ちなみに改修前のソースでなぜ問題が起きなかったかというと、$strには"DEF"や"GHI"で始まる文字列が入ってく ることはないんですね。故に、"ABC"で始まる文字列が入ってきたとしてもelseブロックに処理が流れるもんですから結果として$flagには期待通りに1が入 っていたという。

てゆーかなんでpreg_match使わない訳?

てゆーかstrposのオンラインマニュアルにも

警告

この関数は論理値 FALSE を返す可能性がありますが、FALSE として評価される 0 や "" といった値を返す可能性もあります。 詳細については 論理値 の セクションを参照してください。この関数の返り値を調べるには ===演算子 を 使用してください。

て書いてあんだろうがよ、気付けよ、馬鹿。

てゆーかstrposなんか使ったことねーよ。使うなよ。

タグ

  • php
  • perl

最近のエントリー

  • フロントブレーキパッドの交換
  • バイクガレージを買った
  • バックミラーの交換
  • 角目化
  • バイクカバーを新調
  • クラッチレバーブーツの硬化対策
  • ハンドルストッパー
  • ジェッティングの見直し
  • バックミラーの防眩化
  • チェーン交換(その後)

ランダム

  • 旅行記 (2009/07/25)
  • 史記 武帝紀 二 (2009/08/06)
  • build 10108 (2008/08/15)
  • 短縮する必要のないところでまでURL短縮するのやめませんか? (2011/03/09)
  • きむらと田村 (2009/09/29)

月別アーカイブ

  • 5月 2019 (3)
  • 3月 2019 (1)
  • 2月 2019 (1)
  • 12月 2018 (1)
  • 12月 2017 (1)
  • 1月 2017 (1)
  • 5月 2016 (1)
  • 2月 2016 (1)
  • 2月 2015 (2)
  • 11月 2014 (1)
  • 7月 2014 (1)
  • 6月 2014 (1)

ページ送り

  • 前ページ
  • 3
  • 次ページ
RSS feed