メインコンテンツに移動
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

最近のエントリー

  • チェーン交換(その後)
  • チェーン交換(実施編)
  • チェーン交換(準備編)
  • ハイマウントストップランプ
  • メーターバイザーとフロントフェンダー
  • 一周年
  • 防寒装備紹介
  • 電動空気入れの買い替え
  • ヘッドライトバルブ交換
  • オイル交換3回目

ランダム

  • 楊令伝9巻 (2009/05/01)
  • Suicaをなくしちゃって再発行したっていう話 (2011/07/22)
  • きむらと田村 (2009/09/29)
  • buld 10103 (2008/08/08)
  • anondLDRize.jsをバージョンアップしました (2008/06/04)

月別アーカイブ

  • 6月 2013 (1)
  • 5月 2013 (1)
  • 3月 2013 (2)
  • 2月 2013 (1)
  • 1月 2013 (2)
  • 12月 2012 (1)
  • 11月 2012 (1)
  • 10月 2012 (4)
  • 9月 2012 (1)
  • 8月 2012 (2)
  • 6月 2012 (2)
  • 5月 2012 (1)

ページ送り

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