CGI-BBS > CGI > Perl > ランダム選択について


カレッヂ
カレッヂ


質問者 よっしー  投稿日 5/22(火) 17:34:31
ログファイルにある$namberの中からランダムで選択し
その行の$urlにジャンプしたいのですが思い通り動作しません
($namberは数列ですが行削除されることもあるので連続数ではありません)
どなたかご存じの方、お力をお貸し下さい。

↓自分なりに考えたソースです(^-^;

sub randam {
        open(IN,"$logfile") || &error("Log Open Error");
        @all = <IN>;
        close(IN);

        @all = reverse(@all);
        $all =~ s/\n//g;
        ($namber,$nin,$name,$email,$hptai,$url,$comment,$pass,$date,$host) = split(/<>/,$all[0]);
        srand;

        $no = int(rand($namber));
        if($no eq "0") { $no = 1; }

        $flag=0;
        foreach $all (@all) {
                ($namber,$nin,$name,$email,$hptai,$url,$comment,$pass,$date,$host) = split(/<>/,$line);
                if ($no eq "$namber") { $flag=1; last; }
        }
        if ($flag == 0) { &error("ERROR"); }

        print "Location: $url\n";
        exit;
}
回答者 しあわせのツボ  [削除]  投稿日 5/22(火) 18:01:43
こんなかなぁ…。

sub random {
open(IN,"$logfile") || &error("Log Open Error");
@all = <IN>;
close(IN);

srand;
$no = int(rand($#all + 1));
($number,$nin,$name,$email,$hptitle,$url,$comment,$pass,$date,$host) = split(/<>/,$all[$no]);

print "Location: $url\n\n";  #改行を2つ打たないとヘッダと認識されません
exit;
}
質問者 よっしー  [削除]  投稿日 5/22(火) 18:59:00
しあわせのツボさんご回答ありがとうございます
早速試させて頂きましたがエラーが出てしまいました
他に原因があるかも?と思いソースをこの部分だけにして
試して見ましたが結果はエラーでした。
他になにか思い当たる点がございましたらアドバイス頂けたら幸いです
改行を2つ打たないと認識されないのは知りませんでしたありがとうございます
質問者 よっしー  [削除]  投稿日 5/22(火) 19:11:47
原因が判明しました
sub random { と sub randam { の違いでした
上手く動作しましたありがとうございます
またお世話になるかと思いますが宜しくお願いします。

このページは終了したので返信(回答)は書きこめません

Web裏技