1 名前:nobodyさん mailto:sage [2006/09/10(日) 13:33:48 ID:???] このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 Perl使いが優しくコメントを返しますが、 お礼はPerlの布教と初心者の救済をお願いします。
508 名前:nobodyさん mailto:sage [2007/11/27(火) 14:09:42 ID:???] Perlのプログラムに関しての質問です. 現在2つのテーブルデータがありまして, 片方がID付きの参照テーブルになってまして,片方がログデータになってます. ログデータを読み込んで,参照テーブルのいくつかのカラムを比較し,同一の データを持つもつデータの参照IDを投げるという処理を行ってます. 現在ログデータを1行ごとに取り出し,その一回一回に参照テーブルを一致させるまでループして比較するという処理を行ってますが, データの量もあり時間がかかりすぎて仕方ありません.何か良い方法はないでしょうか イメージとしては以下の通りです. この例ではログテーブルの2番目,3番目,4番目の文字を,参照テーブルの2番目,3番目,4番目と比較し 一致したら,参照テーブルの1番目のIDを出力してあげるといった形です. ログテーブル 1107,A,B,C 1108,C,A,D 1109,A,C,B 1110,A,B,C 参照テーブル 1,A,B,C 2,A,C,B 3,C,A,D 出力データ 1107,1 1108,3 1109,2 1110,1
509 名前:nobodyさん mailto:sage [2007/11/27(火) 17:03:00 ID:???] >>508 my $log = <<'EOF' ; 1107,A,B,C 1108,C,A,D 1109,A,C,B 1110,A,B,C EOF my %table = reverse map{ split /,/, $_,2 } split /\n/, <<'EOF' ; 1,A,B,C 2,A,C,B 3,C,A,D EOF printf "%s\n", join ',', map{ $table{$_} || $_ } split /,/, $_, 2 for split /\n/, $log ; 文字通り参照テーブルをテーブルにするだけだよ。 >>507 人狼の掲示板で聞くのがスジだ。 インストールし忘れ(jcode.plなんか)とかチェックポイントが多すぎて答える気にもならん。
510 名前:508 mailto:sage [2007/11/27(火) 20:31:16 ID:???] >>509 有難うございました. 実際やってみまして上の例ではちゃんと出力できたことは確認しました。 しかし%tableの意味するところが勉強不足でちょっと分かりませんでした。 変数等をいじったりしてみたのですが お恥ずかしいところですが、具体的にどのような処理を行っているのか教えて頂けると 幸いです。
511 名前:nobodyさん mailto:sage [2007/11/28(水) 00:13:10 ID:???] my %table~~の行。 「改行区切りのデータをsplit して無名配列に入れ(split...) その要素を最初の,だけで区切って更に無名配列として返し(map{}) 結果として必ず偶数個となっている配列をhashと見なしreverse(reverse) それを%tableと云うhashに収納。」 printf~~の行。 「$logを改行にてsplitして無名配列に入れ(forの後のsplit...) それをfor修飾子にてループ(for)。 その各要素を最初の,だけで区切って無名配列に入れ(forの前のsplit...) その無名配列の要素をkeyとして テーブルにデータがあればテーブルのデータを返し、 なけれはそのまま要素を返す(map{})## で,でjoinして(join...) printf で整形してprint out(printf)」 ## は真面目に $_[1] だけ table見に行かすべきなんだけど メンドかったから、、、 EOF云々は「ヒアドキュメント」 まずは本でhashを覚えるんだ。
512 名前:nobodyさん mailto:sage [2007/11/28(水) 00:29:11 ID:???] スレタイと>>1 読んで反省した。 スタンダードな書き方で書くべきでした。 my $table = <<'EOF' ; 1,A,B,C 2,A,C,B 3,C,A,D EOF my %table ; foreach my $line ( split /\n/, $table ){ my @dat = split /,/, $line, 2 ; $table{$dat[1]} = $dat[0] ; } foreach my $line ( split /\n/, $log ){ my @dat = split /,/, $line, 2 ; print $dat[0] . ',' . $table{$dat[1]} . "\n" ; }
513 名前:509 mailto:sage [2007/11/28(水) 11:28:52 ID:???] なるほど,これなら理解できそうです. この例では,一致させる列が順番になってますが,現在扱っているデータでは 順番にはなっていないのですが,整列してから処理したほうが良いですかねぇ? わざわざ有難うございます. 助かりました.
514 名前:509 mailto:sage [2007/11/28(水) 13:38:32 ID:???] 何回も申し訳ありませんが, $tableないし$logデータは別ファイルに保存されているので,ファイルから 読み出しを行ったので,配列として読み出したのですがこの場合処理は どうなるのでしょうか.
515 名前:nobodyさん mailto:sage [2007/11/28(水) 13:58:53 ID:???] さすがにちょっとは自分でもしらべようぜ。 ヒント貰ってるんだからforeachとsplit辺りから検索できるだろうし。
516 名前:509 mailto:sage [2007/11/28(水) 14:21:28 ID:???] ↑すいません,自己解決です。
517 名前:465 [2007/11/28(水) 23:46:53 ID:JbJxNee4] activePerl5,8インストールしようとしたら invalid Drive:G ってなってインストールできナス orz 助けて下さい
518 名前:nobodyさん mailto:sage [2007/11/29(木) 13:33:09 ID:???] ドライブGがないのに、ドライブGをインストール先に指定しているだけでしょ
519 名前:超初心者 [2007/11/30(金) 10:10:18 ID:Hc83DxRo] Perlがわからない超初心者です。よろしければ教えてください! 広告管理CGI ver1.3 hpcgi2.nifty.com/hary/soft/myfile.cgi?num=25 これを使ったんですが、文字化けで悩んでいます。 ホームページビルダーShift_JISで使っている場合は問題ないですが、 ワードプレス(UTF-8)やロリポブログ(EUC)だと文字化けしちゃいます。 いろいろと試してみたのですが、まったく駄目です。 すいませんが、どこを直せばいいのでしょうか? よろしくお願いします。
520 名前:nobodyさん mailto:sage [2007/11/30(金) 12:36:34 ID:???] >>519 そのURLのサポート掲示板へ逝け
521 名前:超初心者 [2007/11/30(金) 13:03:46 ID:Hc83DxRo] 確かにサポート掲示板で書けばいいのですが、 この掲示板2006/8で終わっているようでらちが明かないので質問しています。 すいませんが、どなたか手助けお願いします。
522 名前:nobodyさん mailto:sage [2007/11/30(金) 13:30:01 ID:???] >>519 スレ違い CGI設置について質問【Part3】 pc11.2ch.net/test/read.cgi/php/1176143582/
523 名前:nobodyさん [2007/11/30(金) 15:31:46 ID:8pPZwPu7] どうも、こんにちは。 CGIゲームの改造(TOWN)をしている者です。 独自タグを導入しようと思っています。 #タグ処理 $in{'a_com'} =~ s/\[i\](.+?)\[\/i\]/<em>$1<\/em>/gi; $in{'a_com'} =~ s/\[b\](.+?)\[\/b\]/<strong>$1<\/strong>/gi; $in{'a_com'} =~ s/\[u\](.+?)\[\/u\]/<u>$1<\/u>/gi; $in{'a_com'} =~ s/\[pre\](.+?)\[\/pre\]/<pre>$1<\/pre>/gi; $in{'a_com'} =~ s/\[s([1-7])\](.+?)\[\/s\]/<font size="$1">$2<\/font>/gi; $in{'a_com'} =~ s/\[c=(\S+)\](.+?)\[\/c\]/<font color="$1">$2<\/font>/gi; $in{'a_com'} =~ s/</</g; $in{'a_com'} =~ s/>/>/g; $in{'a_com'} =~ s/([^=^\"]|^)(https?\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+)/$1<a href=\"$2\" target=\"_blank\">$2<\/a>/g; $in_a_com = $in{'a_com'};#koko2006/11/07 このような感じにしたのですが、独自タグを記述してもタグのままでてしまいます。 独自タグを入力すると、変換はされるのですが、結果が表示されません。 このような場合どのようにすれば良いでしょうか? 宜しくお願いします。
524 名前:nobodyさん [2007/12/01(土) 04:28:25 ID:p/Twqk8/] >>523 独自タグ処理の後に<と>に変換してるからじゃない?
525 名前:nobodyさん [2007/12/01(土) 04:29:21 ID:p/Twqk8/] >>524 <>な
526 名前:nobodyさん [2007/12/03(月) 02:01:35 ID:J4A8iRzG] レンタルサーバーでインストール済みのモジュールを調べました。 そのときの一覧で、頭に5.8.8とかの数字がついているのがあって、 その意味がわかりません。 例えば 5.8.8::XML::XPath というのが一覧に載っていたのですが、そのほかに XML::XPath というのも載っています。 これら二つはどう違うのですか?
527 名前:nobodyさん mailto:sage [2007/12/03(月) 09:47:05 ID:???] そのモジュール一覧を調べるスクリプトの アルゴリズムが腐ってんだろうよ。
528 名前:nobodyさん [2007/12/06(木) 00:17:44 ID:HgYNR+TB] データベース処理に関してDBIを使用していますが、デバッグ用にクエリを表示もしくはログを記録したいのですが、どうすればいいでしょうか。 と言うのも、プレースホルダ使ってからクエリ実行する場合、動的なデータに対して「?」をセットしますよね。 このまま自分で記録しようとしても、「?」のまま記録してしまうし かといってDBI->traceを使うと、余計な情報ばかり出力されます。 皆さんはどのようにデバッグしていますか?
529 名前:nobodyさん [2007/12/06(木) 01:32:40 ID:NHCKs2bj] あるファイルの一行目の文章のみ手直ししたいと思っています。 自分なりに考えた方法では open(FILE,"+>./log.dat"); while(<FILE>){ @LOG=$_; } $LOG[0]=~/(hoge)(hoge)/; shift @LOG; unshift @LOG,"hoge3$2"; print FILE @LOG; 上記では、whileの中で一行目以降の行も配列に格納している点が、初心者の私には無駄に感じてしまいます。 もしこれより簡潔で、サーバーへの負荷も少なくてすむ方法をご存知の方がいらっしゃいましたら、ご教授ください。
530 名前:nobodyさん mailto:sage [2007/12/06(木) 05:14:19 ID:???] >>528 Perlではないけれども、自鯖環境なら、my.cnfに log=/var/log/・・・ てな感じで記録すれば全てのクエリのlogが取れる。 レン鯖環境でも、デバッグ目的なら、自前のPCで同じことをすればよい。 (UnixだろうとWinだろうと、mysqlのversionが同じなら、クエリレベルでは全くの互換) >>529 open(FILE,"<./log.dat"); open(OUT,">./logout.dat); $row = <FILE>; $row = うんたらかんたら・・・ print OUT $row; while(<FILE>){ print OUT $_; } close(FILE); close(OUT); オレならこうするかな。 既存ファイルの”ケツ”に足すのなら、">>file.name"で簡単だけど、頭だけを変更したいとなったら、 ファイルの内容を一旦全て読み込まないといけなかったんではなかったかな。 (変更前と変更後の一行のバイト数が同じになるとは限らないから。) この後でRenameするなどしたらよし。 (自分の場合は、どんな時でも、基本的に変更前のbackupをとって置く性質なんで、確実に不要とわかってから元を消すようにしてる。) もうひとつゆうと、ウチの環境では、 @log = <FILE>; とするよりも、 while(<FILE>){ push(@log,$_) } とか、 $log = join('',<FILE>);とかするほうが、 圧倒的に早い(WinXp + ActivePerl-5.8.8で、1.5倍〜2倍くらい早い。よその環境は知らない。)
531 名前:nobodyさん mailto:sage [2007/12/06(木) 05:29:50 ID:???] >>529 ああ、その前に、そのコードそのままなら、 本当に $log[0] に一行目が入っているかい?
532 名前:nobodyさん mailto:sage [2007/12/06(木) 05:34:31 ID:???] >>528 ああごめん。 mysql限定とは書いてなかったね。 でも多分、ほとんどのDBには、DB側にクエリのlogを保存する機能がついてるはず。 なにも全てPerl側でやる必要はないと思う。
533 名前:nobodyさん mailto:sage [2007/12/06(木) 07:57:56 ID:???] >>529 簡潔って「一点のみ」で、 use Tie::File ; tie my @array, 'Tie::File', 'hoge.txt' or die ; $array[0] =~ s/foo/bar/ ; untie @array ; 以下は横レスFYI: >>530 氏は、「ウチの環境では」ときちんと断わってはいるが、一応他の環境での ベンチマーク結果だ。シビアに考えるなら常に自分の環境で、use Benchmark で テストする事をお勧めする。 (けど、普通の環境ならシビアにテストしなくてもいいんじゃね?) This is perl, v5.8.6 built for darwin-thread-multi-2level @OSX 10.4.11, G4 500MHz メモリ1G 一行50文字の2万行のデータ hoge.txt にて % cat hoge.pl use Benchmark ; sub __handle{ open IN, q{hoge.txt} ; push @arr, <IN> ; close IN ; } sub __array { open IN, q{hoge.txt} ; while( <IN> ){ push @arr, $_ ; } close IN ; } sub __join { open IN, q{hoge.txt} ; $dat = join '', <IN> ; close IN ; } timethese ( 50, { op1 => '__handle', op2 => '__array', op3 => '__join' } ) ; % perl hoge.pl Benchmark: timing 50 iterations of op1, op2, op3... op1: 7 wallclock secs ( 6.31 usr + 0.59 sys = 6.90 CPU) @ 7.25/s (n=50) op2: 8 wallclock secs ( 7.11 usr + 0.59 sys = 7.70 CPU) @ 6.49/s (n=50) op3: 8 wallclock secs ( 6.12 usr + 0.60 sys = 6.72 CPU) @ 7.44/s (n=50)
534 名前:529 [2007/12/06(木) 12:01:39 ID:I3qzGVsw] >530 ご親切にありがとうございます。参考になります。 全部読み込む必要があるのですね。 >本当に $log[0] に一行目が入っているかい? ご指摘の通り、入っておりませんでした。 @LOG=$_; の部分を push @LOG,$_; としましたが、それでも$log[0]に一行目が入っていませんでした。 試しに、 open(FILE,"+>./log.dat"); の部分を open(FILE,"<./log.dat"); としたところ、ようやく$log[0]に一行目が入りました。 いまいち『+>』の意味がつかめません。自分が持っているperlの本を何冊か見ると、 『+>』は入出力共用(上書きモード)とあるのですが、それは『<』と『>』を同時にやったことにはならないのでしょうか。 例えば、 『open(FILE,"+>./log.dat");』 というのは 『open(FILE,"<./log.dat"); open(FILE,">./log.dat"); 』 ってことではないのですよね(動作をみると)。よくわかりません。。。
535 名前:529 [2007/12/06(木) 12:02:24 ID:I3qzGVsw] >533 ありがとうございます。そういう風にテストするんですね。 (自分の勉強不足でした。) かゆいところに手が届いた感じです。感謝してマス。 早速調べて使ってみます。
536 名前:530 mailto:sage [2007/12/06(木) 14:42:15 ID:???] >>533 わざわざ補足いただいて恐縮なんだけど、少しご意見を・・・。 自分は、あまり use Benchmark を信用せずに、 use Time::HiRes でベンチ取るようにしてる。 どうも use Benchmark は、実際の動作時間に即してないような気がするので。 具体的にゆうと、>>530 や>>533 の場合だと、ファイルIOについての待ち時間がカウントされてないように思う。 確かにPerl内部だけで動作が完結するコードについては、しっかりと時間を計測してくれてるようだけど、 例えば外部ファイル読み書きや、他のプロセスをロードしたりするための時間はカウントしてくれないみたい。 詳しくソースとかを追ったわけではないけれど、以下簡単な実証コード use Time::HiRes qw(time); use Benchmark qw(timethese); $n = 100; sub cgi_1 { system( q(perl -MCGI -e "") ); } sub cgi_2 { system( q(perl -MCGI::Lite -e "") ); } timethese($n,{ u_CGI => 'cgi_1', u_CGIL => 'cgi_2'}); $st1 = time(); for(1..$n){ &cgi_1(); } $lt1 = time() - $st1; $st2 = time(); for(1..$n){ &cgi_2(); } $lt2 = time() - $st2; printf "%.3f s\n",$lt1; printf "%.3f s\n",$lt2;
537 名前:530 mailto:sage [2007/12/06(木) 14:42:47 ID:???] Unix系だと、time for i in `seq 1 100 ・・・ とかで、コマンドラインから簡単に実測できるコードなんだけど、それをWinに移植したつもり。 これの結果が、This is perl, v5.8.8 built for MSWin32-x86-multi-thread(Pen4 3.4G mem2G)で、 Benchmark: timing 100 iterations of u_CGI, u_CGIL... u_CGI: 4 wallclock secs ( 0.05 usr + 0.11 sys = 0.16 CPU) @ 641.03/s (n=100) u_CGIL: 2 wallclock secs ( 0.02 usr + 0.06 sys = 0.08 CPU) @ 1282.05/s (n=100) 4.031 s 1.453 s こうなった。wallclockは正しいようだけど、詳細の内容が実態に即してないように思える。 同じコードを、以前Unix(CentOSやFedora)環境でやってみても、同じような結果になる。 (とゆうか、詳細な数値は覚えてないけど、CGIとCGI::Liteが、ほぼ同程度の速度とかレポートされた。) あと、そのLinuxで、>>533 のようなベンチを取ったときも、やっぱり push(@log,$_) が最速だった。 あくまでもウチの環境で、でだけど。 @log=<IN>の倍程度は出てた。ファイルの容量、行数が多いほうが、よりpushが早かった。 (そちらのDarwinは、@log=<IN>形式がかなり早いね。) ついでに、>>533 のコードに、use Time::HiRes 書き足して、自分の環境でやった結果。 (OS等は同上。ファイルは、1行約200バイト、50万行で総計約100MB。時間かかるので、n=2で測定) Benchmark: timing 2 iterations of op1, op2, op3... op1: 72 wallclock secs (70.59 usr + 1.36 sys = 71.95 CPU) @ 0.03/s (n=2) op2: 35 wallclock secs (33.95 usr + 0.66 sys = 34.61 CPU) @ 0.06/s (n=2) op3: 38 wallclock secs (37.22 usr + 0.73 sys = 37.95 CPU) @ 0.05/s (n=2) op1 = 138.750 s op2 = 49.078 s op3 = 54.547 s
538 名前:nobodyさん mailto:sage [2007/12/06(木) 18:28:34 ID:???] 533 は、ただ「(データを含めた)環境によって状況は変る可能性があるよ」って言いたかっただけなんだ、が、、、 気を悪くなさったなら謝罪します。 ================================== 一応、そちらの>>356 の実行結果 Benchmark: timing 100 iterations of u_CGI, u_CGIL... u_CGI: 16 wallclock secs ( 0.01 usr 0.32 sys + 11.46 cusr 3.34 csys = 15.13 CPU) @ 303.03/s (n=100) u_CGIL: 5 wallclock secs ( 0.01 usr 0.30 sys + 3.00 cusr 1.96 csys = 5.27 CPU) @ 322.58/s (n=100) 15.595 s 5.506 s >>357 に関しては、 perl hoge.pl Benchmark: timing 2 iterations of op1, op2, op3... op1: 266.766 wallclock secs (16.62 usr + 29.02 sys = 45.64 CPU) @ 0.04/s (n=2) (warning: too few iterations for a reliable count) op2: 58.1595 wallclock secs ( 9.94 usr + 4.68 sys = 14.62 CPU) @ 0.14/s (n=2) (warning: too few iterations for a reliable count) op3: 899.579 wallclock secs (22.62 usr + 63.34 sys = 85.96 CPU) @ 0.02/s (n=2) (warning: too few iterations for a reliable count) op1 = 499.930 s op2 = 108.665 s op3 = 972.383 s メモリが潤沢でないから join がこんな目に合うのは当然。 因に自己ツッコミだけど、>>533 はサブルーチン内で my @arr なりしないとアンフェアなベンチ、、、、
539 名前:530 mailto:sage [2007/12/06(木) 20:10:20 ID:???] >>538 いえいえこちらこそ申し訳ないです。そうゆうわけではありません。 ただ、use Benchmark にイマイチ信用が置けない者の意見として、 状況によっては、use Benchmark がアテにならないこともあるよ、ってことが言いたかっただけです。 >因に自己ツッコミだけど、>>533 はサブルーチン内で my @arr なりしないとアンフェアなベンチ そこは最初に気付いたから、自分のコードの中では、my して計測してます。 追記 CentOS5 でもやってみた。(コード、ファイルはWin環境と同じ) This is perl, v5.8.8 built for i386-linux-thread-multi (Pen4 2.4G men2G、ソースから'-O3'オプションでコンパイル) Benchmark: timing 2 iterations of op1, op2, op3... op1: 5 wallclock secs ( 3.59 usr + 0.54 sys = 4.13 CPU) @ 0.48/s (n=2) op2: 2 wallclock secs ( 2.44 usr + 0.21 sys = 2.65 CPU) @ 0.75/s (n=2) op3: 4 wallclock secs ( 3.08 usr + 0.59 sys = 3.67 CPU) @ 0.54/s (n=2) op1 = 3.677 s op2 = 2.819 s op3 = 3.510 s はやっ! 以前計測した時はこんな早かったかな〜って思ったけど、何回やっても同じような結果になるんで、あってるんだろう。 どうもWin(ActivePerl)が、Unix系に比べて、メモリ確保あたりが激しく遅いのかなって気がしてくる結果でした。 (Discパフォーマンスは同程度、ってかこの環境に限っては、上のレスのWin環境のほうが早い)
540 名前:nobodyさん mailto:sage [2007/12/07(金) 21:30:21 ID:???] >>534 つ seek
541 名前:nobodyさん [2007/12/10(月) 02:52:34 ID:FqUmo5vT] >>1 を読んで、ここなら私の質問も馬鹿にされずに 答えてくれるかと思いましたが、 どうやらそれすら適わないようです。 もっと低レベルの質問をしたい場合はどこに行けば良いですか?
542 名前:nobodyさん mailto:sage [2007/12/10(月) 02:55:27 ID:???] 樹海
543 名前:nobodyさん [2007/12/10(月) 20:07:09 ID:iaWb7lQX] open(ファイルファンドル,"ファイル名") || &error; ←この&error;もしくはdieとかは なんの意味があるんでしょうか? これあってもなくてもInternal Server Error(500)になるんですけど・・・
544 名前:nobodyさん mailto:sage [2007/12/10(月) 20:21:45 ID:???] >>543 ファイル開くのが失敗した時にorの右の式が実行される。 ファイルが無事開ければ1が返すけど、 失敗すると0が返ってくる。 0 or &error; って実行するとorの右の式が実行されるのが分かる。 my $flag = open〜; print $flag; とかやってみれ どっちにしても500になるのはファイルが存在しないからか、 別の場所でエラーが起きてる。 スクリプトの3行目あたりに use CGI::Carp 'fatalsToBrowser'; を追加してテバックしなさい。 暇だからマジレスしたぜ
545 名前:nobodyさん mailto:sage [2007/12/10(月) 20:33:24 ID:???] >>544 レスdです >500になるのはファイルが存在しないから あーやっぱりファイル無いと500でるんですね・・ 一応ローカルでファイルあるとき(使用中(オープン中))はエラー表示されますた
546 名前:nobodyさん mailto:sage [2007/12/10(月) 23:08:25 ID:???] >>545 ファイルが無くてもorの右の式は実行されるよ。 ローカルでは動くならパーミッションのミスか、cgi用のディレクトリに入ってないとかじゃない? あとは、perlのパス間違ってるとか。 ファイルが無いときにエラー処理したいなら &error if (not -e $file); とかにしれ or &error;ってやるのはロック中だけにするとエラーの原因が絞れるよ。
547 名前:543 mailto:sage [2007/12/11(火) 02:37:10 ID:???] >>546 ローカル環境はXP+apache_1.3.39+ActivePerl-5.8.8.822です use CGI::Carp qw(fatalsToBrowser);もスクリプトに入ってます --------------------------------------------- open(FH,"abc.dat") || &error;←ココ flock(FH,1) || &error; 以下割愛 sub error { print "content-type: text/html\n"; print "\n"; print "ERROR : $!"; exit; } --------------------------------------------- >ファイルが無くてもorの右の式は実行される >ファイルが無いときにエラー処理したいなら >&error if (not -e $file); どうも無理っぽいです ファイル無いと500エラー出ます 500用のエラーページ(←自分で作った)も表示されないので ファイルが無いと500(強制終了?)ぽいです?
548 名前:nobodyさん [2007/12/11(火) 07:09:06 ID:hJLc29jh] >>547 > flock(FH,1) その部分を eval{flock(FH,1)}; にしてごらん windowsではflock使うと致命的エラーになるよ。
549 名前:nobodyさん mailto:sage [2007/12/11(火) 08:21:01 ID:???] >>547 apacheのエラーログになんて出てる?
550 名前:nobodyさん mailto:sage [2007/12/11(火) 10:15:38 ID:???] 嘘つくなよ flockできないのは、非NT系だけ
551 名前:nobodyさん mailto:sage [2007/12/11(火) 17:54:09 ID:???] >>550 ごめんガチでしらんかったorz
552 名前:nobodyさん [2007/12/11(火) 18:01:01 ID:hJLc29jh] >>547 良く見りゃopenの種類書いてないけどそこ大丈夫? >,>>,<,>+
553 名前:nobodyさん mailto:sage [2007/12/11(火) 18:58:11 ID:???] >>552 匿名掲示板だからといって、いい加減なこと言わない方がいいよ。 今まで何度匿名掲示板で犯罪予告して逮捕されたか、知っているの? 偽計業務妨害で逮捕されろ。
554 名前:543 mailto:sage [2007/12/11(火) 21:44:35 ID:???] 遅くなりました >>549 ログはこんなんです。 ["日時"] [error] [client 127.0.0.1] Premature end of script headers: "該当CGIへのパス" >>552 openモードの1は省略可能では?
555 名前:nobodyさん [2007/12/12(水) 00:35:05 ID:amxfThwD] PHP4使ってます 作ったスクリプトをブラウザで実行させると 1分くらい待った後にエラーも出ずに、画面が真っ白に なったんですが、何が原因ですか? コマンドラインで-l付きで実行しても文法エラーは出ませんでした。 ただ、コマンドラインが異常に重くなったので、 PCにかなり負担をかけているようです。 無限ループ系のエラーかな?
556 名前:nobodyさん mailto:sage [2007/12/12(水) 10:04:09 ID:???] >>555 このスレのタイトルを、声を出して読めば何が原因かわかると思います。
557 名前:nobodyさん mailto:sage [2007/12/12(水) 10:45:09 ID:???] >>555 ちなみにperlは「パール」と読みます。 超初心者用は「ちょうしょしんしゃよう」です。 三回ほど声に出して読んでみてはいかがでしょう?
558 名前:nobodyさん mailto:sage [2007/12/12(水) 20:59:26 ID:???] 超初歩的な質問なんだけど、ActivePerl5.8.8を インストールしたんだけどコンパイルとか実行の仕方がわかんないです。 どなたか助けてもらえませんか?
559 名前:nobodyさん mailto:sage [2007/12/12(水) 22:23:24 ID:???] 何がしたくてインストールしたのさ?
560 名前:nobodyさん mailto:sage [2007/12/13(木) 00:30:26 ID:???] >>558 >>556
561 名前:nobodyさん mailto:sage [2007/12/13(木) 02:13:55 ID:???] >>558 Perlはスクリプト言語なので、コンパイルは必要ありません。 コマンドラインからスクリプトを指定して実行するか、 AN HTTPD等からCGIを実行するのに使うのか、 それによってやり方が違います。 とりあえず、わざわざActivePerlを選んだって事はWindowsだと思いますが、 Windowsのバージョン(9x/2000/Xp/Vista)によって設定方法が色々違うので、 下記の情報を書くと多少は情報が得られると思います。 ・OSのバージョン ・利用目的(CGI?ローカルのスクリプト?) とりあえず、藻前は↓コレでも見て出直せYO! pocketstudio.jp/win/activeperl/
562 名前:nobodyさん mailto:sage [2007/12/14(金) 06:41:05 ID:???] >>561 匿名掲示板だからといって、いい加減なこと言わない方がいいよ。 今まで何度匿名掲示板で犯罪予告して逮捕されたか、知っているの? 偽計業務妨害で逮捕されろ。
563 名前:nobodyさん mailto:sage [2007/12/14(金) 15:25:54 ID:???] >>562 m9(^Д^)プギャーーーッ
564 名前:nobodyさん mailto:sage [2007/12/14(金) 21:44:19 ID:???] 聞きづらい雰囲気だ(笑 CGIなんだけど、あるディレクトリの中身を全消去してから、 そのディレクトリ自体を消去するしようとしているんだけど、ディレクトリの消去がうまくいかない。 $dir = "./abc/hoge/"; opendir DIR, $dir; @files = grep { !m/^(\.|\.\.)$/g } readdir DIR; closedir DIR; $flag = @files; if ( $flag ) { foreach $file ( @files ) { unlink "$dir$file"; } } rmdir ("abc/hoge"); rmdirの使い方を間違ってるかと思って、中身入っていないabc/hoge2で試してみると消えてくれた。 どうやらunlink→rmdirの流れが悪いのかと思って、sleepで5秒間止めてみたけど、何も変わらなかった。。。 誰かわかる人いる??検索しても全然わからんかった。。。
565 名前:nobodyさん mailto:sage [2007/12/14(金) 21:47:56 ID:???] >>564 匿名掲示板だからといって、いい加減なこと言わない方がいいよ。 今まで何度匿名掲示板で犯罪予告して逮捕されたか、知っているの? 偽計業務妨害で逮捕されろ。
566 名前:nobodyさん mailto:sage [2007/12/15(土) 01:11:18 ID:???] こんなんじゃダメ? use Cwd; my $dir = "/abc/hoge/"; my $cwd = Cwd::getcwd(); execcommand("/bin/rm -r $cwd/$dir"); exit; sub execcommand { my $cmd = shift; my $err = ''; my @envbak = ($ENV{'IFS'}, $ENV{'CDPATH'}, $ENV{'ENV'}, $ENV{'BASH_ENV'}, $ENV{'PATH'}); delete @ENV{'IFS', 'CDPATH', 'ENV', 'BASH_ENV', 'PATH'}; eval{ system( $cmd ); }; if ($@) {$err = $@;} $ENV{'IFS'} = $envbak[0]; $ENV{'CDPATH'} = $envbak[1]; $ENV{'ENV'} = $envbak[2]; $ENV{'BASH_ENV'} = $envbak[3]; $ENV{'PATH'} = $envbak[4]; return $err; }
567 名前:564 mailto:sage [2007/12/16(日) 19:49:12 ID:???] >566 ありがとうございます。 参考にさせていただきました。
568 名前:nobodyさん mailto:sage [2007/12/17(月) 22:02:42 ID:???] 質問させてください。 mimew.pl というファイルを公開している所が見つからないのですが、 なんとか入手する方法はないでしょうか?
569 名前:nobodyさん mailto:sage [2007/12/17(月) 22:08:17 ID:???] >>568 多分これ。保証はしない。 つ[ ttp://ambiente.okayama-u.ac.jp/~blog/cgi-bin/su_downloader/mimew.pl ]
570 名前:nobodyさん mailto:sage [2007/12/17(月) 23:05:24 ID:???] 保証してください
571 名前:568 mailto:sage [2007/12/17(月) 23:13:17 ID:???] >>569 早急な対応ありがとうございます! 無事メールフォームCGIを動かす事が出来ました!! 本当にありがとうございました!
572 名前:nobodyさん mailto:sage [2007/12/17(月) 23:22:17 ID:???] 宣伝乙
573 名前:nobodyさん mailto:sage [2007/12/18(火) 08:03:18 ID:???] ハッシュ配列の各要素をリファレンスとして関数の引数に渡したいのですが よくわからなくて試行錯誤の末下のような方法にたどり着きました $AA{'name'} = '1234'; $BB[0]{'name'} = 'abc'; $BB[1]{'name'} = 'ああああ'; $BB[2]{'name'} = '!?'; kansuu( \%AA ); $tmp = \@BB; kansuu( ${\$tmp->[0]} ); kansuu( ${\$tmp->[1]} ); kansuu( ${\$tmp->[2]} ); sub kansu { my $h = $_[0]; print "$h->{'name'}<br>"; } BBの要素を kansuu() に入れるために もっとスマートな方法(っていうか正しい書式)がありましたら教えてくれないでしょうか?
574 名前:nobodyさん mailto:sage [2007/12/18(火) 19:13:55 ID:???] Perlがプログラミング言語ということぐらいしか分からない初心者です。 ウインドウズXPを使っています。 ActivePerlでコマンドプロント上でppmを使ってImage::ExifToolをインストールしようとしたのですが >ppm install failed: DBI connect(〜) failed: unable to open database file(1) と出てインストールできませんでした。 DBIをどうにかしたらよいとは思うのですがよく分かりません。 どうしたらよいのでしょうか? ご教授お願いします。
575 名前:nobodyさん mailto:sage [2007/12/18(火) 21:22:12 ID:???] そんくらいぐぐれ
576 名前:574 mailto:sage [2007/12/19(水) 19:22:29 ID:???] 聞き方が悪かったですね。 具体的な問題点は ・ppmはActivePerlをインストールしただけでは使えない? ・DBIとか落としてきてもどうやってインストールしたらいいのか分からない。 ・そもそもPerlの作業をどこで行ったらいいか分からない。 (コマンドプロントでuseをしてもなんにも起こらない←間違っている?) ・つまるところプログラミングのイロハが分からない。 スレ違いというやつですか?
577 名前:574 mailto:sage [2007/12/19(水) 19:37:06 ID:???] で、何がやりたいかと言いますと、これです↓ ttp://www.fenrir.co.jp/blog/2007/12/useraction_extension_3_1.html つまずいたのは2のところです。
578 名前:nobodyさん mailto:sage [2007/12/19(水) 21:36:49 ID:???] >>576 スレ違い
579 名前:nobodyさん mailto:sage [2007/12/19(水) 23:17:02 ID:???] ・ppmはActivePerlをインストールしただけでは使えない? 使える ・DBIとか落としてきてもどうやってインストールしたらいいのか分からない。 ppmを使う ・そもそもPerlの作業をどこで行ったらいいか分からない。 (コマンドプロントでuseをしてもなんにも起こらない←間違っている?) まずテキストエディタで書いて保存する ・つまるところプログラミングのイロハが分からない。 あっそ
580 名前:nobodyさん mailto:sage [2007/12/21(金) 01:37:26 ID:???] >>574 WebProgramingに無関係。板違い。誘導。 Perlについての質問箱 33箱目 pc11.2ch.net/test/read.cgi/tech/1192463997/l50
581 名前:574 mailto:sage [2007/12/21(金) 21:47:22 ID:???] >>580 ありがとうございます。 そちらにもスレがあったんですね。 ご迷惑をお掛けしました。
582 名前:nobodyさん [2007/12/22(土) 00:59:24 ID:+1+1pRnk] こんちは 8 9 10 ってファイル読み込んで 8 9 って出力するにはどう書けばよいですかね
583 名前:nobodyさん mailto:sage [2007/12/22(土) 01:26:23 ID:???] ふむ
584 名前:nobodyさん [2007/12/22(土) 02:11:54 ID:At3tOlJk] わかります?
585 名前:nobodyさん mailto:sage [2007/12/22(土) 03:40:10 ID:???] 10が必要ないのか二桁の物が必要無いのか 読み込んだファイルの三ツ目の物が必要無いのか 読み込んだファイルの最後の物が必要無いのか 条件が分からなければ判別のしようが無い
586 名前:nobodyさん [2007/12/22(土) 04:19:02 ID:At3tOlJk] 読み込んだファイルの最後の物が必要無い です ほんとありがとうございます(泣)
587 名前:nobodyさん mailto:sage [2007/12/22(土) 21:44:20 ID:???] 8 9 10ってのはファイルの内容か?ファイルの名前か?・・・まあ内容だろうな。 8 9 10ってのは毎回8 9 10なのか?・・・毎回同じってわけじゃないだろうな。 区切りはスペースだけ?タブも?ファイルの中に改行はあるの?
588 名前:nobodyさん mailto:sage [2007/12/22(土) 22:22:37 ID:???] 質問だけ見てもきみにゃPGは向いてないことが分かるからやめとけ
589 名前:nobodyさん [2007/12/23(日) 04:25:06 ID:nSEv05U9] ごめんやめない がんばる 8 9 10ってのはファイルの内容で 8 9 10ってのは毎回同じってわけじゃないです。 区切りはスペースだけ
590 名前:nobodyさん mailto:sage [2007/12/23(日) 05:02:25 ID:???] 自分で作る気があるなら、どこまで作ったか晒せ。 自分で作る気がないなら、仕様をまとめなおして、↓こっちで聞け。 Perlでリクに答えるスクリプトを作るスレ pc11.2ch.net/test/read.cgi/tech/1086143976/l50
591 名前:nobodyさん mailto:sage [2007/12/23(日) 08:20:22 ID:???] 返答の意図が分かってないだろ。 まず基礎を学べ。 んですぐ人に答えを求めようとせず頭使って考えれ。
592 名前:nobodyさん [2007/12/23(日) 10:02:40 ID:01+8BPxk] 半年ぶりに書こうと思ったら驚くほどPerlに関する記憶が飛んでる 記憶をよみがえらせる方法を教えてくれ
593 名前:nobodyさん mailto:sage [2007/12/23(日) 10:05:44 ID:???] とりあえずスクリプト眺めたり、ちょっと書いたりしてるうちによみがえるんじゃね? それができないなら、アルツハイマ−かもしれないから病院に逝ったほうがいいな
594 名前:nobodyさん [2007/12/24(月) 01:41:03 ID:yCHoznYX] 漏れも吹き飛んだ 1からじゃ何も書けなくなったw
595 名前:nobodyさん mailto:sage [2007/12/24(月) 07:17:33 ID:???] PerlとPHPで開発してると、やっぱりPerlの方が書きやすいな。 PHPなのに、気がついたら途中からPerlになってたよw
596 名前:nobodyさん mailto:age [2007/12/24(月) 12:07:01 ID:???] 質問です。 ファイルをオープンし、それを一旦最後まで読み込んだ後、 またそのファイルを最初から読み取りを行いたい場合は、 一度ファイルを閉じるしか方法がないのでしょうか。 ファイルで閉じたり開いたりを多く行うと、処理が重くなったり、 ファイルの競合で問題が起きるので、出来れば避けたいのですが。 <コーディングの例> # ファイルを開く open ( FL, "dat.csv" ); # ファイルを最後まで読む。 while( $line = <FL> ){ # 何らかの処理 } close( FL ); open ( FL, "dat.csv" ); # ファイルを最後まで読む。 while( $line = <FL> ){ # 何らかの処理 } close( FL );
597 名前:nobodyさん mailto:sage [2007/12/24(月) 12:52:16 ID:???] ファイルの競合で問題ってのが意味わからんが やりたいことはseekでできる
598 名前:596 mailto:sage [2007/12/24(月) 13:19:13 ID:???] >>597 seekで検索してみたところ、すぐに見つかりました。 ありがとうございました。 ファイルの競合で問題というのは、ファイルのロックで 解決することなので、ここでは関係ありませんでした。
599 名前:nobodyさん mailto:sage [2007/12/24(月) 16:29:55 ID:???] Perl5からオブジェクト指向が導入されたということですが、 Perlのプログラマーは、オブジェクト指向プログラミングを メインで行っているのでしょうか。 それとも、処理速度や安定性、多くの環境下で動く、Perl4互換の 構造化プログラミングをしているのでしょうか。 多くの方はどちらでやっているのかを知りたいです。
600 名前:nobodyさん mailto:sage [2007/12/24(月) 16:54:59 ID:???] >それとも、処理速度や安定性、多くの環境下で動く、Perl4互換の >構造化プログラミングをしているのでしょうか。 の部分が突っ込みどころ満載だが、それは使っていくうちに知ってもらうことにして、 とりあえず、Perl5が出てから10年以上たっているので、Perl4の互換性を気にする必要は全くない。 オブジェクト指向も、使いたくないなら使わなくていい。
601 名前:nobodyさん mailto:sage [2007/12/24(月) 17:02:48 ID:???] >>600 ありがとうございました。
602 名前:nobodyさん mailto:sage [2007/12/24(月) 17:22:38 ID:???] >>599 「多くの方」はダウソしたcgiをうpしてパーミッション設定するだけだろ。 中途半端な知識でオブジェクト指向を目指すと余計に意味わかんないプログラムになる。 オブジェクト指向の考え方とPerlでのオブジェクト指向の実装方法を十分理解してないなら オブジェクト指向に手を出さない方が良い。
603 名前:nobodyさん mailto:age [2007/12/25(火) 10:20:04 ID:???] >>602 レスありがとうございます。 ちょっと確認をしたくて質問なのですが、 PerlでCGIを行う場合に限定すると、サーバのメインメモリにいつまでも 情報が残るわけではないので、オブジェクト指向プログラミングは、 状態の保存などを生かしたものというより、モジュール化を行い、 関数名やグローバル変数名が競合するのを防ぐ程度の意味合いしかないように 思うのですが、この解釈はあっているのでしょうか。
604 名前:nobodyさん mailto:sage [2007/12/25(火) 11:34:27 ID:???] それはオブジェクト指向プログラミングの利点の1つではあるが全てではない。 かといって全部ここに書いてるとキリが無いからググってこい。 っていうか結局何が知りたいんだ? どんな答えが欲しいんだ?
605 名前:nobodyさん mailto:sage [2007/12/26(水) 06:07:36 ID:???] サーバのメモリにいつまでもプロセスとして残る場合もあるよ。
606 名前:nobodyさん [2007/12/26(水) 12:46:37 ID:SU+LBgfr] perlで最規模なCGIゲーム(有名な箱庭やFFA以上)を作ろうと猛勉強してるのですが まったくの初心者なのでサーバーに対する負荷とかまったく考えていませんでした。 そこで疑問点が3つあります。 ・MySQLが軽いとかよく聞くのですが、 本気でCGIゲームを開発する場合サーバーの負担を抑えるためどういう勉強をしていったほうがいいのでしょうか? ・perlではなくphpのほうに切り替えたほうがいいのでしょうか? ・プログラムを書き終えてperl or phpを実践した後でもMySQLに対応するのは簡単なんでしょうか? (難しそうなのでperl or php→MySQLではなくプログラムを書き終えた後にMySQLをやったほうが モチベーションも保てるかと思って。) phpの話題もでてますが、今はperlのほうを勉強していてこちらのほうが聞きやすいと思って。 よければご教授よろしくお願いいたします。
607 名前:nobodyさん [2007/12/26(水) 12:52:25 ID:SU+LBgfr] ×最規模→○大規模
608 名前:nobodyさん [2007/12/26(水) 14:37:40 ID:9oL1uy7O] レンタル掲示板などで、 www. ○○.com/?uid=▲▲▲ 見たいなURLがあるのですが これを http://▲▲▲.○○.com/ にしたいと思っています。 これを実現するにはどのような手段が用いられるのでしょうか? ご指導や参考URLを頂ければ幸いです。 よろしくお願いします。