【Perl】初心者コーナー Part19
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/01/11 13:52ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
あとは>>2-10にまかせた。
0002nobodyさん
03/01/11 13:54ID:???http://pc.2ch.net/test/read.cgi/php/1041530204/
参考書籍の話題は【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は 【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/
0003nobodyさん
03/01/11 13:54ID:???Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980 参照不能
DAT: http://tako.2ch.net/perl/dat/957208980.dat
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087 参照不能
DAT: http://tako.2ch.net/perl/dat/971817087.dat
Part3 http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521 参照不能
DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part4 http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156 参照不能
DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part5 http://pc.2ch.net/php/kako/988/988728069.html
Part6 http://pc.2ch.net/php/kako/996/996075607.html
Part7 http://pc.2ch.net/php/kako/1000/10002/1000267444.html
Part8 http://pc.2ch.net/php/kako/1003/10039/1003900311.html
Part9 http://pc.2ch.net/php/kako/1009/10095/1009549309.html
Part10 http://pc.2ch.net/php/kako/1014/10145/1014556702.html
Part11 http://pc.2ch.net/php/kako/1017/10172/1017201229.html
Part12 http://pc.2ch.net/php/kako/1019/10199/1019917048.html
Part13 http://pc.2ch.net/php/kako/1022/10227/1022731565.html
Part14 知らん
Part15 http://pc.2ch.net/test/read.cgi/php/1028816385/
Part16 http://pc.2ch.net/test/read.cgi/php/1032070299/
part17 http://pc.2ch.net/test/read.cgi/php/1034583844/
part18 http://pc.2ch.net/test/read.cgi/php/1037797479/
[ひまぢん氏のミラー]
Part1 http://www.angelfire.com/ak5/2ch-web-program/kako/957208980.html
Part2 http://www.angelfire.com/ak5/2ch-web-program/kako/971817087.html
Part3 http://www.angelfire.com/ak5/2ch-web-program/kako/979894521.html
Part4 http://www.angelfire.com/ak5/2ch-web-program/kako/984430156.html
Part5 http://www.angelfire.com/ak5/2ch-web-program/kako/988728069.html
00042,3
03/01/11 13:55ID:???0006nobodyさん
03/01/11 14:01ID:???O2
0007nobodyさん
03/01/11 14:01ID:NBoN4jVXフォームで
<INPUT type="hidden" name="id" value="test_id">
というタグがあるので、これを受け取るのに
use CGI;
my $q = new CGI;
$q->param('id');
で受け取れるんですが、これそのものを正規表現にかけたいんです。例えば
例えば、@list にIDのリストが入ってるとして、
if(join(',',@list) =~ /$q->param('id')/){
print "あなたのIDはリストに含まれています!";
}
こんなかんじで。
でも正規表現内に $q->param('id') な記述が許されないようなので
my $a = $q->param('id');
if(join(',',@list) =~ /$a/){
print "あなたのIDはリストに含まれています!";
}
と書かなくてはならない、これがめんどくさい!
どうにか1行で書けないもんでしょーか?
0009前スレ993
03/01/11 14:05ID:???そうですね。
正確に測ったわけではないですが、異常なほど数値が片寄ります。
例えば、1-100までの整数が出るようにした場合、数回連続で同じ数字を取得したり、
同じような条件下では絶対に出ないような数字もあります。
>>前995さんが言っていたようなOSから取得するとかではなくて、
多少処理や記述が複雑になっても良いから、独自にランダム性の高い処理を作っている人はいないのでしょうか?
例えば、初期値の法則に「時間」を組込んでしまうと、
CGIの1アクセスで100の数値を取得した場合、ランダム性のカケラも見えず、
同じ数字がわんさか出ます。
0010nobodyさん
03/01/11 14:08ID:2PtCQo+xその処理は普通、grepを使って、こうする。。けど回答になってないな。。
if ( grep { $_ eq $q->param('id') } @list ) {
00119
03/01/11 14:15ID:???【perl】
ランダムから求められる数値が片寄ってるような気がしてなりません。
ランダムを取得する時、必ず直前に以下のような記述を置いているのですが、
正確な意味も分かりません。
(昔、どこかで見たのを写したのだと思います)
srand(time ^ $$ ^ unpack "%L*", `ps axww | gzip`);
質問1
上記はどんな初期値(?)を作成してるのでしょうか?
質問2
とても効率が良く、数値が片寄る事を感じさせない記述を教えて下さい。
皆様はランダム前にどんな記述をおくのでしょうか?
イロイロ教えて下さい。
また頭が弱いため、見ても理解出来ないと思うので、どのように求めているのかも簡潔に教えてくれると嬉しいです。
0012nobodyさん
03/01/11 14:17ID:???それってさ、srandを複数回行なってない?
srandは1回行なえばそれでいいんだが。
ソース出して。
0013nobodyさん
03/01/11 14:21ID:???悪い例:
foreach(0 .. 100){
srand(time);
print rand(100);
}
正しい例:
srand(time);
foreach(0 .. 100){
print rand(100);
}
srandは「乱数のスタート位置を決める」もの。
randは「スタート位置から決められた順番をなぞる」もの。
srandを何回もやれば、スタート位置が毎回戻るから、同じ結果にしかならんぞ。
00149
03/01/11 14:23ID:???えと、実はランダム取得前に何度も置く事が多いです。
srandしてからrandみたいな。
しないほうが良いのでしょうか?
また、しない事もありますが、それでもやっぱり片寄ってきます。
例えば、RPGを作っていて、ランダムにストーリーが分かれるのですが、
プレイヤーの話を聞いてみるとみんな似通った結果になる事が多く、綺麗に分かれていません。
その「ランダムによって分ける」と言う作業自体は非常に単純な処理にしてあるので、
おそらく自分ではあくしていると思います。
で、どんな角度から考えてもやはり原因は「ランダム」が「ランダムじゃない」と言う事にあるようです。
0016nobodyさん
03/01/11 14:30ID:2PtCQo+xsrand、randで、1方向ハッシュみたいに使うのも禁止。
それは他に移行してもそのまま動くのか?と。
0017nobodyさん
03/01/11 14:32ID:P/LXfaGE0018nobodyさん
03/01/11 14:34ID:2PtCQo+x001916=18
03/01/11 14:36ID:???0020えせカミ
03/01/11 14:38ID:???if(join(',',@list) =~ /$q->param('id')/){
↓
if(join(',',@list) =~ /${\$q->param('id')}/){
でもこの書き方が好きかい?綺麗かい?
0021nobodyさん
03/01/11 15:12ID:???srandは2回以上やっちゃいけない。
「同じ乱数を複数回使いたい」とか特殊な状況でもない限り。
どうしても2回以上srandをするなら、種も変えるべき。
基本的にはスクリプトの頭で1回だけsrandすればいい。
Perl5以降なら、それすらも必要ない。
00229
03/01/11 15:13ID:???品質の良い種を皆様から多数頂けないでしょうか?
種の内容も簡単に説明してくれると嬉しいです。
0023nobodyさん
03/01/11 15:14ID:???品質のいい種は前スレで出てたあれ。
理由は今のあんたに説明してもわからんだろ。
ちゃんと覚えたいなら駱駝本(プログラミングPerl)買え。
00249
03/01/11 15:18ID:???srand(time ^ $$ ^ unpack "%L*", `ps axww | gzip`);
今の一番の問題は時間です。
同じ時間だから似たような結果になる、と言うのを避けたいです。
同じ条件下で1000回以上「1-100」の整数を求めた時、
「連続して同じ数字が出ない」
と
「平均的に全て出てくる」
と言う条件を満たしたのがグットです。
0026nobodyさん
03/01/11 15:22ID:???> 「連続して同じ数字が出ない」
どんな乱数でもこの条件は満たせないと思うんだがな。
任意の二数を取り出して同じ数字な確率ってほんの1/10000でないかね?
0028nobodyさん
03/01/11 15:27ID:???あ、1/100だわ。スマン…寝ぼけてたようだ。
矛盾はしてない気がする。千なり一万なり生成して連続して同じ数字が出ない
様な乱数系列ってほとんどあり得ないと思うんだが。
00299
03/01/11 15:32ID:???ええと、
srand(time ^ $$ ^ unpack "%L*", `ps axww | gzip`);
の記述では、例えばCGIでPERLを使い、1アクセスで1つの数字を求めたとします。
ですが、連打して求めてしまうと同じ数字が返って来る事が非常に多いのです。
当たり前と言えば当たり前なんですが、これをなんとかしたいです。
003026
03/01/11 15:37ID:???種ねぇ…その記述よりいいのなんておもいつかんわ。
■ このスレッドは過去ログ倉庫に格納されています