[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/08 16:18 / Filesize : 307 KB / Number-of Response : 980
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

くだすれPerl(超初心者用)



1 名前:nobodyさん mailto:sage [2006/09/10(日) 13:33:48 ID:???]
このスレッドは、他のスレッドでは書き込めない超低レベル、  
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。  
Perl使いが優しくコメントを返しますが、  
お礼はPerlの布教と初心者の救済をお願いします。  


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を頂ければ幸いです。
よろしくお願いします。

609 名前:nobodyさん [2007/12/26(水) 18:35:59 ID:8VJWqxjl]
>>606
すいません
prog板初心者スレで聞いてみます、スレ違いだったかな

610 名前:nobodyさん mailto:sage [2007/12/26(水) 22:20:24 ID:???]
>>608
perlよりもウェブ鯖で変換した方がいい
apacheならmod_rewriteとかを使う

611 名前:nobodyさん mailto:sage [2007/12/27(木) 14:37:45 ID:???]
>>604
ありがとうございます。

聞きたかったのは、Apache + Perl でプログラムする際、
オブジェクト指向で組むと、利便性があがるかどうか、
という点です。
ネット上のサンプルソースでも、オブジェクト指向
で組まれていなかったので、何らかの理由があり、
さほど利便性がないのかと思ったのです。

できましたら、この、「何らかの理由」もあわせて
回答をいただけたらと思っています。
オブジェクト指向一般の利便性については、自分で調べますが。

612 名前:nobodyさん mailto:sage [2007/12/27(木) 14:43:25 ID:???]
>>605
それは、サーバのエラーや、Perlなどのプログラムミスによる
ものということですよね?

そのメモリに残ったプロセスを利用してということは
ないと解釈していたのですが。

613 名前:nobodyさん mailto:sage [2007/12/27(木) 15:08:55 ID:???]
>>612
mod_perl + DBI なんかでは、コネクションプーリング出来たりとか
そんなんじゃないのかね?

614 名前:nobodyさん mailto:sage [2007/12/27(木) 17:41:06 ID:???]
perlにて、「use strict」を書くとエラー(500)となってしまいます。
これをコメントアウトすると、正常に動いていますので、
パーミッションなどの設定が原因ではないと思います。
疑われる部分はどんなことがあるのでしょうか。



615 名前:nobodyさん mailto:sage [2007/12/27(木) 17:46:33 ID:???]
すみません。質問です。
package関連の記述方法についてです。
定義したクラスのメソッドにおいて、そのクラスがもつ別のメソッドを
呼び出すということは出来ないのでしょうか。

package ClassA;

sub funcA{
 print "test";
}

sub funcB{
 &funcA;
}

などと記述してみたのですが、エラーがでてしまいます。
&ClassA::funcA; としてもダメでした。

616 名前:nobodyさん mailto:sage [2007/12/27(木) 17:57:54 ID:???]
全角スペースでインデント(字下げ)したらエラーになるよ

617 名前:nobodyさん mailto:sage [2007/12/27(木) 19:24:37 ID:???]
>>614
error_logにみんな書いてある。

618 名前:nobodyさん mailto:sage [2007/12/27(木) 19:37:01 ID:???]
>>616
全角スペースでインデント(字下げ)してるのは、2chで
見やすくするためです。先頭に半角だと無視されますからね。

619 名前:nobodyさん [2007/12/27(木) 21:40:34 ID:HdAuax/Z]
>>593
うむ。書くしかないよな

620 名前:nobodyさん mailto:sage [2007/12/27(木) 23:08:07 ID:???]
>>615
最後に 1; を書いてみ

621 名前:nobodyさん mailto:sage [2007/12/28(金) 00:51:11 ID:???]
>>620
レスありがとうございます。
最後に「1;」は書いてます。
メソッド呼び出し部分をコメントアウトすると
動作はするので、メソッド呼び出し部分がおかしいのでは、
と思うのです。
メソッド呼び出しを記述すると、動きはするのですが、
そこで停止してしまうのです。
念のための確認ですが、同じクラス内のメソッド呼び出しの
記述方法はこれであっているとみてよいのでしょうか。
それとも、「ClassA::funcA」などと記述すべきなのでしょうか。

622 名前:nobodyさん mailto:sage [2007/12/28(金) 02:36:45 ID:???]
>>621
ウチの環境で、上のコードそのままやってみたけど、
&funcB();
で、ちゃんと'test'と出力されたべ。

呼び出し側のスクリプトの問題じゃないのかな?
以下呼び出し側。

use ClassA;

ClassA::funcA();
ClassA::funcB();

---出力----
test
test

環境 WinXp SP2 ActivePerl 5.8.8-build822
This is perl, v5.8.8 built for MSWin32-x86-multi-thread

623 名前:nobodyさん mailto:sage [2007/12/28(金) 02:51:08 ID:???]
>>611
ていうかオブジェクト志向のメリット、デメリットを勉強すれば
ネット上のサンプルソースの例が少ない理由はすぐわかる。

624 名前:nobodyさん mailto:age [2007/12/28(金) 13:27:40 ID:???]
質問です。
継承に関して、ネットを調べていると、コードの書き方が
2通りあるようですが、これはどういう解釈をしたらよいのでしょうか。

ClassAが継承もととなる場合
use base qw( ClassA );
@ISA = qw ( ClassA );

use base qw()を使う方法
www15.plala.or.jp/h-kihara-home/prog/perl/ooperl.html
www.rwds.net/kuroita/program/Perl_oo.html#base

@ISAを使う方法
www.rfs.jp/sb/perl/04/03.html
bulknews.net/lib/mailmag/22/mag.txt

一方の書き方が古いという類なのでしょうか。
それとも、継承においては特に出てこない、何か違う意味が
含まれているのでしょうか。

お願い致します。



625 名前:nobodyさん mailto:sage [2007/12/28(金) 14:37:39 ID:???]
今までVisual Basic や java をやってきていた者です。
Perlの場合以下のようにドキュメントとしてコーディング規約は
まとめられてないのでしょうか。
www.objectclub.jp/news/community/codingstandard/

626 名前:nobodyさん mailto:sage [2007/12/28(金) 18:56:10 ID:???]
>>624
perldoc base
>>625
ない

627 名前:nobodyさん mailto:sage [2007/12/29(土) 00:20:43 ID:???]
>>622
もう一度0からコードを書き直してやってみたら
動きました。
何が悪かったのだろう・・・
全角スペースが入ったりしていると、赤く表示が出る
エディタを使っているのですけどね。
原因が分かりませんが、質問の内容は解決しました。
ご迷惑をおかけしました。

628 名前:nobodyさん mailto:sage [2007/12/29(土) 09:32:18 ID:???]
>>623
Perlのオブジェクト指向を調べてみたのですが、なんだか
完全にオブジェクト指向に対応した言語ではなく、
package や ハッシュ を用いて工夫してオブジェクト指向を
実現してるみたいなものですね。
メンバやメソッドにも外部からのアクセス制限をかけたり
出来なさそうだし。

PerlをCGIでやる場合は、まず、GETやPOSTを取得して
どの関数に飛ぶのかを判定し、その関数を書いていくという
処理しかないので、構造化とさほどかわらないのかもと思いました。

ありがとうございました。

629 名前:625 mailto:sage [2007/12/29(土) 11:06:25 ID:???]
>>626
どうしてないのでしょうか。
Perlは歴史が長い分、何かノウハウを集めたものがあるかと思ったのですが。

630 名前:nobodyさん mailto:sage [2007/12/29(土) 11:19:00 ID:???]
>>629
オマエが作れよ
俺は無視するが

631 名前:nobodyさん mailto:age [2007/12/29(土) 14:02:28 ID:???]
ハッシュを宣言し、それを関数に渡す処理をしたいのですが、
Perlのサイトにはそのサンプルが載っていなかったので、
自分なりにコードを書いてみました。
ttp://www.rfs.jp/sb/perl/02/05.html
ttp://www.site-cooler.com/kwl/perl/4.htm

関数に渡すときのコードの書き方や、受けるときのコードの書き方において、
これが偶然動いているだけなのか、不安になって質問してみました。
書き方は基本的にこれで良いのでしょうか。
やりたいことは、「ハッシュと数値を受け取り、処理を行う関数を
定義すること」です。

sub tt(){
my %t = @_;
print $t{"水"};
print "\n";
print $_[1];
}

%c;
$c{"月"} = 1;
$c{"火"} = 2;
$c{"水"} = 3;

&tt(%c,1);

632 名前:nobodyさん [2007/12/29(土) 15:00:37 ID:CoF2fqIA]
sub tt {
my ($t,$n) = @_;
print $t->{"水"};
print "\n";
print $n;
}

%c;
$c{"月"} = 1;
$c{"火"} = 2;
$c{"水"} = 3;

&tt(\%c,1);

633 名前:631 mailto:age [2007/12/29(土) 15:52:15 ID:???]
>>632
すばやいレスありがとうございます。
いろいろ試してみて気づいたのですが、$_[1]としても、
2番目に指定した引数が取れるわけではないのですね。
今回は偶然$c{"月"}の1が表示されていただけなのには
気づきませんでした。
あと、ハッシュを関数に渡す場合は参照渡しの方が良いのですね。
非常に助かりました。

634 名前:nobodyさん mailto:sage [2007/12/29(土) 17:19:50 ID:???]
>>626さんくす



635 名前:nobodyさん mailto:sage [2007/12/29(土) 20:00:55 ID:???]
>>629
Perlベストプラクティス



636 名前:nobodyさん mailto:sage [2007/12/29(土) 20:26:23 ID:???]
>>629
理由は大まかに言って、
・ コーディングの自由度の高さこそがPerlの特徴
  → コーディング規約で縛ったらPerlらしくない
・ Perlのコーディングスタイルとしてキーストロークをいかに減らすかを重視するスタイルが存在する
  → キーストロークを減らす派にとってコーディング規約なんて邪魔以外のなにものでもない
・ スクリプト言語なので元の用途は自前のツールをお手軽に作る事だった
  → 自分専用の道具を作るのにJIS規格とかを気にするヤツはいないのと同じでコーディング規約なんてキニシナイ
・ スクリプト言語はコンパイラ言語と違って大規模開発に向いてないと信じられていた
  → 小規模ならコーディング規約なんていらない。
って感じだな。

プロセッサも高性能化し、スクリプト言語でも十分に大規模開発が可能になったが、
・ 未だにキーストロークを減らす派の存在が大きい
・ CPANなど充実したライブラリの存在で実際にコーディングする量はそれほど増えてない
って理由から、わざわざコーディング規約を決めようとする動きも存在しないわけ。

使いたいものが、この世に存在しないなら自分で作ればいい。
もし、藻前さんがPerlのコーディング規約が欲しくて作るというなら、
目を通して意見を言うぐらいの手伝いはこのスレの人もやってくれると思う。

まあ、使う人がそんなにいるとは思えないが。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<307KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef