• 締切済み

なぜか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は正常に表示できています。 何が悪いのでしょうか。

みんなの回答

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.4

ダブルクウォーテーションでくくっているからでは? クウォーテーションをはずせばどうです? if(crypt($input,substr($master,$salt,2)) ){&Error('Check',crypt($input,substr($master,$salt,2)));}

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.3

#2のJaritenCatさんが指摘しているのは、if文の条件式の記述が悪いという事では。 crypt()は文字列を返しますが、Perlは空文字列でなければtrueと見なしますので。 その意味で、質問文のコードは正しく動いてますね。

回答No.2

やりたいのはこんなこと? $input="kakunin"; $master="ka4SDUnrq2Y.I"; $salt=substr($input,0,2); if (crypt($input,$salt) eq $master) { print "OK"; } else { print "NG"; }

santa005
質問者

補足

やりたいことは $salt=substr($input,0,2);を $salt=substr($master,0,2);に変更して 後は、その通りです。 思った通りの動きがしないため、調べてみたら crypt,substrがそのまま表示されるので(実行されずに) 困っています。変数には値が入っているのに。

回答No.1

$saltは何をいれていますか?

santa005
質問者

補足

$saltには0を入れています。 実際は MD5 の判別して$masterの$1$を除いて最初の位置を得る処理をしています。

関連するQ&A