【Perl】初心者コーナーPart9
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
01/12/28 23:21ID:SPLRvqQi1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。
参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://pc.2ch.net/test/read.cgi/php/988809842/
CGIの質問はこちら【CGIだけど、なんか質問ある?part5】
http://pc.2ch.net/test/read.cgi/php/1009331505/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
過去ログ、その他の役立ち情報は>>2-10を見よう。
005148
02/01/04 14:15ID:???005248
02/01/04 14:30ID:SUGVa40q教えてちゃんですみません。ロジックのヒントをお願いします。
0053名無しさん@お腹いっぱい。
02/01/04 14:49ID:kY4aCT8XあるCGIで生成した結果を表示後それをHTMLファイルとして保存するにはどうしたらよろしいでしょうか?
0054名無しさん@お腹いっぱい。
02/01/04 14:51ID:???005553
02/01/04 14:51ID:kY4aCT8XHTMLとして保存するスクリプト、または関数をご存知の方お教えください
005653
02/01/04 14:53ID:kY4aCT8X追記です
HTMLとして保存できるスクリプトか関数をお教えください
0058初心者
02/01/04 14:58ID:???005953
02/01/04 15:04ID:kY4aCT8Xマジ、わからないんですが、おっしゃられているのは「ファイル(F)→名前を付けて保存(A)...」
で保存してってことですか?
0060名無しさん@お腹いっぱい。
02/01/04 15:09ID:???ダイジョウブ?
0061初心者
02/01/04 15:10ID:???http://www.google.com/search?num=100&hl=ja&q=perl+%83t%83@%83C%83%8B%83n%83%93%83h%83%8B+print&lr=lang_ja
あとは自分で調べる努力を。
006253
02/01/04 15:18ID:kY4aCT8Xありがとうございます
0063名無しさん@お腹いっぱい。
02/01/04 16:04ID:???どのように記述すればいいんでせう?
よろしくお願いします。
0064名無しさん@お腹いっぱい。
02/01/04 16:05ID:???0065名無しさん@お腹いっぱい。
02/01/04 16:14ID:???分割したファイルが一つのファイルのように見えるようにインターフェイスを整えるのだ。
だから本当に大きなファイルが扱えるわけではない。
それでいいならちょいと書いてみるが?
0066名無しさん@お腹いっぱい。
02/01/04 16:33ID:ZcIQHoBD006748
02/01/04 16:33ID:SUGVa40qありがとうございます。お願いいたします。 ;;
ファイルサイズはこの先大きくなる一方なのですが、分割していくしかないでしょうか?
もしくは、データベースに突っ込むか・・・・・・
「Cで書け!」と言われてしまいました。
齢20代後半で今からCは身に付くでしょうか? ソース見てもクラクラします ;;
006865
02/01/04 16:58ID:???あくまでも個人的に面白いと思うから作るだけなんで。
だからといって適当な物を書くわけじゃないですが。
ついでに言うと*DBM_Fileとの連携は出来ないかと。
0069名無しさん@お腹いっぱい。
02/01/04 17:16ID:???KENTのPetitBoardに新記事のマークを付けるにはどうしたらようのでしょうか???
167 名前:名無しさん@お腹いっぱい。 投稿日:02/01/04 16:51 ID:???
↑何でマルチすんだよ糞ガキ消えろ
168 名前:名無しさん@お腹いっぱい。 投稿日:02/01/04 16:56 ID:ZcIQHoBD
うるせぇ俺は20歳だ。そんだけ気になっとんだ。
169 名前:名無しさん@お腹いっぱい。 投稿日:02/01/04 16:57 ID:ZcIQHoBD
そんな事より即効で文句言うてめぇの方がガキだ。
0070名無しさん@お腹いっぱい。
02/01/04 17:37ID:AGeoy3Tcバイナリで書くよりはCの方が簡単です。
まぁマジレスすると身につかないことは無い。
構文自体はPerlに似てるし。ただ、Perlに比べて
もっと「プログラムらしい規約」が多々出てくるので
Perl以外にプログラムをやったことが無かったら
馴染めないかもね。
おれは逆にZ80からCやFortran、RINGOやAppleScript等を
経てからPerlに来て、なかなかPerlに馴染めなかったけど。
007148
02/01/04 18:02ID:SUGVa40qすみません。ヒント程度の気楽なもので十分です。
ありがとうございます。
やりたいのはレコードの検索なので、DBMと連携なりは、考えます。
>>70
ありがとうございます。道のりの割に、使う機会が少なそうで・・・・
でも追い込まれないと勉強しないし・・・・・
自分は、N88BASIC -> 永い永い月日 -> Perl, PHP, VBScript群
しょぼ。
007265
02/01/04 19:28ID:???・配列にファイルハンドル(以下FH)を入れておく
・そのFHを通じて何か書き込みをする度にサイズをチェック(stat()してもいいし長さを記録しておいても良い)
・サイズが一定値を超えたら新しいファイルを作成して配列に新しいFHを追加
・seek()やらtell()やらは合計ファイルサイズを考慮して計算
・これらのことを通常のIOインターフェイスを通じて行えるようにタイクラスに閉じ込める。
って感じで(超適当な説明だが)
DBMと連携するにはまた別のことを考えなきゃいけないね。
複数のDBMハッシュを保持したタイハッシュクラスを考えればいけるんじゃないだろうか。
0073
02/01/04 19:32ID:CJ4spD6O0074
02/01/04 19:36ID:CJ4spD6Oメインデータは、データのカテゴリごとに分割する。
データ自体に一意のID振っておけば、それでデータの抽出が出来る。
そもそも、そんな巨大なデータをwhileとかで回しても、効率よくないだろうし。
007548
02/01/06 14:51ID:4VaeiTUGうをー! ありがとうです! エンジンかかってきた! やるでー!!
>73 >74
ありがとー
DBに入れるのも考えましたが、ディスク資源も既に虫の息なので、ホント ツライです。
0076名無しさん@お腹いっぱい。
02/01/07 23:02ID:???シーラカンス本(約\3,500)説明ワカリヤスイヨ.
プログラミング一から勉強するよりよっぽど楽勝ですし。
0077名無しさん@お腹いっぱい。
02/01/08 16:04ID:2bmV9luVファイルに記録する時などでファイルを
open (FILE,"+<$file");
で開いて変更するのと
open (FILE,"$file");
書き換え作業
open (FILE,">$file");
という方法だと後者だと良くないのでしょうか?
0078名無しさん@お腹いっぱい。
02/01/08 16:06ID:???0079名無しさん@お腹いっぱい。
02/01/08 16:11ID:???どういう考えでそういう結論に至ったのか問い詰めたい
0080名無しさん@お腹いっぱい。
02/01/08 16:20ID:2bmV9luVいろいろスクリプト見てると前者の方が多いと感じまして
後者の方はいかんのかな?と思ったです。
特に問題は無いと考えて良いみたいですね。
他に美しくない、負荷がかかる、なんかの問題も
無いのでしたら、何故前者の方がよく使われてるのでしょうか?
0081名無しさん@お腹いっぱい。
02/01/08 16:35ID:???処理中に落ちてデータが壊れる確率も大差ない気がする。
消えにくいようにするならこれかな?
open IN, "<$file" or die;
# ...
close IN;
open OUT ">$file.tmp" or die;
# ...
close OUT;
rename "$file.tmp" => "$file" or die;
0082名無しさん@お腹いっぱい。
02/01/08 16:36ID:XZoY9u5U後者の方が壊れる確率高いよ。
0083名無しさん@お腹いっぱい。
02/01/08 17:03ID:2bmV9luV減る可能性がある場合はtruncateは必須なんでしょうか?
0084名無しさん@お腹いっぱい。
02/01/08 17:09ID:???まず自分で試して見れ。
0085名無しさん@お腹いっぱい。
02/01/08 17:11ID:???ファイルサイズを揃えておきたい時なんかはそのまま書き出して
閉じたりするよ
必須と聞かれればNOになる
0086名無しさん@お腹いっぱい。
02/01/08 17:28ID:???ごめんです
試したら思いっきり変になりました。
これってOSによって実装されてない場合あるんですよね?
あんま使いたくなかったなぁ。
レスどうもでした。
0087名無しさん@お腹いっぱい。
02/01/08 17:45ID:2bmV9luV皆さんはチャットやらカウンターなんか作らない
かもしれないですが、
カウンターの場合は読み書き両用で1度だけopenするのに対して
チャットなんかだと読み込みのみでopenして
書きこみはまた後で書き込みのみでopenしてるのですが
この違いは何なのでしょうか?
0088名無しさん@お腹いっぱい。
02/01/08 17:48ID:???0089デフォルトの名無しさん
02/01/08 18:06ID:???ただCGI(だよな??)は排他とかトランザクション取らなきゃならないので
色んな手法でデータの同一性を保証出来るようなコードを書く必要は有る
チャット位ならどうって事ないような気がするが
0090どなたか
02/01/09 12:29ID:6I7ENOMK例えば1から100の範囲で4つ乱数を生成して、それを一つの配列に入れたいんですが。
$max = 乱数の最大値
$num = 個数
@kekka = 得られた乱数を[0..($num-1)]で格納する配列
という風にしたいんですが、どうしてもうまくいきません。
単純に指定個数の乱数を作って配列に入れるならできるんですが、
重複を許さないためにifやwhileで今までの結果を参照させようと
するとうまいコードが思い浮かびません。
もしかしたら簡単な解決方法があるのかと思いここに書き込ませてもらいました。
0091デフォルトの名無しさん
02/01/09 13:06ID:???until ($n == $max) {
$r = rand(100);
push(@ary,$r) and $n++ if(!grep /$r/,@ary);
}
0092デフォルトの名無しさん
02/01/09 13:08ID:???until (my $n == $num) {
my $r = rand($max);
push(@kekka,$r) and $n++ if(!grep /$r/,@kekka);
}
0093名無しさん@お腹いっぱい。
02/01/09 13:19ID:???my @kekka;
my $max = 100;
my $num = 4;
die('$max の値が $num より多いとダメだから注意な。') if $num > $max;
my %temp;
my $rnd;
my $n = $num;
!$temp{($rnd = int(rand $max) + 1)}++ and push(@kekka, $rnd) and --$n while $n;
009493
02/01/09 13:20ID:???009590
02/01/09 13:23ID:6I7ENOMKでも実行してみたらループしてる・・・うーん、どっか変数間違えたかな。
こんな感じでやってみたんですが
#ここから
$max="10";
$num="4";
until (my $n == $num) {
my $r = int(rand($max));
push(@kekka,$r) and $n++ if(!grep /$r/,@kekka);
};
print "@kekka";
#ここまで
これってgrepの結果が真だった場合は同じ$nでまたループしてるんですよね。
ということは、grepが真を返してない(?_?)
0096名無しさん@お腹いっぱい。
02/01/09 13:25ID:lzfPILoX009790
02/01/09 13:26ID:???助かった〜〜〜
91さんも93さんも有り難うございます。
解読して考え方を参考にしますね。
009890
02/01/09 13:27ID:6I7ENOMKperl5だといらないそうです
0099名無しさん@お腹いっぱい。
02/01/09 13:28ID:???らしき話をどこぞで見たような。
010090
02/01/09 13:31ID:???呼び出しているそうです。その場合はtimeとprocess IDを元にsrandしている
ことになるそうです。受け売り。
0101名無しさん@お腹いっぱい。
02/01/09 13:54ID:lzfPILoXなるほど〜、ありがとうございます。
5.003以前だとsrandしないといけないって事ですね。
バージョン依存は難しいです、いろいろ。。。
0102名無しさん@お腹いっぱい。
02/01/09 15:11ID:yTZZpKpqまったくうまい子といきません。
やりたいことは、名前入力 名前に対してのカウント数
これくらいです。
一応ソース載せます、めちゃくちゃだと思うので一から出直せとかきついこといってください。
read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
foreach $pair(split(/&/, $query)){
($name,$value)=split(/=/,$pair);
$name=$value;
}
OPEN(FILE, ">+./$name/count.dat);
$count=<FILE>;
print FILE ++$count;
close<FILE>;
OPEN(NAME, ">+./namedata.dat");
while ($check=<NAME>){
if ($check ne $query){
seek(NAME,0,2);
print NAME $query\n;}
}
####スミホマ
print"content-type: text/html\n\n";
print"<table border=\"1\">";
while($uname[$list]=<NAME>){
$data="./$uname[$list]/count.dat";
print"<tr><th>$uname[$list]</th><td>$data</td>\n";
}
print"content-type: text/html\n\n";
print"<table border=\"1\">";
foreach $key (sort keys %uname){
print"<tr><th>$key</th><td>
まだ途中です。
0103名無しさん@お腹いっぱい。
02/01/09 15:29ID:???それだとフォームからのを ほとんど読み捨てない?
あと
OPEN(hoge,">+ filename");
だと関数名が違ううえに 開いた途端ファイルが空になりそう。
http://tohoho.wakusei.ne.jp/wwwperl.htm
0104名無しさん@お腹いっぱい。
02/01/09 15:33ID:yTZZpKpqううむ、もっかいやり直して載せてみます。
頑張ります。ありがとー
0105名無しさん@お腹いっぱい。
02/01/09 22:11ID:???何を参考にしたらそんなソースになったのか知りたい。
0106名無しさん@お腹いっぱい。
02/01/09 22:46ID:CEjm/hO6<#!/usr/bin/perl
となってしまいます。windowsからアップしているのですが、
LFでアップしようがなんだろうが<がついてしまいます。
原因わかるかたいらっしゃったら教えてくださいー
0107名無しさん@お腹いっぱい。
02/01/09 22:50ID:no3DVS2qどこに?
0108名無しさん@お腹いっぱい。
02/01/10 11:13ID:6z++Gsnnopen(F, file) || die;
tie(%IDX, 'GDBM_FILE', file.gdbm);
$id = tell(F);
while(<F>) {
$name = $_;
#ココ?
$IDX{$name} = $id;
$id = tell(F); #この行は
}
untie %IDX;
close F;
これはうまくいくのですが、「$id=tell(F);」を、「ココ?」に入れる方が
正しい気がしてなりません。
しかし、そうやって作ったgdbmファイルの返す結果はズレズレです。
えらい勘違いしてるのかもしれませんが、よろしくお願いします。
0109名無しさん@お腹いっぱい。
02/01/10 12:20ID:???0110名無しさん@お腹いっぱい。
02/01/10 12:50ID:???まったくうまい子といきません。
ワラタ
0111名無しさん@お腹いっぱい。
02/01/10 13:30ID:???鯖の問題では?
タグ埋め込もうとしてるとか
0112108
02/01/10 13:54ID:6z++Gsnn「ポインタは行頭にしか置かれない」と思い込んでました。アホー
前行の行末 = 次行の行頭 なんですね。
スッキリしました。ありがとうございました。
0113名無しさん@お腹いっぱい。
02/01/11 13:45ID:sSwGXaK5これ使ってる人って居ます?
0114名無しさん@お腹いっぱい。
02/01/11 15:34ID:uaH1srIUソース見てると出てくる
<input type=hidden name=time value=1010730193>
って何? 時間みたいだということはわかるんだけど・・・
あと,perlで書かれた2ch書き込みプログラムのサンプルが
あったらきぼんぬ
0115名無しさん@お腹いっぱい。
02/01/11 15:50ID:USEv/wv3time関数で取得した書き込み時間をhidden属性で渡してると思われ。
0116名無しさん@お腹いっぱい。
02/01/11 15:55ID:???何の為に? (笑
0117名無しさん@お腹いっぱい。
02/01/11 15:57ID:???0118名無しさん@お腹いっぱい。
02/01/11 16:01ID:???0119名無しさん@お腹いっぱい。
02/01/11 16:08ID:???0120名無しさん@お腹いっぱい。
02/01/11 16:15ID:???本当に困っています
教えて下さい
0121名無しさん@お腹いっぱい。
02/01/11 16:26ID:USEv/wv3>>120 = >>114 なの?
>>114でゆってる「ソース」ってブラウザ画面からとってきたやつ?
0122名無しさん@お腹いっぱい。
02/01/11 16:35ID:???0123114
02/01/11 16:37ID:uaH1srIUあ,>>120じゃないです,けどThx.IEやネスケの「ページのソースを見る」
ってやつだとオモタ(IEもネスケも使ってないから知らん).
生timeを10進数で書いただけなのね
…あ,もしかして,これをいじると連続投稿できたりするの?
もしかして(って,そこまで杜撰じゃないか)
0124名無しさん@お腹いっぱい。
02/01/11 16:43ID:???HTMLにID埋めて判別出来なる訳ないじゃん
0125121
02/01/11 17:01ID:???ソース見てない作者でもない >115で書いたことくらいしかわがんねっす。
0126名無しさん@お腹いっぱい。
02/01/11 17:06ID:???こときぼんぬ
0127121
02/01/11 17:18ID:???0128名無しさん@お腹いっぱい。
02/01/11 21:22ID:???0129名無しさん@お腹いっぱい。
02/01/12 02:26ID:Ex/FkKTs電卓を使いましょう。
0130名無しさん@お腹いっぱい。
02/01/12 03:30ID:???$ENV{'TZ'} = 'JST-9';
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$day = ('日','月','火','水','木','金','土')[$wday];
$date = sprintf("%04d/%02d/%02d(%s) %02d:%02d:%02d",$year+1900,$mon+1,$mday,$day,$hour,$min,$sec);
}
とあって、時間表示で秒を表示させたくないとか年を表示させたくないとか、
色々変えたいのですが初心者すぎてどうしたらいいのかわかりません。
時間表示をどういう風にカスタマイズしたらいいのか、
解説してあるサイトを教えていただけませんか?
他の所も勉強すべきなんでしょうけど、急いでいるので
とりあえず時間表示の部分だけどうしたらいいのか知りたいのです。
検索しようにも漠然としててどうしたらいいかわからないし、よろしくお願いします。
0131
02/01/12 03:52ID:H5EXwuVV;### 時分秒・年月日・曜日を取得するなら以下で充分
($sec,$min,$hour,$mday,$mon,$year,$wday)= (localtime)[$[ .. $[+6];
;### 年および月は次のようにする
$year+= 1900; $mon++;
;### 時・分・秒・月・日は、ゼロサプレス無しにするなら次のように
;### する。(sprintf関数がオーバーヘッドは大きくてらっしゃるから)
if ( $sec < 10 ){ $sec= '0' . $sec; }
0132130
02/01/12 04:39ID:???ありがとうございます…
一生懸命理解しようとしたのですがよくわかりませんでした。
どこにどうやって記述したらいいのかが…
年表示は2002年なら02にするか非表示にしたいんです。曜日表示も消したいんですが…
例えば(02/01/12/04:38)か(01/12/04:38)のようにしたい。
途中経過を無視して答えだけクレクレ厨してるようで心苦しいのですが
どう書けばいいのか丸ごと教えてくださればうれしいです。
本当にすみません。
0133名無しさん@お腹いっぱい。
02/01/12 04:43ID:???>どう書けばいいのか丸ごと教えてくださればうれしいです。
ここはPerlのコーディングで困ってる人のスレです。
0134名無しさん@お腹いっぱい。
02/01/12 04:51ID:???http://pc.2ch.net/test/read.cgi/php/988808396/
0135張り直し
02/01/12 04:52ID:???http://pc.2ch.net/test/read.cgi/php/988808396/
「こういうふうにスクリプトを改造したいけどやりかたわかんないよー」
という人がいましたらここで聞いてください。
ひょっとしたらアドバイス出来るかもしれません。
0137
02/01/12 06:11ID:h7K0q4m9;### 年表示フラグ
$DISP= 1; # (0:年非表示, 1:年表示)
;### 年月日・時分の取得
$get_time= &get_time;
;### 年月日・時分取得用サブルーチン
sub get_time{
my( $min, $hur, $day, $mon, $year )= (localtime)[$[+1 .. $[+5];
$year+= 1900; $mon++;
if ( $min < 10 ){ $min= '0' . $min; }
if ( $hur < 10 ){ $hur= '0' . $hur; }
if ( $day < 10 ){ $day= '0' . $day; }
if ( $mon < 10 ){ $mon= '0' . $mon; }
$year= $DISP ? substr($year, -2, 2).'/' : '';
"$year$mon/$day/$hur:$min";
}
0138
02/01/12 06:29ID:gr/TbQbq補足しておきますが、字下げのために全角スペースを使用していますので、
コピペする場合は半角スペースに書き替えてください。
0139名無しさん@お腹いっぱい。
02/01/12 07:12ID:???ご丁寧にありがとうございます…
スペースを半角にしてそのままコピペしましたが、
でもそれでやると、[]となって一つも表示されません…
素直に改造スレへ逝って来た方がよさそうです…
0140
02/01/12 07:30ID:8mAO1za5これをやっても表示されないとなると困ったことですね。
念のため次の実行でワーニングが出るかどうか試してみては?
perl -wc xxx.pl
0141名無しさん@お腹いっぱい。
02/01/12 08:31ID:???sub get_time{
$ENV{'TZ'} = 'JST-9';
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$date = sprintf("%02d/%02d %02d:%02d",$mon+1,$mday,$hour,$min);
}
0142名無しさん@お腹いっぱい。
02/01/12 10:04ID:???やっとわかりました!
希望通りにできました。
色々と変える変更も好きなようにできました。
脱線話題なのにつきあってくださって教えてくださって本当に感謝します、
ありがとうございました。
0143名無しさん@お腹いっぱい。
02/01/12 22:55ID:WkPCmc4xそれと、CGI作る際に覚えといたほうがいい言語って何ですか?perlは駄目??
0144名無しさん@お腹いっぱい。
02/01/12 23:24ID:???とほほとか。
CGIはPerlでもいいけどPHPの方が簡単だと噂
0145ム板の住人
02/01/13 03:44ID:XUMgdFRPちゃんと削除依頼も出していたみたいやから、えらいね。
144がいう。とほほはここ。
http://tohoho.wakusei.ne.jp/wwwperl.htm
PHPもいいけど、RubyができるならeRubyでもいいかも。
言語として簡単と言うより、PHPやeRubyはCGIを作るのが簡単。
CGIはPerlが一番資料があると思うけど、
配布されているPerlのCGIのソース見るとわかるように、
ほとんど暗号だから。
保守性やOOで組みたいなら、PythonやRubyを使った方がいいかもね。
0146初心者
02/01/13 04:52ID:DlteyoA5CGIを使いたいのですが
自分で色々やってみたんですがどうしてもできませんでした
やったことはActive PerlとJperlをInstallして
落としてきた掲示板CGIにそのパスを書いたんですが
FTPからそのCGIの属性変更をしようとしても変更できず
HTTP 500内部サーバエラーが出てできませんでした
どなたか詳しく教えていただけませんか?
0147名無しさん@お腹いっぱい。
02/01/13 04:54ID:H4tslrXdテキストファイルやMIDIファイルを主に扱いたいのですが
JPEGファイルだけでなくいろいろな形式のファイルを
アップロードできる掲示板のスクリプトで
デファクトスタンダードっぽい有名なものとかあるのでしょうか?
イメージ掲示板にはどこに行ってもこれと同じのを使っているなぁという
有名なのがあるみたいですが
0148名無しさん@お腹いっぱい。
02/01/13 04:54ID:34eWZDO9ネタだろ?
0149名無しさん@お腹いっぱい。
02/01/13 04:56ID:???http://www.google.co.jp/search?hl=ja&q=%83A%83b%83v%83%8D%81%5B%83_+cgi%81@%83t%83%8A%81%5B&lr=
これでもくらえ。
0150名無しさん@お腹いっぱい。
02/01/13 05:07ID:H4tslrXdおれも「アップローダー」&「CGI」&「フリー」&「配布」で
検索して同じように膨大な結果になったんですけど
無難なとこで、みんなが使っている有名なやつにしたいなぁなんて
ダメっすか?(^^;
0151名無しさん@お腹いっぱい。
02/01/13 05:39ID:???■ このスレッドは過去ログ倉庫に格納されています