Perl 初心者コーナー Part21
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/03/18 18:47ID:Dujz7IUF【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 9
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 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
過去ログやお勧めサイトは >>2-10
0611nobodyさん
03/04/04 09:48ID:???そろそろ赤字でIP晒して欲しいな。
0612nobodyさん
03/04/04 11:02ID:lpjcObWVで、CSV形式つっても、アプリによって微妙に差があるじゃないですか?
そこで、自分はエクセル用のCSVにしたいと思ってるんですが、
その際の仕様はどーすればいいんでしょうか?
●値は,で区切る
●値の中に"があるときは""と入力
●改行はそのまま改行を入れる。
●数字以外はセルの値を""でくくる
・・・でOK?
0613nobodyさん
03/04/04 11:07ID:???0614nobodyさん
03/04/04 11:37ID:T4cPGriSkeys関数は、ハッシュ変数のすべてのキーをリスト値として返します。
@key = keys( %hash );
キーの格納には乱数を使った手法が使われるため、ハッシュ全体を出力する場合、その順番は保証されません。ですから、@key には %hash のキーが順序を無視して格納されます。
順番通りに格納すればいいのに、どうしてこういう仕様になってるんですか?
perl作ってる人は何を考えてるんですか?
0615nobodyさん
03/04/04 11:37ID:???>>2
> [お薦め]
> ・Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm ★読んどけ
0620nobodyさん
03/04/04 13:12ID:???0621nobodyさん
03/04/04 13:16ID:???0623nobodyさん
03/04/04 13:29ID:Oo/SV5Mjのパスを指定することができない(みたい)ので、テストで非常に難儀します。
サンプルのpasswd,groupファイルを読ませる方法はないのでしょうか。仕方なく
Unix::ConfigFileを使っているのですが、重いです。非常に便利で、なおかつどこで
も使える組みこみ関数なだけに惜しい。
0624251
03/04/04 13:49ID:???Win32::APIが入ってないんじゃないの?
>>612
http://www.din.or.jp/~ohzaki/perl.htm#CSV2Values
http://www.din.or.jp/~ohzaki/perl.htm#CSVfromValues
>>614
配列みたいに、キーにはa>bみたいな上下関係無いもん・・・
何をもっての順番なのか意味不明・・・
0625nobodyさん
03/04/04 13:59ID:???>キーの格納には乱数を使った手法が使われるため、
って笑われぞ。ちゃんと順番には出てくる。
メモリーの格納順であって、キーの順番になっとらんだけだつーの(w
0629nobodyさん
03/04/04 14:47ID:???0630nobodyさん
03/04/04 14:48ID:n4Opp+jHヤフーのログイン・ログオンはどういう仕組みなのかな?
0634nobodyさん
03/04/04 18:42ID:???Win板のXPスレで聞いてこい。
0635nobodyさん
03/04/04 18:47ID:jyfKo/rmスルーでつが?それが何か?
0636606
03/04/04 19:09ID:???試しにperl.exeを起動して、最初の一行目に
use Win32::API;
と、入力してリターンを押すとウインドウが閉じてしまってエラーメッセージすらも見れません
win32::apiが入ってない場合はどのようにすればいいのでしょうか?
よろしくお願いします(´Д⊂)
0637nobodyさん
03/04/04 19:16ID:???>ウインドウが
この時点で俺はお手上げだなぁ。
とりあえず、その perl.exe とやらはどこから入手したのさ?
0640nobodyさん
03/04/04 20:50ID:???perl.exeを*ダブルクリックで*起動して、perlがstdin待ちになったところへ
use Win32::API;と入れて、すく終了してウィンドウが閉じたと。漏れはUNIX派なので
ここらへんよく分からんが、WindowsだとCtrl-d押さなくても終了になるんかな。
コマンドプロンプトを知らん人が、Win32::APIなど使えるわけありません。あきらめ
た方が時間の節約になりますYO。
0643606
03/04/04 21:22ID:???一種類だけ動かないんで聞いてみました
0644nobodyさん
03/04/04 21:28ID:OlDxyviA例えばあるページで使用した$test1=10を次のページでも
form変数やurl変数で送らずに使用したいです。
可能でしょうか?教えてくださいまし。
0646nobodyさん
03/04/04 21:30ID:???ファイルに保存しる。
0651nobodyさん
03/04/04 21:47ID:???レベルはそんな所であろうな・・・
一応Un?xで動かないとか訳解らん事言ってるんじゃないのな・・・
ppm install win32-api
とコマンドプロンプトに打ち込めばモジュールはインスコ出来るけど
ttp://member.nifty.ne.jp/hippo2000/perltips/module_install.htm
>606はココ読んで勉強しなさい
0652606
03/04/04 22:05ID:???解決しました
time-hiresとhttp-liteは入れたんですが、一つ足りなかったようですね
なんか勉強不足で訳分からない事言ってたと思いますが
ありがとうございます
0653nobodyさん
03/04/05 01:50ID:???0655nobodyさん
03/04/05 03:40ID:???せっかくだから653が立ててよ
ていうかこのスレでガンガン貼っていってもいい?
一応初心者ってことで質問とは限ってないみたいだし
0656nobodyさん
03/04/05 04:00ID:???http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/index.html
で専用スレ立てる方がいいぞ。
半角空白とかそのまま貼れるし。
0657nobodyさん
03/04/05 04:14ID:???なんでそうなるのよ?
じゃあiisってなにするためにあるの?
0659nobodyさん
03/04/05 05:13ID:???それを確かめるためのif文はどう書けばいいのでしょうか?
要するに、
if (配列@dataに、[0-9],\n,\tとスペース以外が使われている){
&error;
}
この( )の中の記述です。
やっぱforeach等でまわさないとダメっすか?
0661659
03/04/05 06:45ID:???完璧っす!
joinの使い方覚えました!
実は。。。
/^[0-9\n\t ]
を
/[^0-9\n\t ]
って読み違えてて。。。
きゃははははは! (もう笑うしかない。。。 自爆)
0662マリモーマ ◆r6PDGT6Xd2
03/04/05 11:23ID:4Hc1kYlWタイトル 自作CGIを評価するスレ
内容 自分の作った CGIを みんなに評価してもらうレスだよ
0665nobodyさん
03/04/05 12:21ID:???0667653でつ
03/04/05 14:07ID:t4dpk1aS掲示板を作ったのでつが、細かい部分から全体の流れまでを評価してくれるサイトを知りたかったのでつが・・・
0668nobodyさん
03/04/05 14:08ID:???せっかく専用スレを立てたんだから活用してくれよ。
http://pc2.2ch.net/test/read.cgi/php/1049514428/
0669nobodyさん
03/04/05 14:51ID:???LOG書き込み処理
close (LOG);
open (DAT,$datfile) || &error("ファイルオープンエラー : $datfile");
DAT書き込み処理
close (DAT);
↑こんなときにdatfileを開くところでエラーが出たとき、
logfileには書き込まれてるのにdatfileは書き込まれないって事になりますよね?
それを回避するためには↓のようにすればいいのかなぁなんて素人なりに考えたんですが、
おかしいですか?
open (LOG,$logfile) || &error("ファイルオープンエラー : $logfile");
open (DAT,$datfile) || &error("ファイルオープンエラー : $datfile");
LOG書き込み処理
DAT書き込み処理
close (LOG);
close (DAT);
0670nobodyさん
03/04/05 15:31ID:???openとcloseをどう並べ変えようが無理じゃないかな。
DAT書き込みが失敗したらLOG書き込みを「自分で」削除することが必要。
0671nobodyさん
03/04/05 15:43ID:???&errorの中でexitします
んで、質問はopenで失敗したらだったんですが、
たしかに書き込みで失敗したら一緒ですよね
でも例えば$logfileのmax行数が決まってて、
書き込み処理のなかでmaxを超えてたら古いのを削除とかしてると、、、
こういう複数ファイルの処理の時ってどうするべきなんですかねぇ?
みなさん気にせず書いてるものなんですか?
0672nobodyさん
03/04/05 16:01ID:???完全な物を作ってからリネームするのが普通。
0673デフォルトの名無しさん
03/04/05 16:03ID:E+nPGg0Q>↑こんなときにdatfileを開くところでエラーが出たとき、
それより、書き込むには、
open (LOG,>$logfile) ってしなきゃだめだよ。
open (LOG,$logfile) で書き込めてるなんておかしいよ。
慎重に質問しれ。
0674669
03/04/05 16:22ID:???なるほど。テンポラリーを作っといてリネームするんですね
勉強になりました。ありがとうございます。
>>673
すいません。読み込みのところからコピペしたんで忘れてました。
0675nobodyさん
03/04/05 17:40ID:EfZ+i867多分オーバーフローしてるんだと思うんですけどいい方法無いですか?
0676nobodyさん
03/04/05 17:46ID:???0678nobodyさん
03/04/05 18:06ID:MPfOwriqどーもっす。調べてみます。
0679675
03/04/05 18:11ID:MPfOwriqダメでした。
今やりたいのは十進で60桁程度の演算なんですけど
そういう計算したいときにみなさんはどうやってやるんでしょうか?
0683669
03/04/05 18:59ID:???open (LOG,>$logtmp) || &error("ファイルオープンエラー : $logtmp");
LOG書き込み処理
close (LOG);
open (DAT,>$dattmp) || &error("ファイルオープンエラー : $dattmp");
DAT書き込み処理
close (DAT);
rename("$logtmp", "$logfile") || &error("リネームエラー : $logfile"); #※1
rename("$dattmp", "$datfile") || &error("リネームエラー : $datfile");
ちょっと思ったんですけど、↑こういうことですか?
じゃあ※1でエラー出たら一緒じゃないですか?
0684nobodyさん
03/04/05 19:11ID:???リネーム失敗なら、テンポラリを削除して処理を終了でいいでしょ。
読み書きは正常なのに……とかセコいこと考えないで、完全エラー無し以外は
すべて異常終了扱いにしたほうがいい。
0685nobodyさん
03/04/05 19:13ID:???0686nobodyさん
03/04/05 19:15ID:???という配列があって sortすると
1,10,2,22,3となってしまいます。
これを1,2,3,10,22のように実際の大きさ順に
ソートするにはどうすればいいのでしょうか?
0687nobodyさん
03/04/05 19:18ID:???0688nobodyさん
03/04/05 19:20ID:???0691669
03/04/05 19:43ID:???んーよくわからないんですが・・・
>完全エラー無し以外は すべて異常終了扱いにしたほうがいい。
それはわかるんですが、どういう風に書けばそうなりますか?
rename("$logtmp", "$logfile") || unlink("$logtmp");
rename("$dattmp", "$datfile") || unlink("$logtmp","$dattmp");
こういうことですかねぇ?
あと、今まで既にあるデータを読み込まずに
open (DAT,>>$dattmp) || &error("ファイルオープンエラー : $dattmp");
DAT書き込み処理(追加)
close (DAT);
↑こうして追加してたんですけど、
一度テンポラリファイルを作ってリネームとなると、
全て読み込んでから新しいのを足したものを上書き
しないといけなくなりますよね?
処理の重さは変わらないですか?
0692nobodyさん
03/04/05 20:08ID:???でも、やらなきゃならないんなら、しょうがない。
0693nobodyさん
03/04/05 20:16ID:???open (LOG,>>$logfile) || &error("ファイルオープンエラー : $logfile");
$pointer = 0;
$pointer = ファイルポインタを取得する関数
LOG書き込み処理(追加)
close (LOG);
if (!open (DAT,>>$datfile)) {
if ($pointer != 0) {
open (LOG,>>$logfile)
truncate($pointerで切り詰め);
close (LOG);
}
&error("ファイルオープンエラー : $datfile");
else
DAT書き込み処理(追加)
close (DAT);
end
むちゃくちゃだけど、こんなんはどうですか?
0694Perlですが
03/04/05 20:17ID:qMi3a/lAindex.cgiのFORMデータをsubmit.cgiに引き渡して処理させたいのですが、どうやればいいのでしょうか?
親切なアドバイス待ってます。
0695nobodyさん
03/04/05 20:22ID:???http://tohoho.wakusei.ne.jp/wwwxx034.htm
↑ここ見て研究
0696あぼーん
03/04/05 20:36ID:???! i iノノリ)) 〉
i l l.´ヮ`ノリ <先生!こんなのがありました!
l く/_只ヽ
| ̄ ̄ ̄ ̄ ̄|
http://saitama.gasuki.com/mona/
0698Perlですが
03/04/05 20:41ID:qMi3a/lAそれではなくて他に方法はありませんか?
0699nobodyさん
03/04/05 20:55ID:???なんかムカつく。
submit.cgiでおこなう処理をindex.cgiの中から呼べばいいだろ
わざわざ"引き渡す"意味がわからん
0701nobodyさん
03/04/05 21:19ID:???0702nobodyさん
03/04/05 21:48ID:???ちょっと直した
open (LOG,>>$logfile) || &error("ファイルオープンエラー : $logfile");
$pointer = tell(LOG); # ファイルポインタの位置を返す
LOG書き込み処理(追加)
close (LOG);
if (!open (DAT,>>$datfile)) {
open (LOG,>>$logfile) # ←エラーが発生しないことを祈る
truncate(LOG,$pointer);
close (LOG);
&error("ファイルオープンエラー : $datfile");
} else {
DAT書き込み処理(追加)
close (DAT);
}
こんなんでいいのかどうか分からないが・・・
logfileとdatfileの整合性を保つためのもっといい方法があるのだろう・・・
0703nobodyさん
03/04/05 21:51ID:???>>親切なアドバイス待ってます。
>なんかムカつく。
>>694は、あまりにもアレな質問して叩かれたことがあるに1000クックブック
0706nobodyさん
03/04/05 22:28ID:???$pointer = tell (LOG);
windowsじゃtell使えないんでしょうか?
なぜか0を返すんです。
ちゃんとその後printしたものは追加書き込みになってるんですけどねぇ
0707705
03/04/05 22:37ID:???漏れの環境(WinXP+ActivePerl5.6)で
open(FILE,">>test.dat");
$p = tell FILE;
close(FILE);
print "$p\n";
test.datの中身を例えば、
aaa\r\naaa\r\n
として、上のスクリプトを実行すると、
「10」となります。
なんで706さんは0になるのかなぁ。わかんねぇ。
0708nobodyさん
03/04/05 22:42ID:???perl -e open(F,">>hoge");$p=tell(F);close(F);print $p,"\n";
$ wc hoge
1 4 60 hoge
$ perl -e 'open(F,">>hoge");$p=tell(F);close(F);print $p,"\n";'
60
漏れの環境でも正常です。Win2k
$ perl -v
This is perl, v5.6.1 built for cygwin-multi
0709nobodyさん
03/04/05 22:51ID:???調べてきます。
0710
03/04/05 23:10ID:sLGWgkab■ このスレッドは過去ログ倉庫に格納されています