- 締切済み
なぜかcrypt,substr等の関数が働かない
プログラムをチェックのため以下のコードを書いたのですが、 結果を見ると関数が機能していません。 if(crypt($input,substr($master,$salt,2)) ){&Error('Check',"crypt($input,substr($master,$salt,2)) ");} 表示結果: Check crypt(kakunin,substr(2y.e123ltUAK.,0,2)) $input,$masterは正常に表示できています。 何が悪いのでしょうか。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- moon_night
- ベストアンサー率32% (598/1831)
ダブルクウォーテーションでくくっているからでは? クウォーテーションをはずせばどうです? if(crypt($input,substr($master,$salt,2)) ){&Error('Check',crypt($input,substr($master,$salt,2)));}
- osamuy
- ベストアンサー率42% (1231/2878)
#2のJaritenCatさんが指摘しているのは、if文の条件式の記述が悪いという事では。 crypt()は文字列を返しますが、Perlは空文字列でなければtrueと見なしますので。 その意味で、質問文のコードは正しく動いてますね。
- JaritenCat
- ベストアンサー率37% (122/322)
やりたいのはこんなこと? $input="kakunin"; $master="ka4SDUnrq2Y.I"; $salt=substr($input,0,2); if (crypt($input,$salt) eq $master) { print "OK"; } else { print "NG"; }
- JaritenCat
- ベストアンサー率37% (122/322)
$saltは何をいれていますか?
補足
$saltには0を入れています。 実際は MD5 の判別して$masterの$1$を除いて最初の位置を得る処理をしています。
補足
やりたいことは $salt=substr($input,0,2);を $salt=substr($master,0,2);に変更して 後は、その通りです。 思った通りの動きがしないため、調べてみたら crypt,substrがそのまま表示されるので(実行されずに) 困っています。変数には値が入っているのに。