【Perl】初心者コーナーPart9

このエントリーをはてなブックマークに追加
1名無しさん@お腹いっぱい。
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

1:自分はこう言う事がしたい。
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を見よう。
2名無しさん@お腹いっぱい。:01/12/28 23:32 ID:SPLRvqQi
3名無しさん@お腹いっぱい。:01/12/28 23:34 ID:SPLRvqQi
[総合]
 ・Perl Com: http://www.perl.com/pub/
 ・CPAN.com: http://search.cpan.org/
 ・ActivePerl: http://www.activestate.com/
 ・CGI-ML:http://forest.ne.jp/cgi-ml/
[お薦め]
 ・Perl Recipes: http://www.effectiveperl.com/recipes/
 ・Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
 ・Randal's WebTechniques columns: http://www.stonehenge.com/merlyn/WebTechniques/
 ・Perlの部屋: http://www.cc.rim.or.jp/~midorin/mad-p/perl/index.html
 ・Perl初心者の部屋:http://www.harukaze.net/~mishima/perl/
 ・Perlリファレンス:http://www.big.or.jp/~mio/ga/pl/plref/pl_ref.htm
 ・Perlのページ:http://homepage1.nifty.com/nomenclator/perl/
[Document&Tutorial]
 ・Perl News: http://www.news.perl.org/
 ・Perl Monks: http://www.perlmonks.org/
 ・PerlMonth - Online Perl Magazine - : http://www.perlmonth.com/index.html
 ・use Perl All The Perl: http://use.perl.org/
 ・Learn Perl - Perl Education: http://www.devdaily.com/perl/edu/index.shtml
 ・Perldoc.com: http://www.perldoc.com/
 ・Using Perl5 in Web: http://docs.rinet.ru/Using_Perl5_in_Web/
 ・Rex Swain's Home Page: http://www.rexswain.com/
 ・Robert's Perl Tutorial: http://www.netcat.co.uk/rob/perl/win32perltut.html
 ・Perl Tuts: http://savage.net.au/Perl-tutorials.html
 ・Beginning Perl Tutorials: http://www.pageresource.com/cgirec/index2.htm
 ・jcode.pl の私的な解説書: http://www.mikeneko.ne.jp/~lab/kcode/jcode.html
 ・Perl for Newbie: http://www.harukaze.net/~mishima/perl/index.html
 ・Logical Choice Software, Home Page: http://www.logsoft.com/perltips/
 ・Perlfect Solutions: http://perlfect.com/
 ・The Perl Archive : http://www.perlarchive.com/
4名無しさん@お腹いっぱい。:01/12/28 23:37 ID:SPLRvqQi
[Module]
 ・Perl Module Reference: http://www.bekknet.ad.jp/~bero/docj/module/
 ・PPMPackages: http://www.activestate.com/PPMPackages/
 ・河馬屋二千年堂's Page: http://member.nifty.ne.jp/hippo2000/index.htm
[Security]
 ・安全なプログラミングのためのガイドライン:http://www.FreeBSD.org/ja/security/#spg
 ・Perl security:http://www.perldoc.com/perl5.6/pod/perlsec.html
 ・CGI and Security http://www.japu.org/cgi/security/
 ・Perl security和訳:http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlsec.html
 ・The Unofficial Web Hack FAQ:http://www.nmrc.org/faqs/www/
 ・How to Write Secure Code:http://www.shmoo.com/securecode/
 ・Safe CGI Programming :http://www.improving.org/paulp/cgi-security/safe-cgi.txt
[OS]
 ・Linux日本語マニュアル:http://www.linux.or.jp/JM/
 ・FreeBSD日本語マニュアル:http://www.jp.freebsd.org/man-jp/
5_gunzip:01/12/28 23:46 ID:SPLRvqQi
ごめん。ついでにこれも。

Perl6 & Parrot VM についての情報
http://dev.perl.org/perl6/

--------------------
Parrot Hello world!
--------------------
# hello.pasm
print "Parrot Hello world!\n"
end
6名無しさん@お腹いっぱい。:01/12/29 00:20 ID:5xfLHV23
PERLでSharedMemory使ったりセマフォ切りたい
時のお勧めサイトって有る?
7名無しさん@お腹いっぱい。:01/12/29 01:08 ID:???
>>5
TryAndCatch萌え ヽ(´ー`)ノ

FILE *handle1 = NULL, *handle2 = NULL, *handle3 = NULL;
try {
handle1 = fopen ( ... );
handle2 = fopen ( ... );
handle3 = fopen ( ... );
...
}
catch ( ... ) {
if ( handle1 ) close ( handle1 );
if ( handle2 ) close ( handle2 );
if ( handle3 ) close ( handle3 );
throw;
}
8名無しさん@お腹いっぱい。:01/12/29 14:21 ID:gaX+fcP8
try-catchはいいやね。
文字列検索よりは早そうだし。
9名無しさん@お腹いっぱい。:01/12/29 22:51 ID:???
age
10名無しさん@お腹いっぱい。:01/12/30 08:01 ID:tHdvBy1w
>1
スレ立てお疲れ様です。
さっそく質問させていただきます。

Win98にActivePerlをインストールしましたが、
DOSプロンプトから起動できません。
「コマンドまたはファイル名が違います」と言われてしまいます。

sample.plをダブルクリックすると、一瞬だけですが起動するので
Perl自体のインストールは出来ていると思いますが……。

何がおかしいのか、考えられることを教えてください。
11名無しさん@お腹いっぱい。:01/12/30 11:13 ID:???
>>10
DOSプロンプトから perl -v でVersion情報が出力されますか?
問題無く出力されるようなら、
 perl C:\somewhere\sample.pl
で実行できるはずですが。(C:\somewhere\は適当に読み替えて下さい)
12デフォルトの名無しさん:01/12/30 11:16 ID:???
スクリプトの多分岐にわたる
セッションのテストってどんな風にしてます?
モンキーレンチとか使えるのかなぁ・・・・・
13名無しさん@お腹いっぱい。:01/12/30 12:59 ID:???
>>10
PATHが通ってないだけじゃないの?
14名無しさん@お腹いっぱい。 :01/12/30 13:56 ID:???
ちょっと読んだ
能動的な型付けとか、最適化に関わる所が結構突っ込まれてるのかな
Class eq Package じゃ無くなるってのも中々よさげ
今よりずっとOOusefulになると良いな

でもオペレータ変更しすぎなんだよ先生よぅ・・・・
%hash{foo} ← これが参照外したスカラーなんて・・・ (死
15名無しさん@お腹いっぱい。:01/12/30 13:59 ID:???
あ、>>5 @ _gunzipさんね
>>10
同じくPATHに一票
SETENVだかPATHだかでSET出来たかな(適当)
キーワード書くから調べて栗 w
「PATH」「環境変数」「DOS」「追加」「SET」
16名無しさん:01/12/30 14:54 ID:???
>14
間違えてんぞ〜
$hash->{foo} が $hash{foo} or $hash.{foo} だろ、んで
$hash{foo} が %hash{foo} だよん
つーか嫌すぎこれ
17名無しさん@お腹いっぱい。:01/12/30 14:57 ID:vG4UP0Ys
%tmp = ("aa0"=>"00","aa1"=>"11","aa2"=>"22");
foreach(0..2){$tmp[$_] = $tmp{aa$_};}
みたいな事をやりたいのですが、
foreach(0..2){$tmp = "aa$_"; $tmp[$_] = $tmp{$tmp};}
しかわかりません。
もっとスマートな方法があれば教えて下さい m(_ _)m
18名無しさん:01/12/30 15:05 ID:6JQJx1N9
WEB上でアイコンがUP出来る掲示板とかありますか?
19名無しさん:01/12/30 15:18 ID:???
>17
ん?
foreach(0..2){$tmp[$_] = $tmp{aa$_};}
  ↓
foreach(0..2){$tmp[$_] = $tmp{aa.$_};}
2017:01/12/30 15:42 ID:vG4UP0Ys
>19
あっ、そうですね。恥。。
即レスどうもありがとうございます。
2110:01/12/30 17:17 ID:???
>11、>13、>15
どうもお答えありがとうございます。
カレント\binでは、perl -vもちゃんと動いていましたが、
他の場所からでは起動できませんでした。
だからアドバイスどおり、PATHが通っているかをまず疑いました。

autoexec.batには、SETで始まる\binまでの行がちゃんとありました。
しかし実際にはうまくいっていないため、
試みにこの行を上の方にもってきて、再起動をすると、なぜかうまくいきました。

というわけで(一応無事に)解決したようです。
どうも助かりました。ありがとうございました。
22名無しさん@お腹いっぱい。:01/12/30 23:56 ID:uoyv0Wnn
open DAT,">>$file";
上の様に追記でファイルをオープンした場合
ファイル内容が空になる瞬間というのはあるのですか?
23名無しさん@お腹いっぱい。:01/12/31 00:40 ID:???
>>22
ある。

* 他のプロセスが空にする。
* 自分で空にする。
24ダメ男:01/12/31 03:34 ID:zWJaANkc
その他では、新規ファイル作成時も
2522:01/12/31 03:42 ID:lAX6iAu+
今2個のプロセスで追記しまくった所
平気だったです。
2622:01/12/31 04:42 ID:lAX6iAu+
もう一個質問よろしいですか?
$tmp = "o(";
@data=grep(!/$tmp/,@data);
↑これを実行するとエラーとなるんですが、
何故でしょうか?
27ダメ男:01/12/31 05:07 ID:SHzKQGPS
$tmp= "o(";
  ↓
$tmp = "o\\(";
28名無しさん@お腹いっぱい。:01/12/31 12:50 ID:???
"("はRegexpのメタ文字なんだよ。
2922:01/12/31 15:02 ID:???
$tmpの部分は入力フォームから入力してもらい、
さらにgrepした後入力を表示させたいのですが、
こういう場合$tmpに格納されている文字はただの文字として
検索するという方法は無いのでしょうか?
またo(以外にも「ソ」もエラーになるのは文字コードが
メタ文字とかぶっているからですか?
3022:01/12/31 15:27 ID:???
とりあえず
@data=grep{($tmp1,$tmp2)=split /\t/,$_;$tmp1 ne $tmp}@data;
で緊急避難しました。
29の方法あったら教えて下さい。
31デフォルトの名無しさん:01/12/31 15:51 ID:???
>22
無い。但し存在しないファイルならサイズはO
>30
キーワード出たら検索な
http://www.google.com/search?hl=ja&q=PERL+%83%81%83%5E%95%B6%8E%9A+%83G%83%89%81%5B&lr=lang_ja
32名無しさん@お腹いっぱい。:01/12/31 15:59 ID:???
>>30=22
CGIかなにかだと思うけど、内部の処理でS-JISを使用するのはお勧めしない。
入出力と内部の処理は分けて、内部ではEUCなんかを使うのが吉。

あと参考までに、quotemeta() や \Q も調べておくとよいでしょう。
 perldoc -f quotemeta
 perldoc perlre
3322:01/12/31 21:02 ID:???
>>31
どうもすいませんです;;
と検索どうもです。
>>32
なるほどです。
quotemeta() 調べてみます。

ご親切にどうもありがとうございました。
34おねがいします!:02/01/01 02:00 ID:RjS1sLKo
超初心者なんですが、、、。
逆スラッシュが打てません。
\になっちゃうんです。
どうしたらよいのでしょうか?
35名無しさん@お腹いっぱい。 :02/01/01 02:43 ID:???
http://www.kt.rim.or.jp/~ksk/yen2bs/indexj.html
これをインストールしよう!
36名梨さん ◆FkWCoMC. :02/01/01 02:44 ID:???
>>34-35
34のOSのバージョンわかんないじゃん。。
ちゃんとそれくらい言おうよ>>34
37名無しさん@お腹いっぱい。:02/01/01 02:55 ID:???
>>34
おれにはちゃんと逆スラッシュに見えてるが?
3834:02/01/01 02:57 ID:dE6tT7ED
>36
すみません。
Mac OS 9.04
MacJPerl 5.2.Or4 J1
です。
よろしく!
39名無しさん@お腹いっぱい。:02/01/01 03:01 ID:???
みなさん、おめでとうございます!
perlfuncだとdbm〜〜の変わりにtie,untieを使えと書かれてますが
レンタルサーバでモジュールの依存関係(標準も入ってないdeath)何かが面倒な時
はdbm〜を使っても良いですか?
1000件程度なんでそれ程速度も気になりません

>>34
\のままで良いよ (^-^
全角はダメだよ
40 :02/01/01 06:07 ID:RYgD0SJz
@char=('0'..'9','a'..'z','A'..'Z');

という62文字を使って 1 (あるいは 0)から ZZZZZZZZ までの
62進数を順番に生成したいのですが、上手にやる方法はありますか?
41デフォルトの名無しさん:02/01/01 16:51 ID:???
>40
ハードコーディングで良いなら
push (@value,0) for (1..8);
これを初期値(つまり$value[0]が1桁目、$value[1]が2桁目)にして
値を1増やす関数と、@valueを分解しながら$char[$value[$_]]とかして
表示する関数を書いてみ。
それが出来たら桁とか@charを可変に出来る様にしてみよう。
42名無しさん@お腹いっぱい。:02/01/01 22:46 ID:mPGnAlls
Benchmarkモジュールについて教えて下さい。

Benchmark: timing 10000 iterations of for,foreach...
for: 27 secs (27.18usr 0.00 sys = 27.18 cpu)
foeach: 11 secs (10.54usr 0.00 sys = 10.54 cpu)

この出力結果はどういう意味なんでしょうか。forとforeachというアイテム?を比べて、
forが27秒かかってforeachは11秒、これはforeachの方がお得だね、というのは判るんですが、
usrとsysの意味が判らないです。この二つからcpuの使用率を出してるようなんですけど…
43名無しさん@お腹いっぱい。:02/01/02 02:17 ID:???
usrが動かしてるべんちに掛かった時間じゃネーノ
んでsysが他のプロセスが使った時間じゃネーノ
んでcpuがトータルのCPU時間って事じゃネーノ
適当に想像だけどね
つーかその結果の方が気になるわっ (w
4442:02/01/03 02:53 ID:jaPZDeyi
なるほど、何やってもsysが0のままなのが不思議でした。
ありがとうございました。
45 :02/01/03 23:06 ID:sFx8M0Lj
>>39
dbmかndbm入っているんだったら、dbmopen使ったって別にいいんじゃないかと思うけど。
将来のバージョンでの対応が保証がされないだけで(笑)
動けばいいやっていうんだったら、全然かまわないかと。
46名無しさん@お腹いっぱい。:02/01/04 00:04 ID:VeQd/ckC
>>1 参照不能と言いつつ参照できるぞ
47名無しさん@お腹いっぱい。:02/01/04 00:16 ID:???
皆が2ch用ブラウザを利用しているわけではない。
48名無しさん@お腹いっぱい。:02/01/04 12:28 ID:SUGVa40q
3Gくらいのテキストファイル処理をしたくすったもんだやっています。
GDBMを使ってDB化(?)しているのですが、
tell & seek のサイズ限界にひっかかっているようです。
この場合は、ファイルを分割するしかないのでしょうか?
初心者です。よろしくお願いします。
49名無しさん@お腹いっぱい。:02/01/04 14:01 ID:???
Tie::Handle::BigFileを自分で実装してみるとか。
なかなか面白そうだ。
5048:02/01/04 14:14 ID:SUGVa40q
ぐぅ〜 そんな力も時間もないでちゅ・・・・・
5148:02/01/04 14:15 ID:???
わしのIDカコイイな。
5248:02/01/04 14:30 ID:SUGVa40q
>>49
教えてちゃんですみません。ロジックのヒントをお願いします。
53名無しさん@お腹いっぱい。:02/01/04 14:49 ID:kY4aCT8X
既出かもしれませんが。教えてください。
あるCGIで生成した結果を表示後それをHTMLファイルとして保存するにはどうしたらよろしいでしょうか?
54名無しさん@お腹いっぱい。:02/01/04 14:51 ID:???
ファイル(F)→名前を付けて保存(A)...
5553:02/01/04 14:51 ID:kY4aCT8X
追記
HTMLとして保存するスクリプト、または関数をご存知の方お教えください
5653:02/01/04 14:53 ID:kY4aCT8X
>>54たぶんそんなつっこみがくるとおもってました。(藁
追記です
HTMLとして保存できるスクリプトか関数をお教えください
57初心者:02/01/04 14:58 ID:???
>>53
初心者だけど。

HTMLで結果吐いて、
同じ内容をtimeなりでファイル名決めて書き出せばいいのでは?
58初心者:02/01/04 14:58 ID:???
あとは自分で調べる努力を。
5953:02/01/04 15:04 ID:kY4aCT8X
>>57
マジ、わからないんですが、おっしゃられているのは「ファイル(F)→名前を付けて保存(A)...」
で保存してってことですか?
60名無しさん@お腹いっぱい。:02/01/04 15:09 ID:???
>53
ダイジョウブ?
61初心者:02/01/04 15:10 ID:???
6253:02/01/04 15:18 ID:kY4aCT8X
>>61
ありがとうございます
63名無しさん@お腹いっぱい。:02/01/04 16:04 ID:???
板にgzipをとり入れようと思うんだけど
どのように記述すればいいんでせう?
よろしくお願いします。
64名無しさん@お腹いっぱい。:02/01/04 16:05 ID:???
それPerlの質問か?
65名無しさん@お腹いっぱい。:02/01/04 16:14 ID:???
>>48
分割したファイルが一つのファイルのように見えるようにインターフェイスを整えるのだ。
だから本当に大きなファイルが扱えるわけではない。
それでいいならちょいと書いてみるが?
66名無しさん@お腹いっぱい。:02/01/04 16:33 ID:ZcIQHoBD
KENTのPetitBoardに新記事のマークを付けるにはどうしたらようのでしょうか?
6748:02/01/04 16:33 ID:SUGVa40q
>>65
ありがとうございます。お願いいたします。 ;;

ファイルサイズはこの先大きくなる一方なのですが、分割していくしかないでしょうか?
もしくは、データベースに突っ込むか・・・・・・

「Cで書け!」と言われてしまいました。
齢20代後半で今からCは身に付くでしょうか? ソース見てもクラクラします ;;
6865:02/01/04 16:58 ID:???
そんなに期待されると…(汗

あくまでも個人的に面白いと思うから作るだけなんで。
だからといって適当な物を書くわけじゃないですが。

ついでに言うと*DBM_Fileとの連携は出来ないかと。
69名無しさん@お腹いっぱい。:02/01/04 17:16 ID:???
166 名前:名無しさん@お腹いっぱい。 投稿日:02/01/04 16:48 ID:ZcIQHoBD
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
そんな事より即効で文句言うてめぇの方がガキだ。
70名無しさん@お腹いっぱい。:02/01/04 17:37 ID:AGeoy3Tc
>>67
バイナリで書くよりはCの方が簡単です。

まぁマジレスすると身につかないことは無い。
構文自体はPerlに似てるし。ただ、Perlに比べて
もっと「プログラムらしい規約」が多々出てくるので
Perl以外にプログラムをやったことが無かったら
馴染めないかもね。

おれは逆にZ80からCやFortran、RINGOやAppleScript等を
経てからPerlに来て、なかなかPerlに馴染めなかったけど。
7148:02/01/04 18:02 ID:SUGVa40q
>>68
すみません。ヒント程度の気楽なもので十分です。
ありがとうございます。
やりたいのはレコードの検索なので、DBMと連携なりは、考えます。

>>70
ありがとうございます。道のりの割に、使う機会が少なそうで・・・・
でも追い込まれないと勉強しないし・・・・・
自分は、N88BASIC -> 永い永い月日 -> Perl, PHP, VBScript群
しょぼ。
7265:02/01/04 19:28 ID:???
とりあえず

・配列にファイルハンドル(以下FH)を入れておく

・そのFHを通じて何か書き込みをする度にサイズをチェック(stat()してもいいし長さを記録しておいても良い)
・サイズが一定値を超えたら新しいファイルを作成して配列に新しいFHを追加
・seek()やらtell()やらは合計ファイルサイズを考慮して計算
・これらのことを通常のIOインターフェイスを通じて行えるようにタイクラスに閉じ込める。

って感じで(超適当な説明だが)

DBMと連携するにはまた別のことを考えなきゃいけないね。
複数のDBMハッシュを保持したタイハッシュクラスを考えればいけるんじゃないだろうか。
73 :02/01/04 19:32 ID:CJ4spD6O
PostgreSQL使ってみるとか。
74 :02/01/04 19:36 ID:CJ4spD6O
後は検索ルーチン次第だけど、検索項目ごとにインデックス用のDBM作って、
メインデータは、データのカテゴリごとに分割する。
データ自体に一意のID振っておけば、それでデータの抽出が出来る。
そもそも、そんな巨大なデータをwhileとかで回しても、効率よくないだろうし。
7548:02/01/06 14:51 ID:4VaeiTUG
>72
うをー! ありがとうです! エンジンかかってきた! やるでー!!

>73 >74
ありがとー
DBに入れるのも考えましたが、ディスク資源も既に虫の息なので、ホント ツライです。
76名無しさん@お腹いっぱい。:02/01/07 23:02 ID:???
>>75
シーラカンス本(約\3,500)説明ワカリヤスイヨ.
プログラミング一から勉強するよりよっぽど楽勝ですし。
77名無しさん@お腹いっぱい。:02/01/08 16:04 ID:2bmV9luV
アクセスカウンターやその他のデータを
ファイルに記録する時などでファイルを
open (FILE,"+<$file");
で開いて変更するのと

open (FILE,"$file");
書き換え作業
open (FILE,">$file");

という方法だと後者だと良くないのでしょうか?
78名無しさん@お腹いっぱい。:02/01/08 16:06 ID:???
良くなくない
79名無しさん@お腹いっぱい。:02/01/08 16:11 ID:???
>>77
どういう考えでそういう結論に至ったのか問い詰めたい
80名無しさん@お腹いっぱい。:02/01/08 16:20 ID:2bmV9luV
即レスどうもです。
いろいろスクリプト見てると前者の方が多いと感じまして
後者の方はいかんのかな?と思ったです。
特に問題は無いと考えて良いみたいですね。
他に美しくない、負荷がかかる、なんかの問題も
無いのでしたら、何故前者の方がよく使われてるのでしょうか?
81名無しさん@お腹いっぱい。:02/01/08 16:35 ID:???
前者の方がコードが簡単だからではないだろうか。
処理中に落ちてデータが壊れる確率も大差ない気がする。

消えにくいようにするならこれかな?

open IN, "<$file" or die;
# ...
close IN;
open OUT ">$file.tmp" or die;
# ...
close OUT;
rename "$file.tmp" => "$file" or die;

82名無しさん@お腹いっぱい。:02/01/08 16:36 ID:XZoY9u5U
>処理中に落ちてデータが壊れる確率も大差ない気がする。

後者の方が壊れる確率高いよ。
83名無しさん@お腹いっぱい。:02/01/08 17:03 ID:2bmV9luV
1度のopenで、ファイルに書き込むデータのサイズが
減る可能性がある場合はtruncateは必須なんでしょうか?
84名無しさん@お腹いっぱい。:02/01/08 17:09 ID:???
>>83
まず自分で試して見れ。
85名無しさん@お腹いっぱい。:02/01/08 17:11 ID:???
どう言う意味が分からないよぅ。
ファイルサイズを揃えておきたい時なんかはそのまま書き出して
閉じたりするよ
必須と聞かれればNOになる
86名無しさん@お腹いっぱい。:02/01/08 17:28 ID:???
>>84-85
ごめんです
試したら思いっきり変になりました。
これってOSによって実装されてない場合あるんですよね?
あんま使いたくなかったなぁ。
レスどうもでした。
87名無しさん@お腹いっぱい。:02/01/08 17:45 ID:2bmV9luV
すいません。もう1つ質問よろしいでしょか?
皆さんはチャットやらカウンターなんか作らない
かもしれないですが、
カウンターの場合は読み書き両用で1度だけopenするのに対して
チャットなんかだと読み込みのみでopenして
書きこみはまた後で書き込みのみでopenしてるのですが
この違いは何なのでしょうか?
88名無しさん@お腹いっぱい。:02/01/08 17:48 ID:???
作ったヤツに聞け。
89デフォルトの名無しさん:02/01/08 18:06 ID:???
カウンターだからチャットだからと言う事は無い
ただCGI(だよな??)は排他とかトランザクション取らなきゃならないので
色んな手法でデータの同一性を保証出来るようなコードを書く必要は有る
チャット位ならどうって事ないような気がするが
90どなたか:02/01/09 12:29 ID:6I7ENOMK
指定した個数の固有な乱数を効率良く得る方法ってありますか?
例えば1から100の範囲で4つ乱数を生成して、それを一つの配列に入れたいんですが。

$max = 乱数の最大値
$num = 個数
@kekka = 得られた乱数を[0..($num-1)]で格納する配列

という風にしたいんですが、どうしてもうまくいきません。
単純に指定個数の乱数を作って配列に入れるならできるんですが、
重複を許さないためにifやwhileで今までの結果を参照させようと
するとうまいコードが思い浮かびません。
もしかしたら簡単な解決方法があるのかと思いここに書き込ませてもらいました。
91デフォルトの名無しさん:02/01/09 13:06 ID:???
uniqな値って事かな

until ($n == $max) {
 $r = rand(100);
 push(@ary,$r) and $n++ if(!grep /$r/,@ary);
}
92デフォルトの名無しさん:02/01/09 13:08 ID:???
あ、ちょっと違うか
until (my $n == $num) {
 my $r = rand($max);
 push(@kekka,$r) and $n++ if(!grep /$r/,@kekka);
}
93名無しさん@お腹いっぱい。:02/01/09 13:19 ID:???
なんとなく90は「整数を」欲しがってるきがするので、その書き方をしてみる。

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;
9493:02/01/09 13:20 ID:???
あ、dieのメッセージが逆だ(w
9590:02/01/09 13:23 ID:6I7ENOMK
おお!早速有り難うございます。そうです、uniqueな値を指定個数生成したいんです。
でも実行してみたらループしてる・・・うーん、どっか変数間違えたかな。
こんな感じでやってみたんですが

#ここから

$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が真を返してない(?_?)
96名無しさん@お腹いっぱい。:02/01/09 13:25 ID:lzfPILoX
ちかごろは、srand;しないでも良くなったんですか?
9790:02/01/09 13:26 ID:???
お!!!93さんの動いた!!!
助かった〜〜〜
91さんも93さんも有り難うございます。
解読して考え方を参考にしますね。
9890:02/01/09 13:27 ID:6I7ENOMK
>>96
perl5だといらないそうです
99名無しさん@お腹いっぱい。:02/01/09 13:28 ID:???
>96
らしき話をどこぞで見たような。
10090:02/01/09 13:31 ID:???
自己レス。 5.004 以降だとsrandが無い場合は最初のrandが自動的に
呼び出しているそうです。その場合はtimeとprocess IDを元にsrandしている
ことになるそうです。受け売り。
101名無しさん@お腹いっぱい。:02/01/09 13:54 ID:lzfPILoX
>>98-100
なるほど〜、ありがとうございます。
5.003以前だとsrandしないといけないって事ですね。
バージョン依存は難しいです、いろいろ。。。
102名無しさん@お腹いっぱい。:02/01/09 15:11 ID:yTZZpKpq
初めまして、今回仲間内のHPで出席簿を作ってみようということになって少しやってみたのですけど
まったくうまい子といきません。
やりたいことは、名前入力 名前に対してのカウント数
これくらいです。
一応ソース載せます、めちゃくちゃだと思うので一から出直せとかきついこといってください。
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>
まだ途中です。
103名無しさん@お腹いっぱい。:02/01/09 15:29 ID:???
>>102
それだとフォームからのを ほとんど読み捨てない?
あと
OPEN(hoge,">+ filename");
だと関数名が違ううえに 開いた途端ファイルが空になりそう。
http://tohoho.wakusei.ne.jp/wwwperl.htm
104名無しさん@お腹いっぱい。:02/01/09 15:33 ID:yTZZpKpq
>103
ううむ、もっかいやり直して載せてみます。
頑張ります。ありがとー
105名無しさん@お腹いっぱい。:02/01/09 22:11 ID:???
>>102
何を参考にしたらそんなソースになったのか知りたい。
106名無しさん@お腹いっぱい。:02/01/09 22:46 ID:CEjm/hO6
perlのファイルをupすると、一行目のパスの頭になぜか<がついて
<#!/usr/bin/perl
となってしまいます。windowsからアップしているのですが、
LFでアップしようがなんだろうが<がついてしまいます。
原因わかるかたいらっしゃったら教えてくださいー
107名無しさん@お腹いっぱい。:02/01/09 22:50 ID:no3DVS2q
>>106
どこに?
108名無しさん@お腹いっぱい。:02/01/10 11:13 ID:6z++Gsnn
tellが取る位置が納得いかない。 毎行index化したいのですが

open(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ファイルの返す結果はズレズレです。
えらい勘違いしてるのかもしれませんが、よろしくお願いします。
109名無しさん@お腹いっぱい。:02/01/10 12:20 ID:???
が実行される度に次の行の始点にいくのでうまくいかなくて当然です。
110名無しさん@お腹いっぱい。:02/01/10 12:50 ID:???
>>102
まったくうまい子といきません。
ワラタ
111名無しさん@お腹いっぱい。:02/01/10 13:30 ID:???
>>106
鯖の問題では?
タグ埋め込もうとしてるとか
112108:02/01/10 13:54 ID:6z++Gsnn
>109
「ポインタは行頭にしか置かれない」と思い込んでました。アホー
前行の行末 = 次行の行頭 なんですね。
スッキリしました。ありがとうございました。
113名無しさん@お腹いっぱい。:02/01/11 13:45 ID:sSwGXaK5
ttp://homepage1.nifty.com/wizman/app/perlfactory/

これ使ってる人って居ます?
114名無しさん@お腹いっぱい。:02/01/11 15:34 ID:uaH1srIU
2ch書き込み補助プログラムを作ろうと思ってるんだけど,
ソース見てると出てくる
<input type=hidden name=time value=1010730193>
って何? 時間みたいだということはわかるんだけど・・・

あと,perlで書かれた2ch書き込みプログラムのサンプルが
あったらきぼんぬ
115名無しさん@お腹いっぱい。:02/01/11 15:50 ID:USEv/wv3
>114
time関数で取得した書き込み時間をhidden属性で渡してると思われ。
116名無しさん@お腹いっぱい。:02/01/11 15:55 ID:???
>>115
何の為に? (笑
117名無しさん@お腹いっぱい。:02/01/11 15:57 ID:???
>>116 二重投稿チェック。
118名無しさん@お腹いっぱい。:02/01/11 16:01 ID:???
どうやってそれでチェックするの? (^∀^)
119名無しさん@お腹いっぱい。:02/01/11 16:08 ID:???
>>118 わからんなら気にするな。
120名無しさん@お腹いっぱい。:02/01/11 16:15 ID:???
ごめんなさいごめんなさい
本当に困っています
教えて下さい
121名無しさん@お腹いっぱい。:02/01/11 16:26 ID:USEv/wv3
わからんものはいらないんだからマネしなくていいじゃん。

>>120 = >>114 なの?
>>114でゆってる「ソース」ってブラウザ画面からとってきたやつ?
122名無しさん@お腹いっぱい。:02/01/11 16:35 ID:???
そう言うアナタは解るんですね   :-)
123114:02/01/11 16:37 ID:uaH1srIU
>>121
あ,>>120じゃないです,けどThx.IEやネスケの「ページのソースを見る」
ってやつだとオモタ(IEもネスケも使ってないから知らん).
生timeを10進数で書いただけなのね

…あ,もしかして,これをいじると連続投稿できたりするの?
もしかして(って,そこまで杜撰じゃないか)
124名無しさん@お腹いっぱい。:02/01/11 16:43 ID:???
これ何の意味も無いって、御まじない
HTMLにID埋めて判別出来なる訳ないじゃん
125121:02/01/11 17:01 ID:???
>122 わかりませんです。
ソース見てない作者でもない >115で書いたことくらいしかわがんねっす。
126名無しさん@お腹いっぱい。:02/01/11 17:06 ID:???
>>125 実際に試してみて書き込めるかどうか試してみる
こときぼんぬ
127121:02/01/11 17:18 ID:???
>126 オレ?
128名無しさん@お腹いっぱい。:02/01/11 21:22 ID:???
分数の計算するにはどうすれば?
129名無しさん@お腹いっぱい。:02/01/12 02:26 ID:Ex/FkKTs
>>128
電卓を使いましょう。
130名無しさん@お腹いっぱい。:02/01/12 03:30 ID:???
sub get_time{

$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);

}

とあって、時間表示で秒を表示させたくないとか年を表示させたくないとか、
色々変えたいのですが初心者すぎてどうしたらいいのかわかりません。
時間表示をどういう風にカスタマイズしたらいいのか、
解説してあるサイトを教えていただけませんか?
他の所も勉強すべきなんでしょうけど、急いでいるので
とりあえず時間表示の部分だけどうしたらいいのか知りたいのです。
検索しようにも漠然としててどうしたらいいかわからないし、よろしくお願いします。
131 :02/01/12 03:52 ID:H5EXwuVV
> 130
;### 時分秒・年月日・曜日を取得するなら以下で充分
($sec,$min,$hour,$mday,$mon,$year,$wday)= (localtime)[$[ .. $[+6];

;### 年および月は次のようにする
$year+= 1900; $mon++;

;### 時・分・秒・月・日は、ゼロサプレス無しにするなら次のように
;### する。(sprintf関数がオーバーヘッドは大きくてらっしゃるから)
if ( $sec < 10 ){ $sec= '0' . $sec; }
132130:02/01/12 04:39 ID:???
>>131
ありがとうございます…
一生懸命理解しようとしたのですがよくわかりませんでした。
どこにどうやって記述したらいいのかが…

年表示は2002年なら02にするか非表示にしたいんです。曜日表示も消したいんですが…
例えば(02/01/12/04:38)か(01/12/04:38)のようにしたい。
途中経過を無視して答えだけクレクレ厨してるようで心苦しいのですが
どう書けばいいのか丸ごと教えてくださればうれしいです。
本当にすみません。
133名無しさん@お腹いっぱい。:02/01/12 04:43 ID:???
>途中経過を無視して答えだけクレクレ厨してるようで心苦しいのですが
>どう書けばいいのか丸ごと教えてくださればうれしいです。

ここはPerlのコーディングで困ってる人のスレです。
134名無しさん@お腹いっぱい。:02/01/12 04:51 ID:???
スクリプト改造工房 Part3
http://pc.2ch.net/test/read.cgi/php/988808396/
135張り直し:02/01/12 04:52 ID:???
スクリプト改造工房 Part3
http://pc.2ch.net/test/read.cgi/php/988808396/

「こういうふうにスクリプトを改造したいけどやりかたわかんないよー」
という人がいましたらここで聞いてください。
ひょっとしたらアドバイス出来るかもしれません。
136130:02/01/12 05:18 ID:???
>>133
あ、すみませんでした。
>>134-135
どうもですー。逝ってみます。
137 :02/01/12 06:11 ID:h7K0q4m9
> 132

;### 年表示フラグ
$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";
}
138 :02/01/12 06:29 ID:gr/TbQbq
> 137

補足しておきますが、字下げのために全角スペースを使用していますので、
コピペする場合は半角スペースに書き替えてください。
139名無しさん@お腹いっぱい。:02/01/12 07:12 ID:???
>>137-138
ご丁寧にありがとうございます…
スペースを半角にしてそのままコピペしましたが、
でもそれでやると、[]となって一つも表示されません…
素直に改造スレへ逝って来た方がよさそうです…
140 :02/01/12 07:30 ID:8mAO1za5
> 139

これをやっても表示されないとなると困ったことですね。
念のため次の実行でワーニングが出るかどうか試してみては?
perl -wc xxx.pl
141名無しさん@お腹いっぱい。:02/01/12 08:31 ID:???
(月/日 時:分)なら
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);

}
142名無しさん@お腹いっぱい。:02/01/12 10:04 ID:???
>>140-141
やっとわかりました!
希望通りにできました。
色々と変える変更も好きなようにできました。
脱線話題なのにつきあってくださって教えてくださって本当に感謝します、
ありがとうございました。
143名無しさん@お腹いっぱい。:02/01/12 22:55 ID:WkPCmc4x
perl言語をわかり易ーく説明しているサイトを教えてください。
それと、CGI作る際に覚えといたほうがいい言語って何ですか?perlは駄目??
144名無しさん@お腹いっぱい。:02/01/12 23:24 ID:???
>>143
とほほとか。
CGIはPerlでもいいけどPHPの方が簡単だと噂
145ム板の住人:02/01/13 03:44 ID:XUMgdFRP
>>143
ちゃんと削除依頼も出していたみたいやから、えらいね。
144がいう。とほほはここ。
http://tohoho.wakusei.ne.jp/wwwperl.htm
PHPもいいけど、RubyができるならeRubyでもいいかも。
言語として簡単と言うより、PHPやeRubyはCGIを作るのが簡単。
CGIはPerlが一番資料があると思うけど、
配布されているPerlのCGIのソース見るとわかるように、
ほとんど暗号だから。
保守性やOOで組みたいなら、PythonやRubyを使った方がいいかもね。
146初心者:02/01/13 04:52 ID:DlteyoA5
あのーAN HTTPD Daemonを使って
CGIを使いたいのですが
自分で色々やってみたんですがどうしてもできませんでした
やったことはActive PerlとJperlをInstallして
落としてきた掲示板CGIにそのパスを書いたんですが
FTPからそのCGIの属性変更をしようとしても変更できず
HTTP 500内部サーバエラーが出てできませんでした
どなたか詳しく教えていただけませんか?
147名無しさん@お腹いっぱい。:02/01/13 04:54 ID:H4tslrXd
悪ロダみたいな掲示板のスクリプトを探しています

テキストファイルやMIDIファイルを主に扱いたいのですが
JPEGファイルだけでなくいろいろな形式のファイルを
アップロードできる掲示板のスクリプトで
デファクトスタンダードっぽい有名なものとかあるのでしょうか?
イメージ掲示板にはどこに行ってもこれと同じのを使っているなぁという
有名なのがあるみたいですが
148名無しさん@お腹いっぱい。:02/01/13 04:54 ID:34eWZDO9
>>146
ネタだろ?
149名無しさん@お腹いっぱい。:02/01/13 04:56 ID:???
150名無しさん@お腹いっぱい。:02/01/13 05:07 ID:H4tslrXd
おおおおお!喰らった816件!

おれも「アップローダー」&「CGI」&「フリー」&「配布」で
検索して同じように膨大な結果になったんですけど

無難なとこで、みんなが使っている有名なやつにしたいなぁなんて

ダメっすか?(^^;
151名無しさん@お腹いっぱい。:02/01/13 05:39 ID:???
試験
152初心者:02/01/13 06:14 ID:DlteyoA5
僕はネタと思われるほどおかしい事をやっているのでしょうか
ここでこんな事を聞くのはお門違いなのでしょうか
153名無しさん@お腹いっぱい。:02/01/13 06:17 ID:9ZeVW+fZ
>>152
いちいち反応しないでじっくり待ってみなよ。
154名無しさん@お腹いっぱい。:02/01/13 06:53 ID:???
>>146
属性とは何か。パーミッションとは何か。
調べれば自ずと答えが見つかる気がする。
あとはhttpdのヘルプでも読んでくれ。

要するにPerlの問題じゃないって事。
155名無しさん@お腹いっぱい。:02/01/13 07:14 ID:rQlmrkvV
test
156名無しさん@お腹いっぱい。:02/01/13 07:34 ID:Wnlhf2ri
2ちゃんねらーの多く出入りする掲示板を運営しています。
掲示板にトリップ機能を組み込みたいんですが、誰かわかりますか?
157名無しさん@お腹いっぱい。:02/01/13 07:49 ID:???
>>156
みちのくんとこにある2ちゃんコピーの掲示板についてる。
158名無しさん@お腹いっぱい。:02/01/13 11:31 ID:0YPd0etQ
requireとサーバーの負担について質問です。

#!/usr/bin/perl

print "Content-type:text/html\n\n";

require "a.cgi";
print $tmp;
require "b.cgi";
print $tmp;
require "a.cgi";
print $tmp;

exit;

a.cgiには $tmp="a";
b.cgiには $tmp="b";
と書いてあります。

と書くと、結果はabaとしたいのですが、abbとなるんです。
3回目のrequireが1回目と同じために3回目の処理を勝手にスキップ
してるのではないかと推測してみたんですがあってますでしょうか。

別の案として、
require "a.cgi";
$tmpa=$tmp;
require "b.cgi";
$tmpb=$tmp;
print "$tmpa$tmpb$tmpa";

と考えたんですが、a.cgi b.cgiは本来40個くらい変数格納していて、
全て変数に取っとくのもどうかと思い最初の案を考えたのですが。

日本語が不鮮明だな…。まとめてみると、
「2度目のrequireを有効にすることができるか、できるならその方法」
「別の案の場合、サーバーに掛かる負担ってのは憂慮するほどのものであるか」
の二点が疑問です。

どなたかご教授頂ければ幸いです。
159名無しさん@お腹いっぱい。:02/01/13 11:49 ID:???
>>158
それは、requireの仕様。
# てか、requireの使い方を激しく勘違いしているような、、、
とりあえず、perldoc -f requireしてみること!
158の知りたいことが全て解説されている。
160158:02/01/13 11:53 ID:0YPd0etQ
どうも有難う御座います。
requireの使い方は人のCGIを見て使い方を自分の中で勝手に認識したので…。

perldoc -f requireやってみます。
というかどこで(?)やればいいのかも解らないのでとりあえず調べてきます。

それでは。
161 :02/01/13 12:09 ID:???
>>160
> というかどこで(?)やればいいのかも解らないので
コマンドラインから
162名無しさん@お腹いっぱい。:02/01/13 13:35 ID:2oX90M6u
lolipop.jpの鯖にapeboard+を置いたんですけど、
505で動きません。
アスキーモードで転送したし、
Perlのパスは指定のものに変更したし、
パーミッションも755にしているのに動きません。
何故かしらー??
どころか、テストのために同じ状態でUPした、
Hello World!クラスのcgiも動かないのです。
鯖が悪いのか?FTPソフト(FFFTP)が悪いのか?
お分かりの方おりましたらお教えください。
163名無しさん@お腹いっぱい。:02/01/13 13:48 ID:???
POSIXモジュールを使っている人はいる?
使いまくると見づらい?
例えば、$ENV{'QUERY_STRING'}を参照すればいいものをPOSIX::getenv("QUERY_STRING")とやるということ。
164名無しさん@お腹いっぱい。:02/01/13 15:45 ID:???
>>162
Perlのエラーログ見ました?
165名無しさん@お腹いっぱい。:02/01/13 15:53 ID:iK+xIF0s
>>164
httpdのログだろ?
166名無しさん@お腹いっぱい。:02/01/13 15:57 ID:???
るせヴォケ
167名無しさん@お腹いっぱい。:02/01/13 16:06 ID:???
>>166
横から煽るな。
168名無しさん@お腹いっぱい。:02/01/13 16:14 ID:???
>>162
CGIだけど、なんか質問ある?Part 5
http://pc.2ch.net/test/read.cgi/php/1009331505/
169156:02/01/13 19:36 ID:ZxK7891W
すいません、>>157のみちのくの意味がわかりません。
もしよろしければ、もう少し詳しいことを教えてください。
170名無しさん@お腹いっぱい。:02/01/13 20:05 ID:???
171156:02/01/13 21:05 ID:ZxK7891W
>>170
申し訳ない。わざわざ有難うございます。
172名無しウィルス ◆UETvirus :02/01/13 21:26 ID:hUoFkGoF
2ch猛威を振るう宣伝業者の書き込みを撲滅すべく活動し
ております。Q2接続プログラムの解析、関係団体へのメール等、ランキングクリックに
よる宣伝業者へのアクセス数減少と人手はまだまだ必要です。
WEBプログラム板の皆さんの技術を貸していただけないでしょうか。

下記のスレをご覧の上で、ご協力戴ければ幸いです。
「■ 悪徳宣伝業者の画像や動画をばらまくスレ2 ■」
http://wow.bbspink.com/test/read.cgi/ascii/1010876229/
173名無しさん@お腹いっぱい。:02/01/14 15:38 ID:xszmZ/SM
Perlでfork関数を使用した際、
子プロセスがいくつ生成されているか、
親プロセスが知るにはどうすれば良いのでしょうか?
具体的にはHTTPのGETをしたりするスクリプトで
子プロセスの数を(例えば3個までとかに)制限したい
ということなんですけど。
174perl初心者:02/01/14 19:00 ID:n0YvEQb/
現在perlを始めたばかりのプログラミング初心者です。
HC Editorというフリーのテキストエディエターで
perlを書いているんですが、保存時の漢字コードをEUCにすると
なぜか保存して、再び読み出したときに中身が文字化けしてます・・・
OSはWINDOWSです、よろしくお願いします。
175名無しさん@お腹いっぱい。:02/01/14 19:05 ID:???
>174
なぜその製作者のサイトで聞かない?
それが一番確実なはずだけど。
176 :02/01/14 19:48 ID:???
>>174
全然Perlと関係ないぞ、それ
177perl初心者:02/01/14 20:10 ID:RxHccNR/
そっか(汗
そーします。
178名無しさん@お腹いっぱい。:02/01/14 23:46 ID:zLD178tU
パッケージ関数bar を標準で入っている関数die の別名として使おうとして
package foo;
*bar = \&CORE::die;
bar("hoge");
と書いてみましたが,そんな関数知らんと怒られてうまくいきません。
どうやればできますか?
179名無しさん@お腹いっぱい。:02/01/14 23:57 ID:x1aEi06n
スレ違いだけど妥当なスレが見当たらなかったので
書き込ませてください。
CGIかうんた設置を試みてるのですが、どうもうまくいきません。
FFFTPを最近使い始めたのですが、転送する前・・・つまり
こちら側にあるファイルのサイズと、鯖に転送したファイルのサイズが
微妙に違うのです。
20000バイトなら、鯖のは19621バイトといったふうに。
こういうのって、CGIの誤作動に繋がりますか?
何度転送してもそのようなサイズになってしまいます。
180 :02/01/15 00:09 ID:???
>>179
もしかして広告とか?

でも、やっぱりここで訊くのは間違ってる
181名無しさん@お腹いっぱい。:02/01/15 00:11 ID:???
>>179
それはFTP転送がASCIIモードだと改行コード変換が行われるから(多分)。
WindowsだとCR/LFで改行だけど、他のOSだとLFだけだったり。
つまり、改行一つにつき1バイト分、サイズが少なくなる勘定。

ちなみにCGI関係は
http://pc.2ch.net/test/read.cgi/php/1009331505/
182名無しさん@お腹いっぱい。:02/01/15 00:11 ID:???
お邪魔してしまってすみませんでした<(__)>
他の板で聞いてみます

広告とは?
>>179
183 :02/01/15 00:16 ID:???
>>182
> 広告とは?
ゴメソ。適当に言っただけ。忘れて下さい。
184名無しさん@お腹いっぱい。:02/01/15 08:49 ID:DyvaVHMP
このリファレンスの使い方って、マズいですか?
(sub内のmyな変数のリファレンスを返却)

sub foo {
my %ret;
$ret{"bar"} = "baz";
\%ret;
}

my $r = &foo();
print $$r{"bar"} . "\n";
185名無しさん@お腹いっぱい。:02/01/15 10:28 ID:mJdfZzdE
>184
結果はどうなの?
最後の一行を
print $r->{"bar"}."\n";
でどうよ。
186名無しさん@お腹いっぱい。:02/01/15 11:29 ID:???
( ´ ・∀・`) へー
187185:02/01/15 13:37 ID:mJdfZzdE
>184
なんだ。そのままで動くやん。
「sub内でのmy変数のリファレンスを返す」こと自体は全然マズくないよ。
188184:02/01/15 15:41 ID:DyvaVHMP
>187
>「sub内でのmy変数のリファレンスを返す」こと自体は全然マズくないよ。
ああ、そうなんだ。ありがとう。
189名無しさん@お腹いっぱい。:02/01/16 02:09 ID:JQVH7PKS
ふーむ。sub呼ぶ度にheapに%retが確保されるようなイメージですかね。

sub foo {
my ($k, $v) = @_;
my %ret;
$ret{$k} = $v;
\%ret;
}

my $r1 = &foo('key1', 'var1');
print $r1 . "\n";
print $$r1{"key1"} . "\n";

my $r2 = &foo('key2', 'var2');
print $r2 . "\n";
print $$r2{"key2"} . "\n";

print $r1 . "\n";
print $$r1{"key2"} . "\n";

$ ./x.pl
HASH(0x8105ce4)
var1
HASH(0x80f857c)
var2
HASH(0x8105ce4)

$
190102再びです。:02/01/16 10:23 ID:MJHKAqJj
どうも、以前にも質問しました。
時間が空いたのでもう一度書き直してみましたが、動作しません。
出席簿みたいな感じのCGIです、
少しチェックして欲しいです。


require'jcode.pl';
require'cgi-lib.pl';

&ReadParse(*answer);

$name="$answer{'name'}";

open(DATA,">>./log.dat");
while(@dname=<DATA>){
foreach $key(@dname){
($namelist,$count)=split(/,/,$key);
if($namelist eq $name){
++$count;
}
}
print DATA "$name,$count";
191102再びです。:02/01/16 10:24 ID:MJHKAqJj
>>102 です。
192名無しさん@お腹いっぱい。:02/01/16 10:52 ID:???
openの後が意味不明、何がしたいのか説明してみてくれる?
193102再びです。:02/01/16 10:57 ID:MJHKAqJj
(名前、カウント数)
でデータを保存したいのです。
それを参照して同じ名前があったらカウント数増加、
なかったら新規で作成という感じにしたいのです。
194名無しさん@お腹いっぱい。:02/01/16 11:04 ID:???
>open(DATA,">>./log.dat");
追記モードで開いてもポインタがファイルの終端を指しているから
データの読み込みは無理。
SEEKするか?

>while(@dname=<DATA>){
↑これは
>@dname = <DATA>;
こうするか
>while(<DATA>){
こうしなさい。
どちらにしても、追記モードでオープンしてるんじゃ無理。
195102再びです。:02/01/16 11:08 ID:MJHKAqJj
おぉ、分かりました。
open(DATA,"+>./log.dat");
にして入出力用にすればいいのかな
もうちょっとのところまできてるんでしょうか?
とりあえずもうちょっと修行します。
また、報告させていただきます。
196名無しさん@お腹いっぱい。:02/01/16 11:11 ID:???
>SEEKするか?
( ´ ・∀・`) へー
197名無しさん@お腹いっぱい。:02/01/16 11:16 ID:???
>196
追記モードだとSEEKでも前に戻れなかったね。
スマソ。

>195
とりあえず書いてみろよ。
ローカルでテストする分には誰も文句言わないから。
198超初心者:02/01/16 12:10 ID:zfCnc17S
Grepについて教えてください

open IN, "highschool.csv";
while ($line = <IN>){
if ($line eq '') { print "(空行)<hr>\n"; next;}
@splited = split (/\n/, $line);
$test = @splited;
@test = grep (/東京/, @splited);
print "@test<hr>\n";
}
close IN;
とhighschool.csvを読んで「東京」というキーワードでGrepかけ、検索結果を<HR>つきで表示させたいのですが
マッチしなかったところにも<HR>がついちゃいます。どのように回避するのかお教えください、
199名無しさん@お腹いっぱい。:02/01/16 12:16 ID:???
@splited = split (/\n/, $line);
これが何やってるかが分からないから
その後も何やってるかが分からない
@splited に何を入れたいんだろう・・・
200名無しさん@お腹いっぱい。:02/01/16 12:25 ID:???
open (IN, "highschool.csv");
while (<IN>) {
if ($_ eq "") {
print "空行<hr>";
} elsif (index($_, "東京") >= 0) {
print $_, "<hr>";
}
}
close (IN);
201超初心者:02/01/16 12:38 ID:zfCnc17S
>>199
一応読んだcsvを改行コードで区切って@に入れてるんですが。間違ってますか?
それと198で訂正がありましたすみません
open IN, "highschool.csv";
while ($line = <IN>){
if ($line eq '') { print "(空行)<hr>\n"; next;}
@splitted = split (/\n/, $line);
@test = grep (/東京/, @splitted);
print "@test<hr>\n";
}
close IN;
202名無しさん@お腹いっぱい。:02/01/16 12:45 ID:???
>201
一行ずつ読み込んで、改行マークでsplitしたって、全文が$test[0]に入るだけでしょ?
csvファイルの区切り文字って\nでしたっけ?
203超初心者:02/01/16 12:52 ID:zfCnc17S
>>202
いえこの時点でカンマで区切る必要はなく、改行で区切る必要があったんです。
204名無しさん@お腹いっぱい。:02/01/16 12:58 ID:???
>while ($line = <IN>){
これはなにをしてる所?
俺は「ファイルから1行ずつ呼び出す」ものだと思ってるんだが。
つまり\nが二つ以上ある可能性はないのだけれどね。
205名無しさん@お腹いっぱい。:02/01/16 13:01 ID:???
open IN, "highschool.csv";
while ($line = <IN>){
$c++;
print qq($c行目 $line\n);
@splitted = split (/\n/, $line);
foreach $i(0 .. $#splitted){
print qq($c行目$i個目の要素 $splitted[$i]\n);
}
}
close IN;

とりあえずこれを実行してみて何が起きているか考えてみてくださいな。
206名無しさん@お腹いっぱい。:02/01/16 13:02 ID:???
つか200で良いべさ。
207超初心者:02/01/16 13:15 ID:zfCnc17S
皆様。ご指導ありがとうございました。
>>200さんのアドバイスでできました。
ホントお恥ずかしい・・・
208 :02/01/16 20:19 ID:???
@char=('0'..'9','a'..'z','A'..'Z');

という62文字を使って 1 (あるいは 0)から ZZZZZZZZ までの
62進数を順番に生成したいのですが、上手にやる方法はありますか?
209名無しさん@お腹いっぱい。:02/01/16 20:36 ID:???
210名無しさん@お腹いっぱい。:02/01/16 20:41 ID:???
2週間もやってるのか  (笑
211名無しさん@お腹いっぱい。:02/01/16 21:30 ID:???
>208
生成した数値(文字列)をどうしたいのか
配列に入れると218340105584895個要素が居るがそれでも良いのか
つーか41で分からんの?
212名無しさん@お腹いっぱい。:02/01/16 22:55 ID:iUy26tny
リンクを張られた文字の隣にクリックされた回数を表示するにはどうすればいんですか?
213名無しさん@お腹いっぱい。:02/01/17 02:36 ID:???
> 208
簡単過ぎ

@char= ('0'..'9','a'..'z','A'..'Z');
for $char ( @char ){
print &xxx($char),"\n";
}
sub xxx{
my( $ret, $flg );
for ( reverse split(//, $_[$[]) ){
unless ( $flg ){
if ( $_ eq 'Z' ){
$_= '0';
}
else {
if ( $_ eq '9' ){ $_= 'a'; }
elsif ( $_ eq 'z' ){ $_= 'A'; }
else { $_++ ; }
$flg= 1;
}
}
$ret= $_ . $ret;
}
$flg ? $ret : "1$ret";
}
214名無しさん@お腹いっぱい。:02/01/17 02:41 ID:EnQVX8GI
$foo->{hoge};

$foo->hoge;
は、上がハッシュだとして、下のは何を表すんでしょうか?
215名無しさん@お腹いっぱい。:02/01/17 02:50 ID:???
>214 メソッド。
216214:02/01/17 02:55 ID:EnQVX8GI
ありがとうございます。これがメソッドか…
217名無しさん@お腹いっぱい。:02/01/18 02:21 ID:/Sq0HWtq
えと、Perlのスクリプトの速度比較、つまりベンチマークをしたいのですが、なにか方法はないでしょうか?
218名無しさん@お腹いっぱい。:02/01/18 02:24 ID:???
>>217 Benchmark.pm
219名無しさん@お腹いっぱい。:02/01/18 12:15 ID:/Sq0HWtq
>>218さんありがとうございます。
試しに「for」と「while」のベンチマークをしてみたところ
やや「while」の方が効率がいいようですね。<読み込むスクリプトでは
まだ簡単なスクリプトでしか試してないので、分かりませんが。
220名無しさん@お腹いっぱい。:02/01/18 13:09 ID:mZLIoXNk
perlでこの行を入れてアップすると500エラーになるんですよ。
my $query = $ENV{'QUERY_STRING'};
Win用のアパッチでテストした時は良かったんです。
理由を教えていただけませんか
221名無しさん@お腹いっぱい。:02/01/18 13:17 ID:???
Perlが腐ってるから
myを外そう
222220:02/01/18 13:22 ID:mZLIoXNk
ありがとうございます。即効解決しました。
Perlが腐ってるんですね。
感謝
223名無しさん@お腹いっぱい。:02/01/18 15:03 ID:???
>>221
解説希望。うちだとエラー起きないから、何処が腐ってるのかわかんない・・・
224!221:02/01/18 16:23 ID:???
>>223
Perlが5より古くてlocalしかないとか?
225名無しさん@お腹いっぱい。:02/01/18 17:07 ID:???
俺のプロバのPerlが4なんだけど、myを入れるとエラーになるよ。
ということで>224に同意。
226223:02/01/18 17:21 ID:???
腐ってるって、そういう意味か・・・・・・
227名無しさん@お腹いっぱい。:02/01/18 18:49 ID:???
228名無しさん@お腹いっぱい。:02/01/18 19:10 ID:6q/Kp0dN
今、perlの勉強していて、SSIを使ってアクセスカウンターを作りました。
それで、できたplファイルとshtmlを同じ階層に入れて、
shtmlをブラウザ(IE6.0)で開いて確認しようと思ったんですが、
開けないんです。どーしたらいいんでしょーか。
スクリプトは間違ってないと思うんですが。。。
229 ◆efPZis9A :02/01/18 19:29 ID:y3hRDyTH
パーミッションはどうよ?
230228:02/01/18 19:34 ID:6q/Kp0dN
パーミッションはどうなってるか分かりません。
Apache起動して、ローカルでテストしてます。
ブラウザの右下にある青いバーが
増えていってるだけで画面は何も変わりません。
231名無しさん@お腹いっぱい。:02/01/18 20:11 ID:TBZ1H2T9
正規表現で「?」を検索したいんですが、「\?」だと上手く動作しません。
別の方法があるのでしょうか。
232名無しさん@お腹いっぱい。:02/01/18 20:35 ID:???
>230
アクセスカウンターが無限ループしてるとかじゃないの?

>>231
\?で大丈夫のはずだよ。
念の為にローカルで試してもみたけど、普通に出来た。
その前後の文に問題があるんじゃないのかな?
233名無しさん@お腹いっぱい。:02/01/18 21:06 ID:???
>232
無限ループは無いと思います。サンプルファイルでもやってみました。
アドレスに、
127.0.0.1/*.shtmlとやってますが、白いまんま。
shtmlをhtmlにかえると表示はされるのですが、スクリプトは動かないです。
shtmlのアイコンは、IEのアイコンにならないの?
234名無しさん@お腹いっぱい。:02/01/18 21:08 ID:???
>232
そのカウンタを直接呼び出したら?

てゆーか、ApacheのSSIの設定が通ってないとかは?

アイコン変える方法は、ファイルの関連付けでしょう。
235232:02/01/18 21:18 ID:???
できました。
原因は、本に誤りがあったようです。ホームページで確認しました。
<!--#exec cmd="*.pl"-->

<!--#exec cgi="*.cgi"-->
に変えろということでした。変えたところ、上手くいきました。
どうもありがとうございました。
236名無しさん@お腹いっぱい。:02/01/18 23:49 ID:vKcOvEew
カレンダーを作ろうとしています。
例えば2002年1月1日の曜日を知りたい場合、以下の式で分かるのですが、なぜこ
れだけで分かるのでしょう?

($year + ($year-1)/4 - ($year-1)/100 + ($year-1)/400) % 7

上の式で出た余りを対応させれば2002年の最初の日の曜日が出ますが、これだけ
でなぜそうなるのか全く分かりません。

また、

$i = ($year + ($year-1)/4 - ($year-1)/100 + ($year-1)/400);

とした上で、

2002年4月1日の曜日を知りたい場合はその前の月(1月から3月まで)の日の合計
(31+28+31)を$iに足して7で割り余りを出すと出て来ます。

($i+(31+28+31)) % 7

でもこの仕組みが良く分かりません。そもそもなぜ年だけで、任意の年の最初の
日の曜日が分かるのか、また、それをもとにしてどうして任意の年の任意の月の
最初の曜日まで分かるのか全く分かりません。

どなたか説明をお願いできますか。
237名無しさん@お腹いっぱい。:02/01/19 00:07 ID:???
上の100で割ったりするのは、まあ公式だ
Zellerの公式で検索してみて

ここに、日付け絡みのサンプルが色々出てるから必読
他にも役に立つしね
http://www.din.or.jp/~ohzaki/perl.htm

238名無しさん@お腹いっぱい。:02/01/19 01:59 ID:tDZ3djB8
すいません・・・超初心者なんですが、よろしくおねがいします!

win98に、間違ってwinNTのPerlをインストールしてしまったんですが、
アンインストールはどうすればいいのでしょうか???

C:を「Perl」とか「NT」で探したら、Temporaryフォルダにしか
ないみたいなんで大丈夫かな?と思ったんですが、
インストーラーをもう一回起動させたら、
『指定されたサービスはすでに存在します』
ってエラーメッセージが!!!!

『アプリケーションの追加と削除』には、何もできてません。
どなたかお助けーーーー!
239agege:02/01/19 05:21 ID:???
> 238
C:がダメならD:があるさ
240Tupple3d:02/01/19 05:30 ID:tSYJ2BTR
すんまそん。Web制作板から来ました。

$a = 1;
$a = $a++;

Perlで$aの値はどうなりますか?
241agege:02/01/19 06:00 ID:???
> 240
「すんまそん」って、出だしから寒すぎて手がかじかんでうまく答えがかけないよー。
どうしよー。
242240:02/01/19 06:28 ID:???
分かったー!

Perl : 1
Java : 1
C(gccだっと思う) : 2
JavaScript : 1

>>241 お前もなかなか
243名無しさん@お腹いっぱい。:02/01/19 06:34 ID:???
$a = 1;
$a = $a++; # $aは 1
$a = ++$a; # $aは 2
244名無しさん@お腹いっぱい。:02/01/19 07:06 ID:tDZ3djB8
上書きで無事アンインストールできたよーーーー^^
245名無しさん@お腹いっぱい。:02/01/19 07:21 ID:???
>244
おめでとう
246名無しさん@お腹いっぱい。:02/01/19 15:46 ID:b2nTXpDv
Flash5とcgiの絡みの勉強してるのですが、
FlashからデータをPOSTで送信しようとすると、
データが渡ってないようです。
GETだとちゃんとわたってます。
cgiはこんな感じです。(一部ですが)

#フォームデータの取得
if($ENV{'REQUEST_METHOD'} eq 'POST'){
read(STDIN,$query,$ENV{'CONTENT_LENGTH'});
}
else{
$query=$ENV{'QUERY_STRING'};
}
247初心者:02/01/20 06:05 ID:+Bzlb+s3
Perlで書かれたCGIスクリプトを自分で読んで解析しています

サブルーチンの定義のところで

sub FormThList($;$)
{
   処理・・・
}

という部分をいくつも見かけます

引数にある" $;$ " という部分は何をあらわしているのでしょうか?
自分で書籍やWebを調べてみたりしたのですが、引数なのか、リフ
ァレンスなのか、それとも他のものなのか、さっぱりわかりませんでした。

どなたかお分かりの方ご教授ください。宜しくお願いいたします。
248名無しさん@お腹いっぱい。:02/01/20 15:18 ID:GAoGOGYW
あげ
249  :02/01/20 17:22 ID:xUMdAd4X
$_は、あれ、をあらわします。
ほら、あれもってきて。って、よく、彼女とかにいってるでしょ。
そのあれ。だよ。
250名無しさん@お腹いっぱい。:02/01/20 17:58 ID:???
>>247
引数の形式を指定してる。
$はスカラー。;以降は省略可。 ほかにもいろいろ指定できる。
詳しくはperldoc perlsubか,プログラミングPerl改訂版133Pを参照のこと。
251名無し:02/01/20 21:19 ID:Nggbj65w
勉強ついでに指定ディレクトリのファイル全文検索作ってみたんですけど、キーワードに日本語入れるとうまく動かないんですがなぜでしょう?

$dir = ''; # 指定ディレクトリ
$file = '.html'; # 検索対象ファイルの拡張子
$key = ''; # キーワード
opendir(DIR,$dir);
@files = readdir(DIR);
closedir(DIR);
foreach (@files){
if(/$file$/){
open(FILE,"$dir/$_");
@data = <FILE>;
close(FILE);
foreach (@data){
$seach = $seach . $_;
}
if($seach =~ /$key/i){
push(@list,$_);
}
}
}
foreach (@list){
print;
print "\n";
}
252名無しさん@お腹いっぱい。:02/01/20 21:26 ID:???
>251
URLデコードをしてないとか。
「ー」が含まれてるとか。


余談だけど無駄が多いからもうちょっとシェイプアップした方がいい。
grep使うとか。
253名無しさん@お腹いっぱい。:02/01/20 23:36 ID:9LP6jm+w
>>251
EUCの場合

$EUC_JP = '(?:[\x00-\x7F]|[\xA1-\xFE][\xA1-\xFE]|\x8E[\xA1-\xFE]|\x8F[\xA1-\xFE][\xA1-\xFE])';
if $seach =~ /^$EUC_JP*$key/i {
...

perlメモだかに、詳しく載ってた気がする。
254agege:02/01/21 03:26 ID:???
> 250
それにしてもサブルーチンに引数の形式を指定するメリットがわかんないんだけど、
どういうことYO!

単に引数形式を明確にするだけのこと?

うーん!こんやも眠れない。
255名無しさん@お腹いっぱい。:02/01/21 03:31 ID:???
>>254
眠れないんだったらperlsub読みなよ。
どういうときに使うのか書いてある。
256名無しさん@お腹いっぱい。:02/01/21 03:39 ID:???
仮引き数書けない方がずっと異常です
逝っちゃってますねもう
257agege:02/01/21 03:47 ID:???
> 256
なるほど、漏れが異常なのか。チョットだけ安心しました。
255さんの提案でperlsub読んでだいたいはわかりました。
それにしても今までラクダ本しか読んでなっかったからバージョンアップに伴う追加・更新部分は
未知な部分が多いネー。
258あうあうあう:02/01/21 07:42 ID:???
Win98+ActivePerlで勉強しようと思うのですが、
日本語部分は(メッセージなど)EUCで書くのが正解と聞きました。
ところが、DOSプロンプトだとEUCは文字化けします。
Shift-JISで書けば、DOS上では問題ないですが・・・。
どうしたらよいですか?
print "日本語いーゆーしーだ!";
とかでやると
ニ・ワク・、。シ、譯シ、キ。シ、タ。ェ
になります。
259名無しさん@お腹いっぱい。:02/01/21 09:52 ID:yXZYknLA
>258
S-JISで全然問題ない。
260名無しさん@お腹いっぱい。:02/01/21 12:43 ID:O1LRho5n
フォームメールのCGIを作ってみてるんですが、半角スペースが入るとスペース
以降のデータが受取れません。

流れとしては、HTMLフォームから入力して送信ボタン→確認画面で送信ボタン→メール送信
というもので、確認画面ではスペースはちゃんと入ってて、例えば「山田 まさし」
と入るのですが、その確認画面から「送信」ボタンを押して再度同じCGIを呼びだして
データを受取ると「山田」で切れてしまうです。
$value =~ tr/+/ /;この行で送られてきたスペースコード(+)をスペースに変えて
いるのですが、再送信するときには変換されたスペースをまた(+)のようなコードに
戻してあげないとダメなんでしょうか?
試しに普通の+に戻してみたらそのまま+が出てきてしまいました。。
わかりづらくてゴメナサイ、アドバイス貰えればありがたいです。
261aaa:02/01/21 13:36 ID:7eJzqhDP
Perl関連のほしい本があるんですが、その本が5.6対応では
ありませんでした。(elements programming with Perlです。)
5.5?やってから5.6本やってもおそくないですか?
あと、支障とかないですか?
262茶文字 ◆xELvisFU :02/01/21 15:57 ID:0ovwchs4
テキストファイルを読み込んで、1行目を<title>と<h1>に、2行目を<h2>にするようにしたいのです。

open FILE,"xxx.dat";
@page = split(/\n/,<FILE>);

print <<"EOH";
<html>
<head>
<title>$page[0]</title>
</head>
<body>
<h1>$page[0]</h1>
<h2>$page[1]</h2>
EOH

$count = 0;
foreach $i(@page){
if ($count > 1){
print $page[$i];
}
}
print "</body></html>";

close FILE;

2行目を$page[1]として<h2>に、3行目以降をforeachで順に出力するつもりで
以上のように書いたのですが、$page[2]以降を取得できないようです。
どこで勘違いしているのでしょうか?
263名無しさん@お腹いっぱい。:02/01/21 16:08 ID:???
>262
>foreach $i(@page){
ここに問題がある。
この場合、$iには何が入るのかな?
俺は数字じゃないように思えるんだが。

>foreach $i(1 .. $#page){
との違いはわかるかな?
264名無しさん@お腹いっぱい。:02/01/21 16:09 ID:???
>foreach $i(2 .. $#page){
こっちが正しいな。
修正する前に書き込んじまった、スマソ。

あともう一つ質問。
$countはずっと0のままでいいのかな?
数字が全然増えてないから、if文の中に入れないようにも見えるぞ。
265251:02/01/21 16:14 ID:???
>>252
URLをデコードするってどういうことでしょうか?
よくわからないのですが。
266251:02/01/21 16:17 ID:???
検索したらすぐ出てきました。迷惑かけてすいません。
逝ってきます。
267茶文字 ◆xELvisFU :02/01/21 16:21 ID:???
>>264
をっとスマソ
うまくいかないので別の方法で無理やり辻褄あわせてて、もとのスクリプトと
違うこと書いちゃいました。

$count++をforeachの最後に入れて、print $page[$count];にしてたはず・・・

うがー なんでこんなところにひっかかってんだ私;
268名無しさん@お腹いっぱい。:02/01/21 16:25 ID:yxhIL91Y
>267

俺ならこんな感じ。チェックしてない。

open (FILE,"xxx.dat"); @page = (<FILE>); close (FILE);
$page[0] =~ s/\n//g;
$page[1] =~ s/\n//g;

print <<"EOH";
Content-type: text/html; charset=Shift_JIS

<html>
<head>
<title>$page[0]</title>
</head>
<body>
<h1>$page[0]</h1>
<h2>$page[1]</h2>
EOH

$count = @page;
for($i = 2;$i <= $count; ++$i) {
$$page[$i] =~ s/\n/<BR>\n/g;
print $page[$i];
}
print "</body></html>";
269名無しさん@お腹いっぱい。:02/01/21 16:26 ID:yxhIL91Y
>268
ミス
>$$page[$i] =~ s/\n/<BR>\n/g;
$一個おおいっすスマソ
270名無しさん@お腹いっぱい。:02/01/21 16:28 ID:???
>>260
print "Content-Type: text/plain\n\n";
print $ENV{QUERY_STRING}
とかやってデータを確認したら?
確認後のエンコード周りがあやしい。

>>261
5.6触ったこと無いが,
Perl5.6は仕様を足しただけみたいだから
Perl5やってからでも特に支障無いと思う。
271茶文字 ◆xELvisFU :02/01/21 16:28 ID:???
>>268
あ 何となくどこで勘違いしているのかわかったかも。
さっそく試して報告するです。
ありがとうございました。
272 :02/01/21 16:30 ID:VXT1KPc/
shift @page;
foreach (@page){
print $_;
}
じゃいけんの?
$countってどこでインクリメントするの?
273  :02/01/21 16:36 ID:rALZtRCf
print <<"EOH";
Content-type: text/html; charset=Shift_JIS

<html>
<head>
<title>$page[0]</title>
</head>
<body>
<h1>shift(@page)</h1>
<h2>shift(@page)</h2>
EOH

foreach (@page){
print $_;
}
具体的にはこうか?
274 :02/01/21 16:38 ID:pTKsFCnA
あ、全然だめだ。スマソ。逝ってきます。
275傍観者:02/01/21 16:40 ID:bIKApu3O
268完璧だと思うんだけど、文句いう奴いるんだよな
276ほげ:02/01/21 16:41 ID:bIKApu3O
268でいいと思われ
277茶文字 ◆xELvisFU :02/01/21 16:50 ID:???
できました。
268は完璧でした。

>>272
$countがインクリメントしていないのは私の転記ミスです。
278名無しさん@お腹いっぱい。:02/01/21 16:52 ID:???
>>275-276 = 268
名前変えてもID出てるぞ。
279名無しさん@お腹いっぱい。:02/01/21 16:53 ID:???
>>275-276
TMTOWTDIってことで、色々出てくるのはいいんじゃねーの。
280名無しさん@お腹いっぱい。:02/01/21 16:55 ID:???
>>273
おしい。
ヒアドキュメントの中では @{[shift @hoge]} のように使うと吉。
281名無しさん@お腹いっぱい。:02/01/21 17:00 ID:yxhIL91Y
あ!、もう出来たんだね。
でも、せっかく作ってきたので書いちゃう。

どうしてもforeach使うんだったらこんな感じ。
やっぱしチェックしてない。

open (FILE,"xxx.dat"); @page = (<FILE>); close (FILE);
$page[0] =~ s/\n//g;
$page[1] =~ s/\n//g;

print <<"EOH";
Content-type: text/html; charset=Shift_JIS

<html>
<head>
<title>$page[0]</title>
</head>
<body>
<h1>$page[0]</h1>
<h2>$page[1]</h2>
EOH

$i = 0;
foreach (@page){
if ($i ne "0" && $i ne "1"){
$_ =~ s/\n/<BR>\n/g; print $_;
}
++$i;
}
print "</body></html>";
282名無しさん@お腹いっぱい。:02/01/21 17:01 ID:yxhIL91Y
>278
お、おれ?
おれかよ!(笑)
283 :02/01/21 17:01 ID:???
open (FILE,"xxx.dat");
@page = (<FILE>);
close (FILE);
$title = shift(@page);
$h2 = shift(@page);
print <<"EOH";
Content-type: text/html; charset=Shift_JIS

<html>
<head>
<title>$title</title>
</head>
<body>
<h1>$title</h1>
<h2>$h2</h2>
@page;
</body></html>
EOH
284茶文字 ◆xELvisFU :02/01/21 17:11 ID:???
みなさんありがとう。
それぞれのサンプルもきちんと見て勉強させてもらうです。
WebProg板サイコー(・∀・)イイ!
285名無しさん@お腹いっぱい。:02/01/21 17:14 ID:???
>>282スマソ勘違い
ということで>>275-276はギャフンと言え
286名無しさん@お腹いっぱい。:02/01/21 17:19 ID:???
改行をつけたい場合は2回目のshiftのあとに
@page = map {$_ . <BR>} @page;
だね。
287 :02/01/21 17:31 ID:???
@page = map {$_ . "<BR>"} @page;
やろがぁ!
@page;のセミコロンはいらん。オケ?
288名無しさん@お腹いっぱい。:02/01/21 17:36 ID:???
しょうもない質問だと途端に元気になるな
このスレの回答者は  (笑)
289茶文字 ◆xELvisFU :02/01/21 17:40 ID:???
>>288
しょうもない質問で悪かったな(w
290aaa:02/01/21 17:42 ID:7eJzqhDP
>270 レスどもです。
291名無しさん@お腹いっぱい。:02/01/21 19:00 ID:6X0/37gM
GUIで次のようなプログラムを書け、という問題が学校でだされました。
ちんぷんかんぷんです。しかもスレ違いの予感もしてます。ごめんなさい。

プログラムはグレー色のウィンドウで表すこと。
しかもユーザーに赤、青、緑から好きな色を選ばせられるようにすること。
なおかつ1度ではなく何度もユーザーにその色を何度も変える事ができるようにすること。

誰か教えてください。
292名無しさん@お腹いっぱい。:02/01/21 19:06 ID:???
プラットフォームを書くこと。
293名無しさん@お腹いっぱい。:02/01/21 19:12 ID:6X0/37gM
ほんとごめんなさい
プラットフォームとは何ですか・・・?
294名無しさん@お腹いっぱい。:02/01/21 19:13 ID:???
Windowsとか、Linux, BSD, HPとか。
それと、言語はPerlなの?

295名無しさん@お腹いっぱい。:02/01/21 19:19 ID:???
>>293 頑張れ!
君の開発環境を書くのだ。

しかし、宿題をスレに投げる という安直さがゴルァ!だ。
296名無しさん@お腹いっぱい。:02/01/21 19:27 ID:6X0/37gM
全て英語で書かれてて、なんだか注文をそのまま英語にしたみたいです

Your name? Lucy
Occupation/Job Title? Comedian

Nice to meet you Lucy, Comedian!

名前を入れればそのままその名前が文章につかわれる
ってなのを前回説明されました。
これはPerlなのでしょうか?

297名無しさん@お腹いっぱい。:02/01/21 19:34 ID:???
>>296
うーん・・・・・ 他になんかないの? 
全部英語で書かれてて、一行目が「#!/usr/local/bin/perl」です、とか。
298名無しさん@お腹いっぱい。:02/01/21 19:36 ID:???
291と296の関係がよくわからん。
取りあえず、環境を書いてくれ。
UNIX系なのか、Windowsなのかぐらいは判別できるだろ?
299名無しさん@お腹いっぱい。:02/01/21 19:40 ID:6X0/37gM
書かれてないんです。ってか質問しか書いてないので・・・。
とりあえず次の授業にきっぱりと出来ませんでしたって胸はって言います。
一緒に考えて下さってありがとうございました。
ところで、授業のレジュメにAlgorithmも学ぼうって書いてあります。
このAlgorithmもなにかの言語なのでしょうか?
300名無しさん@お腹いっぱい。:02/01/21 19:49 ID:???
>>291に関連して素朴な疑問。
PerlでGUIのプログラムなんて出来ないよね?
ただ、適切なスレに誘導するために情報聞き出してるんだよね?
まさかPerlで書けるから聞いてるんじゃないよね?

ビクビク…。
301名無しさん@お腹いっぱい。:02/01/21 19:51 ID:???
何のための言語バインディングだよ。素人か?
302名無しさん@お腹いっぱい。:02/01/21 19:52 ID:???
>>299
ていうか授業出てなかったろ…。
出てれば絶対こんな質問しないぞ…。
303名無しさん@お腹いっぱい。:02/01/21 19:56 ID:???
Perl, Ruby, Python, とか大抵ののスクリプト言語でGtk, Tk, Qt, Win32用のバインディングが用意されてるだろ。
304名無しさん@お腹いっぱい。:02/01/21 19:56 ID:6X0/37gM
はい、素人です
やっぱりどうも難しいのでもっと初心者用のスレから出直してきます
ありがとうございました。。。
305名無しさん@お腹いっぱい。:02/01/21 19:58 ID:???
>>304
300向けであって、あんたに言ってるんじゃないと思うぞ。
306名無しさん@お腹いっぱい。:02/01/21 20:01 ID:hWcQ0KB7
>296
どう見てもこれはCの課題だよな。
307名無しさん@お腹いっぱい。:02/01/21 20:02 ID:hWcQ0KB7
>291
VBかVCの課題だろ?
308 :02/01/21 20:07 ID:OlNKxLTk
★必見★
パチマガで池上蓮から「旧友の自殺狂言騒動に抑えきれない嫌悪感」
で晒された本人(謎の人物)が池上に対して怒りまくってるぞ!!

謎の人物ホームページ↓
http://www.geocities.co.jp/Bookend-Hemingway/4715/

関連スレッド
謎の人物公式スレッド↓
http://kaba.2ch.net/test/read.cgi/pachi/1009686980/l50
309300:02/01/21 20:13 ID:???
>>301
はい。初心者です。
みんな当然のように答えてたから疑問に思ったです。
言語バインディング、検索逝ってきます。
ありがと。
310301:02/01/21 20:14 ID:???
>>300 きつい事言ってごめんな。
311茶文字 ◆d38VidMY :02/01/21 20:15 ID:???
>>306-307
ってことは、ここで聞いたコーディングがコンパイルされる可能性が
あったわけですね?(w

>>308
マルチポストウザイYo!
312名無しさん@お腹いっぱい。:02/01/21 20:18 ID:???
>>311
何を聞きたいの?
もうちょっと分かりやすく書いてみて
313300:02/01/21 20:19 ID:???
ていうか、やっぱり釈然としないんだけど、
PerlでWindowsアプリケーションは作れないよね?
なんつーか、
> プログラムはグレー色のウィンドウで表すこと。
とか。。
それと同様にX Window のアプリケーションも作れないよね?
ってことはGUIのプログラムって作れないんでは?

んー。どこの考え方が間違ってるんだろう。。
「GUI」を勘違いしてるのかな…。
314名無しさん@お腹いっぱい。:02/01/21 20:26 ID:???
>>313
一例。
http://freshmeat.net/img/screenshots/19044.jpg
(freshmeatで"Perl Gtk"とか"Perl Tk"で検索してみ。併せて100以上でてくるから)
検索エンジンなどでGtk-Perlとか、Perl/Tk, Perl/Qt. PythonならPyUI, PyQtとかを調べるよろし。

315名無しさん@お腹いっぱい。:02/01/21 20:27 ID:???
>>311 あのさ、重箱の隅だけど、「コーディング」はコンパイル出来ないよ
(w とか言わずに一緒に勉強しようよ
>>313
Perlでは出来ないけど、TkとかGtk使えばperlの文法で出来るんだから
全然間違えて無いよ。
もし無くてもPerlが叩けるライブラリ書けば良いでしょ?
316名無しさん@お腹いっぱい。:02/01/21 20:30 ID:???
質問者と同レベルの人が居るのがおかしいね
317名無しさん@お腹いっぱい。:02/01/21 20:35 ID:hWcQ0KB7
>315
TkとかGtkを課題に出す情報処理系の宿題かこれ?
というそもそも論に帰ってしまった私です。
318300:02/01/21 20:35 ID:???
>>314-315
なるほど。ありがとうございます。

>>316
初心者だけどなんか役に立つこと出てくるかなぁと思って
かちゅ〜しゃのお気に入りに入れて巡回してますが。。
319名無しさん@お腹いっぱい。:02/01/21 20:50 ID:???
311の意味が分からんのは俺だけかな・・・・
320茶文字 ◆d38VidMY :02/01/21 21:01 ID:???
311はことばの用法を間違ってましたスマソ
聞き流してくだされ>all

で、話は変わりますが。

Webサーバ上の特定のディレクトリにあるファイルをリストアップして、
ファイル一覧を表示するスクリプトを作りました。
せっかくだから各ファイルの更新日時を自動的に表示させたいのですが、
これはPerlでは無理なのでしょうか?

.cgiでSSIを許可するのはなんか怖いし、JavaScriptは自分自身あまり
ONにしないので、できたら避けたい今日この頃なんですが。
321名無しさん@お腹いっぱい。:02/01/21 21:15 ID:???
んー、自動的と言うのはどう言う意味だろう(CGI殆ど書かないので。。)
基本的にそのディレクトリに有るファイルが、CGIのみから更新されるなら
SSIでincludeする(execは殺す)為のファイルを書き出すだけで良い。

もし、CGIが感知しない部分でダイナミックに更新されるなら
素直にCGIで表示するか、呼び出し元のHTMLを書き換えるしか無いんじゃ
無いかな
322茶文字 ◆d38VidMY :02/01/21 21:32 ID:???
>>321
早レスさんくす。

実はファイルリスト表示も各ファイルの内容閲覧も同じスクリプトでまかなっています(リストされるファイルはすべてHTMLのbody部分です)。

例)
hoge.cgi
 →引数がない場合はファイルリストを表示
hoge.cgi?page=020121
 →ファイル名が020121のファイルをbody部に取り込んで表示

なので、更新日時を表示するときの拡張子が.cgiなわけです。
SSIを使うには、.cgiからSSIを使えるようにしなければならないわけで、
これは320に書いたように避けたいのです。

てことは、ファイルリスト表示は.shtmlで出力してやるのが無難っぽいですね。
短いスクリプトなので、頭の体操だと思って最初から組み直してみます。
ありがとうございました。
323茶文字 ◆d38VidMY :02/01/21 21:34 ID:???
と書いてから気がついたのだけど、
組み直さなくてもHTML出力部分だけ付け足して、
そのあとリダイレクトすればいいのか?
324名無しさん@お腹いっぱい。:02/01/21 23:26 ID:???
>>322
> hoge.cgi?page=020121
Taint check をしっかりとやるようにね。
325名無しさん@お腹いっぱい。:02/01/21 23:34 ID:???
初めてご質問をさせていただきます。今、
$abcd = "AAAA";
open(CF, "./a.txt") || die "Can't open Header File $!";
 while (<CF>){
chop;
print;
}
close;
と記述しました。
a.txtには
$abcd
と書きました。ですが、どうしても上記プログラムを実行したら
$abcdと表示されるだけでAAAAと表示されません。どうにかして
$abcdを変数としてファイルより読みだすことはできないでしょうか?
326名無しさん@お腹いっぱい。:02/01/21 23:40 ID:???
print eval($_);
かな?
327名無しさん@お腹いっぱい。:02/01/21 23:40 ID:???
eval
328325:02/01/21 23:51 ID:???
>>326>>327
ありがとうございます。早速やってみます。
evalは、shでしか使ったことありませんでした。
勉強します
329名無しさん@お腹いっぱい。:02/01/22 01:09 ID:???
>325=328
細かいことだけど、自分がたずねる質問に「ご」をつけるのは
ちょっと変だと思うよ。
330名無しさん@お腹いっぱい。:02/01/22 10:12 ID:efarCwHc
すみません。お教えください
日記帳のように画像アップして1行コメントを入れるスクリプトを書いてるんですが
うまくいきません。
どこかによいサンプルはないでしょうか?
331名無しさん@お腹いっぱい。:02/01/22 10:36 ID:???
332名無しさん@お腹いっぱい。:02/01/23 04:57 ID:sT5Qn28R
すみません。質問なんですが、
htmlファイル内の&を%44になおすプログラムを作っていて
以下のとおりやってはみたもののうまくいきません。
#!/usr/local/bib/perl

while(<stdin>){
s/&;/%44;/;
print;
}

どうしても置き換えてくれません。
教えてください。
333名無しさん@お腹いっぱい。:02/01/23 05:16 ID:???
>>332
Perlへのパス
stdinからデータが読み込まれているか
検索・置換する文字列
を確認してみてわ
334332:02/01/23 07:16 ID:sT5Qn28R
>333
遅れてすみません
333さんがおっしゃられるところは確認しました。
自分で気になっているところは
test→test1みたいな普通の文字の置き換えはできるのですが
&とか%がはいっているとまったく駄目なのです。
どうしたら解決できるかわからなくて。。。
335名無しさん@お腹いっぱい。:02/01/23 09:25 ID:fLlnsoLj
>>334 ほい。 

#!/usr/local/bin/perl

while(<stdin>){
s/&/%44/g;
print;
}
336名無しさん@お腹いっぱい。:02/01/23 19:47 ID:SS/bYptO
メール件名をMIMEエンコードしようと思い、
CGIファイルと同ディレクトリに「mimew.pl」
http://www.cc.rim.or.jp/~ikuta/mime_pls/index.html を設置して、
CGI内のメールのヘッダ情報記述部分で
$mimew = './mimew.pl';
require $mimew;
$subject = "[カタログ請求]";
$subject2 = &mimeencode($subject);
open (SENDMAIL, "| $nkf | $sendmail -t -n") || die;
print SENDMAIL "To: $recieve\n";
print SENDMAIL "Bcc: $bcc\n";
print SENDMAIL "From: $mail\n";
print SENDMAIL "Reply-To: $mail\n";
print SENDMAIL "Subject: $subject2\n";
print SENDMAIL "Content-Type: text/plain; charset=\"iso-2022-jp\"\n";
print SENDMAIL "Content-Transfer-Encoding: 7bit\n\n";
上記のようにしたのですが、エンコードされません。
お助け。。。
337名無しさん@お腹いっぱい。:02/01/23 20:15 ID:???
>>336 
$nkf = '/usr/local/bin/nkf';
$sendmail = '/usr/sbin/sendmail';
$mimew = '/フルパス書いてちょ〜/mimew.pl';

でどうよ。

338ちょっとおしえて ごめんね:02/01/23 20:48 ID:FEde7HEx
http://money.2ch.net/test/read.cgi/build/1011774209/23 が言ってる
掲示板一覧ってどこから入るの?
339名無しさん@お腹いっぱい。:02/01/23 21:30 ID:Pj40bVNf
http://www16.big.or.jp/~plustic/0range/JAPANESE/dustbox/404.html
の404のエラーの例として、.htaccessにて404.cgiを表示させてますよね。

この404.cgiの中で、ユーザーが打ち込んだURLを表示させてるんですが、
これってPerlでどう書いたらいいんでしょうか?
340332:02/01/23 21:37 ID:sT5Qn28R
333 335>
貴重なアドバイスありがとうございました。
解決しました。
あらためてありがとうございます。
341名無しさん@お腹いっぱい。:02/01/23 22:30 ID:RVBh2RNr
1:自分はこう言う事がしたい。
テキストカウンタを作っている。
CGI自体はhtmlでなくテキストだけを吐いて、
イメージカウンタと同じような感じに
html内に挿入するようにしたい。

2:それでこんな風にやってみたが・・・
Content-typeをtext/htmlにしたままimgで貼ってみたけど

3:それだとこんなエラーが出て上手く行かなかった。
ペケが出るだけで無理だった。
342名無しさん@お腹いっぱい。:02/01/23 22:34 ID:6XVla5oi
フォームメールcgiに手をくわえてます。
htmlフォームから送信ボタンを押すとcgiを呼んで確認で内容を一覧表示させてます。
そのあとにブラウザの戻るボタンを押したとき、htmlフォームに戻りますが、それまで
入力していた内容が消えてしまいます。元のcgiではブラウザの戻るボタンで戻っても
フォームに入力されていた内容は消えなかったんです。
この違いはどういった原因が考えられるでしょうか?
343342:02/01/23 22:44 ID:6XVla5oi
あれ?今度は戻るボタン押して戻ったらフォームに入力した値が出てた・・
CGIの影響じゃないのかな・・ この現象誰か知りませんか?

>>341
ペケが出るって事は画像へのリンクがうまくいってないんじゃないかな?
344341:02/01/23 22:58 ID:RVBh2RNr
>>343
いや、画像でなくテキストを挿入したいんですが
コンテントタイプの吐きかたとhtml側の呼び出し方がわからなくて
とりあえずimgで貼ってみただけです。。
CGIが画像を吐いてないので当たり前といえば当たり前なんですが。。

>フォーム
戻るボタンは単にブラウザが自分の履歴を表示しているんだから
この場合呼び出されてないCGIは関係ないと思います。
というか、どんな風に手を加えたらおかしくなったかを書くと吉と思われ。
345名無しさん@お腹いっぱい。:02/01/23 23:05 ID:???
>>341
一般にはSSIやフレームが使われる。
346336:02/01/23 23:07 ID:7DXRWN8l
>>337
ありがとうございます。

今外出中なんで明日にでも試してみます。
347341:02/01/23 23:16 ID:RVBh2RNr
>>345
有り難うございます。
過去にフレームで画面をちっちゃく切り取って
そこにhtmlで吐いたカウントを放り込んでいたんですが、
それをやめたくていろいろ試しているので
SSIの方を調べてみようと思います。
348名無しさん@お腹いっぱい。:02/01/24 00:12 ID:gcEosdJo
配列の中にある数字を指定した部分だけ検索したいんですが、

for ($no = 0; $no <9; ++$no){
@suuji = (1,2,3,4,5,6,7,8,9,10);
@kekka = grep /$no/, @suuji;
print "@kekka\n";
}

を実行すると、
10
1 10
2
3
4
5
6
7
8

と、10まで出てきてしまうんですが、
1から9までのみ出すようにするにはどうすればいいんでしょうか?
349名無しさん@お腹いっぱい。:02/01/24 00:15 ID:???
for ($no = 0; $no <9; ++$no){
@suuji = (1,2,3,4,5,6,7,8,9,10);
@kekka = grep /^$no$/, @suuji;
print "@kekka\n";
}

誰でも思いつく一番簡単な変更はこれだわな。
my @ary = qw(1 3 4 5 8 9 11 14 19);
my $max = 10;
my $min = 3;
my @result = grep{$_ > $min && $_ < $max}@ary;
print @result;
351名無しさん@お腹いっぱい。:02/01/24 00:32 ID:???
print join "\n", grep { /^\d$/ } @hoge
352名無しさん@お腹いっぱい。:02/01/24 00:34 ID:???
>>349-351
ありがとうございました。なんとか出来そうです。
正規表現だけで出来たんですね…。もっと本をよく読みます。
353352:02/01/24 05:00 ID:???
出来ない…

1 あいうえお
2 かきくけこ

というようなものが、配列に100個ほど入っているとして、
右の番号を指定して、その部分だけ左のものと一緒に取り出したいんですが…。

上のやりかただと、どうやっても出来なくて…。

このままじゃ気になって寝られない…でも寝ないと死ぬので寝よう…
354名無しさん@お腹いっぱい。:02/01/24 08:11 ID:nUVwgo4z
>353
デリミタを使う。
1<>あいうえお
2<>かきくけこ



とする。
これを配列に読み込んで、、たとえば、@linesに読み込んだとしたら、
foreach (@lines) {
 ($number,$text) = split(/<>/,$_);
 if ($number eq "目的の番号") {
  print "番号は$numです。内容は$textです\n";
 }
}
こんなかんじになるわけ。
355名無しさん@お腹いっぱい。:02/01/24 09:08 ID:???
FAQだと思うのですが
LinuxにPerlがインストールされているかどうかを
確認するには簡単にはどうするのでしょうか。

そのperlのVersionも表示させれると
うれしいのです。

よろしくサンクスコ
356名無しさん@お腹いっぱい。:02/01/24 09:12 ID:nUVwgo4z
>355
コマンドラインから、
perl -V
357名無しさん@お腹いっぱい。:02/01/24 09:19 ID:???
ありがとうございます。m(._.)m ペコッ
358336:02/01/24 10:49 ID:ENGsaylW
>open (SENDMAIL, "| $nkf | $sendmail -t -n") || die;
上記の部分を以下の様にすると、無事エンコード処理されました。
open (SENDMAIL, "| $sendmail -t -n") || die; #$nkfを外しました

結果的に解決はしたのですが、何が悪かったのかが分かっていません。
そもそも上記の箇所はいつもメール作成部分の定型的に使用していたの
で、nkfがどんな役割を果たしているのか、なぜnkfが絡むとエンコードさ
れなかったのかがわかっていません。
(ちなみにnkfは冒頭で $nkf = "/usr/bin/nkf -j"; と定義しています)

何が悪かったのでしょうか?
359名無しさん@お腹いっぱい。:02/01/24 11:11 ID:LyCCkAYD
@EXPORT, @INC は何を意味して名前を付けたのかわかるのですが
@ISAって何の略なのでしょう?
360名無しさん@お腹いっぱい。:02/01/24 11:26 ID:???
@EXPORTはそのまんま。
@INCはIncludeかねぇ。
@ISAはISAバスしか思いつかない・・・。
361名無しさん@お腹いっぱい。:02/01/24 11:44 ID:???
is a と読めば良いでしょう
362名無しさん@お腹いっぱい。:02/01/24 11:45 ID:???
>>361
なるほど。
363名無しさん@お腹いっぱい。:02/01/24 11:46 ID:???
>>361
継承元と。
へぇ。
364Technetium@1000ゲト ◆gZEJGdGE :02/01/24 12:57 ID:???
困っているわけではないのですが、ちょっと質問です。
IPの桁を
「0.0.0.0」→「 0. 0. 0. 0」
こんな風にそろえるプログラムを作ってみたんです。
で、この桁をそろえる部分でどれくらいのロスがあるのかなと思って、2種類のプログラムを組んで試してみました。

プログラム「い」
($ipa , $ipb , $ipc , $ipd) = split(/\./, $remoteadd);
if ($ipa < 10) { $ipa = " $ipa"; }
elsif ($ipa < 100) { $ipa = " $ipa"; }
if ($ipb < 10) { $ipb = " $ipb"; }
elsif ($ipb < 100) { $ipb = " $ipb"; }
if ($ipc < 10) { $ipc = " $ipc"; }
elsif ($ipc < 100) { $ipc = " $ipc"; }
if ($ipd < 10) { $ipd = " $ipd"; }
elsif ($ipd < 100) { $ipd = " $ipd"; }
$ipadd = "$ipa\.$ipb\.$ipc\.$ipd";

プログラム「ろ」
@ip = split /\./, $remoteadd;
if ($ip[0] < 10) { $ip[0] = " $ip[0]"; }
elsif ($ip[0] < 100) { $ip[0] = " $ip[0]"; }
if ($ip[1] < 10) { $ip[1] = " $ip[1]"; }
elsif ($ip[1] < 100) { $ip[1] = " $ip[1]"; }
if ($ip[2] < 10) { $ip[2] = " $ip[2]"; }
elsif ($ip[2] < 100) { $ip[2] = " $ip[2]"; }
if ($ip[3] < 10) { $ip[3] = " $ip[3]"; }
elsif ($ip[3] < 100) { $ip[3] = " $ip[3]"; }
$ipadd = "$ip[0]\.$ip[1]\.$ip[2]\.$ip[3]";

この二つを、

while (--$kurikaesi){
}

の中に入れて1000000回(爆)繰り返してベンチマークした結果、プログラム「ろ」の方が約1秒も速いという結果を得ました。
速いのはいいんです。それはいいんですが、なぜ配列を使っただけで処理速度が上がったのかがわかりません。
これはなぜなのでしょう?
365名無しさん@お腹いっぱい。:02/01/24 14:49 ID:???
>>364
sprintfとかじゃだめなんでしょうか?
366配列:02/01/24 15:36 ID:RS3bsnfp
しつもーん
(1)配列をある文字列で検索して、その配列の番号を調べる。
(2)配列の任意の位置に要素を代入(追加)する
(3)配列をCSVデータ(カンマ割りテキスト)に変換する。

上の事をforeachなんかを使って配列の要素をグルグル一個一個
調べて実現する事は出来るんだけど・・・もっと効率的なやり
方があるような気がしてならない・・・。

(2)はつまり
@ary[0]="A";@ary[1]="C";@ary[2]="D";を、いかにして
@ary[0]="A";@ary[1]="B";@ary[2]="C";@ary[3]="D";
にするかって事なんだけど・・・簡単?
367名無しさん@お腹いっぱい。:02/01/24 15:40 ID:???
>366
@ary = (@ary[0 .. 1] , $newdata , @ary[2 .. $#ary]);
とかいう方法は?
368名無しさん@お腹いっぱい。:02/01/24 15:49 ID:???
>>366
とりあえず(2)だけ
splice @hoge, 1, 0, 'B';
369名無しさん@お腹いっぱい。:02/01/24 15:51 ID:???
続けて(3)
こういうことかな?
join ',', @hoge;
370名無しさん@お腹いっぱい。:02/01/24 15:53 ID:nUVwgo4z
(1)は普通、ぐるぐる回すしかない。
371配列:02/01/24 15:53 ID:RS3bsnfp
>>367
なるほどぉ、そういう風にするのかぁ。
できました、できました。ありがとうございます。

>>368
あっ、こんなやり方も・・・これから試してみます。
ありがとうございます。

>>369
そんなに簡単に・・・試してみます。
372配列:02/01/24 15:59 ID:RS3bsnfp
すごい!!>>369>>368できました。なんて簡単なんだ!

(1)はやはりグログロ回すしかないんですね。
373名無しさん@お腹いっぱい。:02/01/24 16:03 ID:???
(1)はこんなのいかが?
my @hoge = qw(hoge fuga foo bar);
my $i;
print join " ", map { $_->[0] } grep { $_->[1] =~ /f/ } map { [ $i++, $_ ] } @hoge;
#=> 1 2
374名無しさん@お腹いっぱい。:02/01/24 16:10 ID:???
でもBenchmarkとったらforで回した方が早いな。
インデント崩れるかな。

use Benchmark;

timethese(10000, {
A => sub {
my @hoge = qw(hoge fuga foo bar);
my $i;
my @res = map { $_->[0] } grep { $_->[1] =~ /f/ } map { [ $i++, $_ ] } @hoge;
},
B => sub {
my @hoge = qw(hoge fuga foo bar);
my @res;
for (my $i = 0; $i <= $#hoge; $i++) {
$hoge[$i] =~ /f/ or next;
push @res, $i;
}
},
});
375名無しさん@お腹いっぱい。:02/01/24 16:12 ID:nUVwgo4z
foreachで回すのが一番早そうな予感・・・・・・・
376配列:02/01/24 16:13 ID:RS3bsnfp
>>373
スゴ!ここまでになると僕には記号の羅列にしか見えませんが
出来ました。

う=ん。perlは深すぎる。
377名無しさん@お腹いっぱい。:02/01/24 17:37 ID:???
>う=ん
めっちゃなごんだ
378352:02/01/25 00:02 ID:???
>>354
えと、これを実行したところ、
($number,$text) = split(/<>/,$_);
の行でエラーが出ました…。
何か変えないといけないんでしょうか…。
379名無しさん@お腹いっぱい。:02/01/25 00:06 ID:???
>378
まさか全角スペースそのままでコピペとかしてないよな?
380名無しさん@お腹いっぱい。:02/01/25 00:17 ID:PBLVziZQ
>379
それだな・・・・

>378
インデント使えないから全角スペースはいってます。
半角スペースに直して下さい。
381352:02/01/25 01:47 ID:???
あ…全角になってました…。
半角にしてやったらうまく動きました。
今度こそ…。

ありがとうございました。
382配列:02/01/25 12:07 ID:IeC8qMZZ
...と、和ませついでに聞いてみる。

僕のような初心者がもう一歩踏み出す為の本ってなんかお
勧めありますか?

あと、思うのは英語がわかれば、プログラム言語の収得の
時間は半分くらいに短縮できるんじゃないだろうか?文献
もイパーイあるし、そもそも構文が英語だし、その点日本人っ
てかなり不利な様な・・。

関係ないけど今、Apacheの設定してんだけど、もう、この
コメントがスラスラ読めたらどんなに楽だろう・・・と・・・
ふ=。
383名無しさん@お腹いっぱい。:02/01/25 12:51 ID:???
384名無しさん@お腹いっぱい。:02/01/25 13:40 ID:r3/rqZp3

絶対に、わかりずらいぞ。
日本語記述プログラム
385名無しさん@お腹いっぱい。:02/01/25 14:55 ID:eF69uSNx
open(FILE, "<$FilePath");
while (read FILE, $_, 1024) {
  unless ($Count % $DivSize) {
   $FCount = sprintf("%04d", ++$FCount);
   open(OUT, ">${FileName}_$FCount$AddExt");
   binmode(OUT);
  }
  print OUT $_;
  $Count++;
}

これは $DivSize に 500 とか指定して指定KB単位で
ファイルを分割する(昔DOSで使っていたkitcutみたいな)のですが、
Active Perl for Linuxでは期待通りに動くのに
Active Perl for Win32(Win98SE)では失敗します。

直接の原因は読み込むファイルに"0x1A"があると
そこで処理が終了してしまうようですが、
なぜそうなるのかは分かりません。
Windows系OSでも正常に動かすにはどうすればよいのでしょうか?
386名無しさん@お腹いっぱい。:02/01/25 15:08 ID:79BxtF4T
ハッシュの値に配列を登録することはできるのでしょうか?

my @array;
my @some_array = (1, 2, 3);
%hash = {'key' => @array};
for (@some_array){
 push $hash{key} $_;
}
print $hash{key}[0]; #出力は「1」

となるようにしたいのですが、「push $hash{key} $_;」ここで
compilation errorが出てしまいます。

希望通りの結果を出すにはどのようにすればよいのでしょう?
387 ◆wfMSpsRY :02/01/25 15:15 ID:???
my @some_array = (1, 2, 3);
my %hash = ("key" => \@some_array);
print $hash{"key"}[0];
388■■■■■:02/01/25 17:52 ID:xsDEBfwk
#!/usr/local/bin/perl -w
↑の-wはどういう意味なのでしょうか?
389名無しさん@お腹いっぱい。:02/01/25 17:57 ID:???
>>388 検索しろやボケ(w ←の"w"と同じ。
390名無しさん@お腹いっぱい。:02/01/25 18:02 ID:???
ちなみに
#!/usr/local/bin/perl -プ

にすると警告メッセージの文体がうざくなります
391名無しさん@お腹いっぱい。:02/01/25 18:03 ID:/7cgUOJj
>388
ワーニングのwだよ。
392■■■■■:02/01/25 18:07 ID:xsDEBfwk
どんなキーワードで検索するのですか?
マジ質問なんですが。-wはキーワードにならないもので。
393名無しさん@お腹いっぱい。:02/01/25 18:08 ID:???
394■■■■■:02/01/25 18:08 ID:xsDEBfwk
なるほど、「スイッチ」ですか。ありがとうございます。
395名無しさん@お腹いっぱい。:02/01/25 18:17 ID:???
正直 man perl / perldoc perl ぐらい見ろやボケ と言いたい。タダの教えて厨じゃん。
396名無しさん@お腹いっぱい。:02/01/25 18:21 ID:???
マターソ光線  しびび(以下略
397名無しさん@お腹いっぱい。:02/01/25 18:28 ID:S6WZ3j03
ユーザーに一時的にユニークなIDを付加したいのですが、
何か定石になっている方法等はないでしょうか。
398親切な人:02/01/25 18:42 ID:???

ヤフーオークションで、幻の人気商品、発見!!!

今は無き「コピーガードキャンセラー」↓
http://page5.auctions.yahoo.co.jp/jp/auction/e5843828

ヤフーオークション内では、現在、このオークション
の話題で、持ちきりです。
399名無しさん@お腹いっぱい。:02/01/25 18:52 ID:???
>397
$$
400名無しさん@お腹いっぱい。:02/01/25 18:52 ID:???
400
401名無しさん@お腹いっぱい。:02/01/25 20:53 ID:???
>>385
これは、0x1A(=^Z)がDOSでEOFだったという歴史的経緯によるもの。
純粋に入力をバイナリとして扱うには、FILEについても
openの直後にbinmode(FILE)とすることで解決するはず。
402名無しさん@お腹いっぱい。:02/01/25 21:24 ID:Y6CV5/iR
>>399
やはり$$が定石なのですね。
ありがとうございました。
403名無しさん@お腹いっぱい。:02/01/25 21:56 ID:79BxtF4T
自作のPerlモジュールを@INCのパスに
置かずに、使用する方法はあるのでしょうか?
404名無しさん@お腹いっぱい。:02/01/25 22:02 ID:/7cgUOJj
>403
use lib
405名無しさん@お腹いっぱい。:02/01/25 22:05 ID:???
>403
ていうか、モジュール自作できるのに、そのモジュールの使い方がわからないなんて事あり得るのだろうか?
406403:02/01/25 22:36 ID:79BxtF4T
ゴメンよ、お馬鹿で。でもあり得るんだよ、実際ココにいるから。

で、
use lib '/path/to/my_module_dir';
を加えたら、とりあえず動いたんだけど、
use lib 'ディレクトリパス';
とすれば @INC にここで指定した'ディレクトリパス'が
加わったのと同様と考えていいのですか?
407名無しさん@お腹いっぱい。:02/01/25 22:57 ID:???
use lib "/path/to/dir";
print @INC;

で分かるだろが。自分で調べろヤ。
408名無しさん@お腹いっぱい。:02/01/25 23:02 ID:???
マターソ光線  しびび(以下略
409名無しさん@お腹いっぱい。:02/01/25 23:10 ID:XMaI9lFd
>>401
ありがとうございます。
入力側もバイナリモードにすることにより期待通りに動きました。
出力に関しては以前引っかかったことがあったので
気にしていたのですが入力も、とは・・・やられました。
410名無しさん@お腹いっぱい。:02/01/25 23:39 ID:???
>マターソ光線  しびび(以下略
これって教えて君を増やす為なの?
411名無しさん@お腹いっぱい。:02/01/26 00:51 ID:OfzJhL7v
SSHでログインして「use benchmark;」を使ってベンチマークをするのは出来たんですが
これって、ブラウザからは出来ないんですか?500エラーになるんですが…。
結果の数値を表示させるにはどうしたら良いでしょう?
412名無しさん@お腹いっぱい。:02/01/26 02:20 ID:WUMSdJPW
jisコードの数字(ISO2022-JPの文字列ではなくて、文字をあらわす
文字コード、例えば「あ(2422)」の2422という数字)
をEUCの文字に変換して出力するにはどうしたらよいのでしょうか?
print &convert(2422);
(表示)

見たいな感じにしたいんですが・・・。
413agege:02/01/26 03:19 ID:???
> 411
use benchmark; ⇒ use Benchmark;
414名無しさん@お腹いっぱい。:02/01/26 16:03 ID:???
>>412
packを使ってみ
415名無しさん@お腹いっぱい。:02/01/26 18:44 ID:4vbo6FDe
質問なのですが

Perlで、配列を一つのスクリプト内で何度も再利用することで、
その都度、別の名前の配列を複数作る場合に比べて
メモリ消費は低減できるのでしょうか?
416ループに関して:02/01/27 23:58 ID:y07CruPJ
formからpostで受け取ったデータを
ハッシュにして…ってところ何ですけど。

require './cgi-lib.pl';
&ReadParse(*form);

$A1="$form{'A1'}";
$B1="$form{'B1'}";
$A2="$form{'A2'}";
$B2="$form{'B2'}";
$A3="$form{'A3'}";
$B3="$form{'B3'}";



$A50="$form{'A50'}";
$B50="$form{'B50'}";

っていう感じにしたいんです。
まあ「動く」ってだけなら気合いで書けば問題ないんですけど、
ループとか使ってきれいに書く方法を教えていただきたいのです。

どうもループは苦手でして。。。よろしくお願いします。
417名無しさん@お腹いっぱい。:02/01/28 00:45 ID:i9Ky8+Ox
>416
while (($key,$value) = each(%form)) {
    $$key = $value;
}
なんのためにこんな事をするんだろう?・・・・
418うんこ:02/01/28 07:44 ID:???
>>414
情報ありがと。漏れの検索が甘かったです。すんません。
419http://nara.cool.ne.jp/mituto:02/01/28 15:08 ID:Ye799Ifr
3月24日〜27日に立命館大学BKCに田中洸人氏が来ます。
http://210.172.69.179/jps_search_02au
http://nara.cool.ne.jp/mituto
420 :02/01/28 15:19 ID:???
うんこ発見!!!
421名無しさん@お腹いっぱい。:02/01/28 15:29 ID:???
>420
いいようんこ見つけたくらいでいちいち騒がなくて。
小学生じゃあるまいし。
422うんこ:02/01/28 16:35 ID:???
あーあ、みつかっちまった。(誰に?!)
厨房だからっていじめないでおくれよ。
頑張ってプログラミングしてます。
423名無しさん@お腹いっぱい。:02/01/29 00:28 ID:4QGFGOvy
以下のようなtest.plを作って実行すると
config.txt did not return a true value at test.pl line 4.
と言われてしまいます。しかも
print "$board\n";以下が表示されません。
どうしたものでしょうか。

config.txtに
$board = "文字列01";
$dir = "文字列02";
$limit = "文字列03";
$down = "文字列04";
を書き込んでいます。


======test.plの内容======
#!/usr/bin/perl -w

if ($#ARGV < "0") { print "[ERROR]\tUsage: perl test.pl config.txt\n"; exit; }
if (-e $ARGV[0]) { require ($ARGV[0]); }
if (!defined($board) || !defined($dir) || !defined($limit) || !defined($down)) {
print "[ERROR]\n";
exit;
}

print "$board\n";
print "$dir\n";
print "$limit\n";
print "$down\n";
424名無しさん@お腹いっぱい。:02/01/29 00:34 ID:kF9Gt4SC
>423
config.txtのお尻に
1;
と書いてみる。
425名無しさん@お腹いっぱい。:02/01/29 01:05 ID:aDiD5uGU
my $sentence = '今日は29日だ。01:05分';

if ($sentence =~ /([\d]+)/) {
$sentence .= "\n・$1";
}

print $sentence;

この結果
> 今日は29日だ。01:45分
> ・29
が出力されますけど、
いくつ含まれているか判らない数字列を全部取り出して、
それを全部後ろにくっつけて、
> 今日は29日だ。01:05分
> ・29
> ・01
> ・05
と出すにはどうすればいいでしょう。
426名無しさん@お腹いっぱい。:02/01/29 01:11 ID:???
while($sentence =~ s/([\d]+)//) {
$sentence .= "\n・$1";
}

間違えると無限ループになるから注意。
427名無しさん@お腹いっぱい。:02/01/29 01:14 ID:???
tu-ka,自分で間違ってるじゃん。

$sentence2 = $sentence;
while($sentence =~ s/([\d]+)//) {
$sentence2 .= "\n・$1";
}
428 ◆7P5EE/DI :02/01/29 01:19 ID:???
my @number = $sentence =~ /\d+/g;
$sentence .= join "\n", '', map { '・' . $_ } @number if @number > 0;
429名無しさん@お腹いっぱい。:02/01/29 01:23 ID:qEiE9m0V
"20020129012155"という文字を
$yyyy = "2002";
$mm = "01";
$dd = "29";
$h = "01";
$m = "21";
$s = "55";
こうしたいんですが、スマートなやり方はないでしょうか?
今は
@date = split //,$date;
for (1..4) {$yyyy .= shift @date;} for (1..2) { $mm .= shift @date;}
こんなのを書いてるんですがいかんせん汚い・・・
430 ◆7P5EE/DI :02/01/29 01:32 ID:???
/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/

あんま奇麗じゃないか
431名無しさん@お腹いっぱい。:02/01/29 01:44 ID:jKfeCUaQ
>>430
いや、充分綺麗(ワラ
432429:02/01/29 02:10 ID:mntfCIt4
ああ、なるほど、マッチさせればいいのか・・・
ありがとうございました。
433名無しさん@お腹いっぱい。:02/01/29 03:11 ID:???
>>429
unpack ('A4A2A2A2A2A2', $str);
434425:02/01/29 03:55 ID:???
>>426-428
かなり助かりました。ありがとうございました。
435名無しさん@お腹いっぱい。:02/01/29 06:48 ID:yBBFlrS0
再び質問させてください。
htmlファイル中にある&を%44になおすプログラムを作っているのですが
そのファイルの中には&が8個あって1番目の&だけを修正したいのです。
#!/usr/local/bin/perl

while(<stdin>){
s/&/%44/o;
print;
}
上記の状態から修正したいのですが、どうしたらよいでしょうか??
436340=435:02/01/29 07:13 ID:yBBFlrS0
私のやり方だと8個の&すべて%24に変わってしまいます。
色々やってみたのですがうまくいきません。
おちから貸してください。
437・・・:02/01/29 07:29 ID:???
#!/usr/local/bin/perl

while(<stdin>){
unless ($this_scalar_means_flag == 3.14159265358979){
$this_scalar_means_flag = 3.14159265358979;
s/&/%44/o;
print;
}
}
438名無しさん@お腹いっぱい。:02/01/29 07:35 ID:???
一秒たりとも自分では考えたくないんだね  :-)
439340:02/01/29 07:43 ID:yBBFlrS0
すみません。単純に勉強不足です。
わたしなりには考えたのですがどうしてもうまくいかなくて。。。
440名無しさん@お腹いっぱい。:02/01/29 09:32 ID:/LeYWjfo
ところでgunzipさんのサイトってあるの?
以前作ってるとか聞いたことあるんだけど。。
441名無しさん@お腹いっぱい。:02/01/29 10:58 ID:???
>>440 スレ違い
442名無しさん@お腹いっぱい。:02/01/29 11:50 ID:???
>437 チョト感動。 タノチイ。

443名無しさん@お腹いっぱい。:02/01/29 12:43 ID:F543ET41
馬鹿発現なのは100も承知。

$iのiとはなんのi?
あと$1とか……
色々しらべてみても、これ? つーのが。
444あぼーん:あぼーん
あぼーん
445名無しさん@お腹いっぱい。:02/01/29 13:00 ID:???
>443
どれにレスしているのか引用しなさい。
わからないことが馬鹿なんじゃなくて、他人に自分の意志を
伝えられる文章を書けないのが、馬鹿。
446名無しさん@お腹いっぱい。:02/01/29 13:11 ID:???
>443
言ってる意味がよくわからないが、
$1とかに関しては正規表現の際に使う特別な変数。
http://tohoho.wakusei.ne.jp/wwwperl1.htm#Expr

$iのiってのは、プログラムの世界で、一時的なカウントの変数とかに
一般的にi、j、kなどが使われる理由を知りたいって事?
こっちに関しては俺も知らないからなんとも言えないけど。
447名無しさん@お腹いっぱい。:02/01/29 13:44 ID:F543ET41
>>445
すんまへん。引用じゃなかったんで。

>>446
>一般的にi、j、kなどが使われる理由を知りたいって事?
そ、そういうことです(苦笑)。
vは valueなのかな、とオボロゲにゃー思うんですが。
448名無しさん@お腹いっぱい。:02/01/29 14:16 ID:???
>447
i はイテレータの頭文字じゃないかな?
449447:02/01/29 15:00 ID:???
www.ruby-lang.org/ja/uguide/uguide09.html
これのことですかね?
450名無しさん@お腹いっぱい。:02/01/29 15:14 ID:JIM4MzqN
よろしくお願いします。
open(DAT,"foo.dat");
@foos = sort <DAT>;
close(DAT);
foreach (@foos) {
print;
}
これだとファイルが大きいとメモリを使いすぎるみたいなのでやめようと思って、
下のように書き直したんですが
open(DAT,"foo.dat");
foreach (sort <DAT>) {
print;
}
close(DAT);
この場合も結局、一旦<DAT>を全部読み込んでからsortしてるんでしょうか?
@foosにコピーしないだけマシですか?
451名無しさん@お腹いっぱい。:02/01/29 15:29 ID:7v+0Ir29
たいしてかわらん
452450:02/01/29 18:58 ID:???
そうですか。。。
じゃああまり気にしないことにします。
453名無しさん@お腹いっぱい。:02/01/29 20:12 ID:GCzt07oL
perlで、ファイルリストを渡すと、そのファイルの中の
特定文字列を置き換える、という処理をしたいのですが
どうしたらよいのでしょうか?
a.txt
b.txt
c.txt
と渡すと、
a.txtのmonaをgikoに、
b.txtのmonaをgikoに、
c.txtのmonaをgikoに、置き換えるという処理をしたいのです。
454453:02/01/29 20:21 ID:GCzt07oL
環境はWindowsです。しょぼん。
455名無しさん@お腹いっぱい。:02/01/29 20:27 ID:7v+0Ir29
perl -p -i -e 's/moga/giko/g' a.txt b.txt c.txt
456453:02/01/29 20:31 ID:GCzt07oL
>455さんありがとうございます。最後のa.txt b.txt c.txt部分が
リストになって渡されるのです。
Linuxみたいに`cat list`とかできるとよいのですが…
457453:02/01/29 20:35 ID:GCzt07oL
cat list | perl …ではだめですよね。なんかだめっぽいです。
やりかた間違ってるんでしょうか?
458名無しさん@お腹いっぱい。:02/01/29 20:39 ID:???
>455
Can't do inplace edit without backup.
459名無しさん@お腹いっぱい。:02/01/29 20:44 ID:???
>457
Windowsにcat入っているの?
460名無しさん@お腹いっぱい。:02/01/29 20:45 ID:7v+0Ir29
cat list | xargs perl -i.bak -p -e 's/giko/mona/g'
だけど。今思ったらWindowsなんだね。
じゃあ、自分でファイルオープンして置換しながらtmpファイルに出力して
renameで。
461453:02/01/29 20:58 ID:GCzt07oL
catじゃなくてtypeでした>>457 でもどのみちだめっぽいですね。
1行ずつ「exec perl」で呼び出すってのはだめでしょうか?
type list | perl -e "while(<>){exec \"perl -e's///'\"}みたいに
やってるんですが…うううむ
462名無しさん@お腹いっぱい。:02/01/29 21:05 ID:???
@files = ('a.txt','b.txt','c.txt');
foreach $file(@files) {
     @DATA = ();
     open(FILE,"$file");
     while (<FILE>) { $_=~ s/mona/giko/g; push (@DATA,$_); } close (FILE);
     open(FILE,">$file");
     print FILE @DATA;
     close (FILE);
}
463名無しさん@お腹いっぱい。:02/01/29 21:23 ID:???
perl -p -i.bak -e "BEGIN{chomp(@ARGV=<ARGV>)} s/mona/giko/g" list.txt
ってのはどうかな。何故かlist.txtが破壊されるけど。
464名無しさん@お腹いっぱい。:02/01/29 21:27 ID:???
perl -p -i.bak -e "BEGIN{chomp(@ARGV=<>)} s/mona/giko/g" <list.txt
なら破壊されないか。
465453:02/01/29 21:28 ID:GCzt07oL
なるほろ!いったん配列にいれるのですか。ありがとうございます。
466462:02/01/29 21:31 ID:9LBydpPt
・・・・・・・
467名無しさん@お腹いっぱい。:02/01/29 21:37 ID:???
ワラタ
468462:02/01/29 21:41 ID:vVENca1F
>467
ひどいや。
469467:02/01/29 22:41 ID:???
気分を害したならあやまる。スマン。 おれは462の466のコメントがうまいなと思っただけで、
別にけなしているわけではない。ある意味、逆にリスペクトだよ。
470429:02/01/30 00:14 ID:vUn9vtFi
>>433
ありがとうございました。
unpackって使った事がないので他にも色々試してみます。
471462:02/01/30 01:15 ID:Dm6D5Jsh
>469
いえいえ、そうでもないです。
ていうか、コピペにでも見られたのでしょうか?マジに手打ちでちこちこ書いたのに
見事な放置っぷりで悲しくなりました。動作確認までしたのに。
どうしてでしょう?
やっぱ、一行目に
#! /usr/local/bin/perl
書かなかったのが敗因でしょうか?(笑)
472名無しさん@お腹いっぱい。 :02/01/30 10:45 ID:cYid0m8S
ディレクトリー名を変更するにはどうしたらいいの?
473名無しさん@お腹いっぱい。:02/01/30 12:18 ID:jvP4y3Zo
>472
リネームする。
474名無しさん@お腹いっぱい。:02/01/30 13:08 ID:???
>>473
スミマセン
perlでって意味です。
475名無しさん@お腹いっぱい。:02/01/30 13:19 ID:???
>474
perlでリネームする。
476名無しさん@お腹いっぱい。:02/01/30 13:24 ID:???
レンタル鯖 UNIX LINUX
どこも、板違いに思えたので、
こちらで質問させてください。

CGI(Perl)を自作していて、
@Linesに、文字列を埋め込んで
(HTMLの文法に沿った文字列です)
print "@LINES";
この処理を、AのサーバーとBのサーバーで実行した場合、
表示できるAのサーバーと表示できずにエラーとなるBの
サーバーがあります。

これは、物理的なメモリーの不足が問題でしょうか?
Apacheの設定の問題でしょうか?
次回、Cのサーバーをレンタルする場合に、
上記のエラーを回避できるサーバーを選択するには、
何を確認すればいいのかわかりません。。。
どうか教えていただきたいです。

ちなみに、@LINESを出力できないって問題は、
foreach $temp(@LINES){
print $temp;
}
これで、クリアしました。

また、foreachで一行ずつ、書き出す場合と
@LINESで一気に書き出す場合で
サーバーにかける負担と
プログラムの処理にかかる時間についても
ご教授いただければ、幸いです。

よろしくお願いします。
長文スイマセン。。。。
477名無しさん@お腹いっぱい。:02/01/30 13:31 ID:jvP4y3Zo
>476
それぞれのサーバの環境、特に導入されているperlのバージョンなどが
わからなければ何とも言いようがないけど、このケースでは全く
Apacheは関係ないし、メモリの実装量も、あまり関係あるとは思えないな。
オーバーフローでも起こしていない限りスワップしてでも実行するだろうし。

perl単体の問題だと思います。
478名無しさん@お腹いっぱい。:02/01/30 13:37 ID:jvP4y3Zo
>474
$souce_dir = "test"; # リネームしたいディレクトリ名
$dist_dir = "test1; # リネーム後のディレクトリ名
`mv $souce_dir $dist_dir`;
479476:02/01/30 13:37 ID:???
>477
ご回答ありがとうございます。
失敗したBのサーバーのPerlのバージョンを
調べてみます。

@LINESで一気に書き出す場合と、
$LINESで、一行ずつ書き出す場合については、
Per単体の問題がない場合は(エラーで落ちない場合)
@LINESの方が高速に動作すると考えても良いでしょうか?
480名無しさん@お腹いっぱい。:02/01/30 13:39 ID:jvP4y3Zo
>479
foreachの行程分だけ早いだろうけどね。
微々たる問題だとは思うけど。
481476:02/01/30 14:02 ID:???
>480
ご回答ありがとうございます。

スワップファイルをHDに書き出す可能性や
サーバーにかける負担を考えると
foreachの方が良いってことですね。

ありがとうございました。
482名無しさん@お腹いっぱい。:02/01/30 14:14 ID:jvP4y3Zo
>481
ううん、逆です。
foreachのほうがその繰り返しの行程分
リソース食うって意味です。
でも多分本当に微々たる問題だと思います。
483日付の計算?:02/01/30 14:27 ID:5H2ncmbe
たとえば、今日から30日後の年月日を算出すると
いった場合どうしてます?。なんかカレンダーの
テーブルとか自作しなくちゃいけないとか?

随分前から悩んでるんですけど・・。
484名無しさん@お腹いっぱい。:02/01/30 14:33 ID:???
>483
localtime(time + 30*24*3600);
485名無しさん@お腹いっぱい。:02/01/30 15:14 ID:L4I/gPlU
"@LINES"だと文字列をつくるんでリソース食わないか? あと、print foreach @LINES と print "@LINES"は$"によっては、
結果が違ってくるね

486日付の計算?:02/01/30 16:40 ID:5H2ncmbe
>>484
ありがとうございます。
487名無しさん@お腹いっぱい。:02/01/30 17:45 ID:5H2ncmbe
[簡単な暗号化]

cryptのような暗号化されたものを、元の状態にもどせない
ものではなくて、

任意のキーを与えて文字列を暗号化して、またそれをその
のキーで元の文字列に復元できる。

なるたけサーバーに付加がかからない。

って何か方法があるだろうか?

もしくはもっと簡単でもいいので、今思いつく方法としては
文字コードに変換して幾つかずらして暗号化するって方法ぐ
らいかな。
488名無しさん@お腹いっぱい。:02/01/31 03:29 ID:???
>>487
その辺がお手軽では?
全く強度を気にしないならBASE64辺りでも良いだろうけど。
少し凝るなら文字コードに変換したのをKeyで作った変換テーブルで
変換すると云う手も有る(テーブルを作る都合上処理は大きくなるけど)。
或いは適当な(数学で云う)関数を作ってKeyにより係数を変動させる。
その関数に文字コードから変換した数を代入し値を出し、適当に文字に
変換なんて手もあるかも(この場合計算誤差が出ないようしなけりゃ成らない…)。

ぱっと考えたものだと上記くらいですね。
処理の重さは…知らない(笑)。
暗号強度と暗号化の複雑さは大体天秤の関係で状況に拠るから一概には
どれが良いっては言えないのは当然だから難しい問題かもしれないけど。

ちなみに自分は新たにアルゴリズム考えるのめんどいからCPAN辺りからモジュール
拾ってきて組み込んだなぁ…。
489名無しさん@お腹いっぱい。:02/01/31 10:46 ID:???
あれ?このコードが動かないんだけど、もしかしてオレ何か勘違いしてる?

#!/usr/bin/perl
use 5.6.1;
use FreezeThaw 0.41, qw(freeze thaw);
my $a = thaw freeze ['Anon_Array_ref' ];
print ref($a) ? "ok\n" : "not ok\n";
__END__
490名無しさん@お腹いっぱい。:02/01/31 10:47 ID:HryKlcft
age忘れ。
動かないっつか「okにならない」ね。
491名無しさん@お腹いっぱい。:02/01/31 10:57 ID:???
$a がリファレンスじゃないからじゃねーの?
492名無しさん@お腹いっぱい。:02/01/31 11:06 ID:???
>>491 そりゃちょっと教え方が不親切じゃねーの。
>>489 thaw の返値は配列なので、リストコンテキストで受ける必要あり。
493489:02/01/31 11:20 ID:???
ガーソ…そんな単純なことだったとは…。
>>491 >>492
ありがとう。
494名無しさん@お腹いっぱい。:02/01/31 12:25 ID:???
>>492
スマソ。俺はFreezeThawとか言うモジュール知らんから
>>491程度しか分からんかったんだよぅ。
495名無しさん@お腹いっぱい。:02/01/31 12:40 ID:cIzQvI9F
>>488
ご返答ありがとうございます。
そうですね、どっかでモジュール拾ってくるのが得策かも。

ちょっと昨日帰りの電車で考えたのは、文字列をランダム
に配置しなおして、その位置情報をキーとして解読する方法。

つまり、文字列「abcde」を「53124」というキーで再配置する。
暗号化された結果は「ecabd」になる。解読はそれをキーの位
置情報で並べ替える。16進数使えば16文字まで可能だし。たぶ
ん簡単そうだ。

まぁ、わかるヒトがみれば3秒で解読できるだろうけど(ワ)、
この辺が簡単でいいかな。
496perl-5.6.1:02/02/01 14:19 ID:SRe8SKGM
#!/usr/bin/perl -w
use strict;

open(FILE, "filename");
foreach (<FILE>) {
  print "$.: $_";
}
close(FILE);

これを実行したら、filenameの行数が40行だとすると、
$.が全部40になるんですが。
497名無しさん@お腹いっぱい。:02/02/01 14:53 ID:???
>>496
while(<FILE>){

foreach はループに入る前に
リストを全部用意する(この場合ファイルを全部読み込む)からね。
498名無しさん@お腹いっぱい。:02/02/02 05:14 ID:uZ4d4EH7
ファイルの末にデータを付け足す事はできる。
じゃぁ、データを削る事はできるか?ゴメンねむいんだ。
初心者が生意気にも掲示板作成中。いいやねよう。
おやすみ。
499名無しさん@お腹いっぱい。:02/02/02 08:03 ID:Z9fivj2K
htmlソースから、<htmlタグ>ほげ</htmlタグ>を抽出したい(perl)と思ってます。
で、こういう話題(途中改行にも対応とか云々・・・)をあつかったサイトが、有名どころの
どこかにあった気がするのですが・・・
ご存じないですか?
500名無しさん@お腹いっぱい。:02/02/02 09:01 ID:fydzz3EG
あのPerlスクリプトを書くのに文字コードはEUCが良いといわれてますが
EUCのメリットって文字化け対策(\回避)がいらないだけですか?
その他にS-jisよりも優れてる部分ってあります?
501名無しさん@お腹いっぱい。:02/02/02 09:18 ID:???
>>500
それだけあれば十分だろ。
502名無しさん@お腹いっぱい。:02/02/02 09:22 ID:H8DUG7wU
>>499
ここかな?
http://www.din.or.jp/~ohzaki/perl.htm

>>500 も行ってみると役立つと思うよ。
503500:02/02/02 14:15 ID:???
なるほど。ありがとうございました。
504名無しさん@お腹いっぱい。:02/02/02 15:41 ID:???
指定したIPアドレス以外は別ページへ飛ばすにはどうしたらいいですか?
505504:02/02/02 19:46 ID:???
早く教えろよ
506名無しさん@お腹いっぱい。:02/02/02 19:54 ID:???
if(指定したIPアドレス以外){
別ページに飛ばす
}
507名無しさん@お腹いっぱい。:02/02/02 19:55 ID:???
>505
お前が常時監視して手動で誘導しろよ。
508  :02/02/03 00:25 ID:1JKHBAhE
a.pl
として、
#!/usr/local/bin/perl
print "sine";
と書きました。そして、サーバーにアップして、
chmod 755 a.pl
で、絶対パスで、実行した所
[homepage@sv ~]# /home/homepage/a.pl
/home/homepage/a.pl: Command not found.
と出てきます。
ファイルは、あるのに、コマンドは無い...って
どうしてですか?
509名無しさん@お腹いっぱい。:02/02/03 00:28 ID:+IXT+7Wc
>508
/usr/local/bin/perl -V
とかやってみれ。
510504:02/02/03 00:29 ID:???
>506
プ
早く教えろよ
わかるやついないのか?
511504:02/02/03 00:30 ID:???
>507 
はぁ・・・・低脳。
いいから早く教えろよ
512  :02/02/03 00:30 ID:1JKHBAhE
こんなに、長いのが出てきました。
Summary of my perl5 (5.0 patchlevel 5 subversion 3) configuration:
Platform:
osname=linux, osvers=2.2.18-1.6, archname=i386-linux
uname='linux dhcp-115.jp.tlan 2.2.18-1.6 #1 tue feb 13 04:54:12 utc 2001 i686 unknown '
hint=recommended, useposix=true, d_sigaction=define
usethreads=undef useperlio=undef d_sfio=undef
Compiler:
cc='cc', optimize='-O2', gccversion=2.95.2.1 19991024 (release)
cppflags='-Dbool=char -DHAS_BOOL'
ccflags ='-Dbool=char -DHAS_BOOL'
stdchar='char', d_stdstdio=undef, usevfork=false
intsize=4, longsize=4, ptrsize=4, doublesize=8
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
alignbytes=4, usemymalloc=n, prototype=define
Linker and Libraries:
ld='cc', ldflags =' -L/usr/local/lib'
libpth=/usr/local/lib /lib /usr/lib
libs=-lnsl -lndbm -lgdbm -ldb -ldl -lm -lc -lposix -lcrypt
libc=, so=so, useshrplib=false, libperl=libperl.a
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic'
cccdlflags='-fpic', lddlflags='-shared -L/usr/local/lib'


Characteristics of this binary (from libperl):
Built under linux
Compiled at Feb 16 2001 06:49:02
@INC:
/usr/lib/perl5/5.00503/i386-linux
/usr/lib/perl5/5.00503
/usr/lib/perl5/site_perl/5.005/i386-linux
/usr/lib/perl5/site_perl/5.005
513名無しさん@お腹いっぱい。:02/02/03 00:32 ID:+IXT+7Wc
>512
そしたら、
perl /home/homepage/a.pl
ってやってみそ。
514  :02/02/03 00:35 ID:1JKHBAhE
キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
動きました!!!!
何だったのでしょうか?
515名無しさん@お腹いっぱい。:02/02/03 03:56 ID:5Ne5ycjd
PerlでファイルアップロードCGIを作りたいのですが、経験がないのでセキュリティなどで不安です。
参考になるフリー配布のスクリプトがあったら教えてください。
516名無しさん@お腹いっぱい。:02/02/03 04:01 ID:+IXT+7Wc
517名無しさん@お腹いっぱい。:02/02/03 04:06 ID:+IXT+7Wc
ERROR:スレッド立てすぎです。。。

ホストntttkyo050192.adsl.ppp.infoweb.ne.jp
WebProg板のみんなで作ろうよ!
名前: 名無しさん@お腹いっぱい。
E-mail: age
内容:
まず、WebProg板謹製アップローダーとか、どうでしょ?
518名無しさん@お腹いっぱい。:02/02/03 04:35 ID:1D0LvUGL
>>517
よかったら,このスレ使ってください。
学習用にCGI書くスレです。

【CGI】合同開発室
http://pc.2ch.net/test/read.cgi/php/1001950501/l50
519あぼーん:あぼーん
あぼーん
520名無しさん@お腹いっぱい。:02/02/03 12:48 ID:???
>>476
おそらく、Perl5の""内での@の解釈が変わったことによるものだと思う。
出力されないといっているほうは、そのまま"@LINE"という文字列が
出力されいないか? もしそうだとしたら、Perlがversionが古い。

で、print "@LINES"; の代用として foreach $temp (@LINES){ print $temp }
で問題ないのなら、素直に print @LINES; としとけ。
521名無しさん@お腹いっぱい。:02/02/03 13:48 ID:???
@LINES @Lines どっちだよ。
522名無しさん@お腹いっぱい。:02/02/04 12:16 ID:6nIPvsGB
こんにちわ、perlの事で他スレから誘導されてきました
マルチポストですが質問させてください。
以下のスクリプトですが

 #! /usr/bin/perl  # お約束
 # 私のスクリプトそのままです(編集はしてません)
 $TMP = 10 ** 10;  # $TMP に10の10乗を代入
 $X = 10;  # $X に10を代入
 while ($TMP)  # $TMPが0になるまで繰り返し処理
  {$A = --$TMP % $X;  # $TMPの値を-1し、$Xの剰余を$Aに代入
  print "$A $TMP \n";}# 処置した値を画面に表示


上記のスクリプトですが、表示される$Aの値が変化しません
5 999999999
5 999999998
5 999999997 ......

$Xの値が1だと$Aは0で固定
$Xの値が2だと$Aは1で固定
$Xの値が3だと$Aは0で固定
$Xの値が4だと$Aは3で固定
$Xの値が5だと$Aは0で固定
$Xの値が6だと$Aは3で固定
$Xの値が7だと$Aは3で固定
$Xの値が8だと$Aは7で固定
$Xの値が9だと$Aは3で固定

私の知識が正しければ、$TMPの値を$Xで割った余りの数値が表示され
1行ごとに値が変更されると思うのですが。。。

どこか間違っているのでしょうか
識者の皆様、ご回答をお願いします
523名無しさん@お腹いっぱい。:02/02/04 12:40 ID:???
>522
10**10じゃなくて10**3から試してミソ。
524522:02/02/04 13:18 ID:6nIPvsGB
>>523

返答ありがとうございます
早速10**3で試してみたところ、期待通りの動作が確認できました
(10**9まで、動作が確認できました)
どうやら値が大きすぎたようです
でも、$TMPの数値は整数で表示されているのに・・謎だ。

助かりました
525カリハン:02/02/04 15:00 ID:uKBk3jL4
FLASH板住人用アップローダを作ったのですが、頻繁に503がでてしまい困っています。
http://www.th-ladybird.co.jp/flash/

回避方法として、ftpでUPするものを作ろうと思うのですが、それって可能でしょうか?
当方UNIXのコマンドほとんどわかりません。

上記の製作可否や、503の回避方法、それらの教材サイト、教本、等ありましたら教えてください。
526名無しさん@お腹いっぱい。:02/02/04 16:14 ID:???
503 Service Unavailable なんてあまり見ないな。
ソースを見なきゃ何も言えないね。
527カリハン:02/02/04 16:20 ID:uKBk3jL4
普通にpostからうけとって、エンコードして、エラーつけてるだけです。
http://www.th-ladybird.co.jp/flash/upload.txt

528名無しさん@お腹いっぱい。:02/02/04 16:51 ID:???
>>525
もう少し症状を詳しく書いてくれると助かるんだが・・・
Unavailableはどんな時に出るの?
適当に解釈すると、ファイルサイズが大きくなるとUL途中で
コネクションが切れると言う事かな
だとしたら、99%サーバサイドの問題なのでどうしようも無いんじゃ
ないかな。
後の1%は説明が面倒なので省略 w

で、FTPならanonyで開放する事になるんだけど、作ると言うか開放して
おしまいなので、何の知識も要らないでしょ
ただ、今時そんな危ない所は誰も使わないと思うよ
最近はExecutableなflashが問題になってたりするし、怖くて見れないよ
529名無しさん@お腹いっぱい。:02/02/04 16:54 ID:???
あ、FTPってWEBでULした後にスクリプトからFTPしたいと言う事かなあ
だったら全く意味が無い。
HTTPDがリクエストを処理をする段階でヘバってるんだから
試しに何秒位で死ぬか実験してみればよく解るよ
530名無しさん@お腹いっぱい。:02/02/04 17:03 ID:???
>>527
503で見られなかった。
サーバーの負荷が高いだけじゃない?
531カリハン:02/02/04 17:12 ID:uKBk3jL4
症状は、
UP容量は5,000,000バイトでしばってあるんですが、とりあえずテストでは、UP途中でオチたことはないです。
UPはできるのですが、ファイルUP後ほぼ必ず503がでてしまいます。

チャット設置なんかを禁止しているので、サーバが弱いのは間違いないのですが、なんか回避できないかなと。
ここのレスはチェックしつつ、>>529を勉強してみます。

ありがとうございました。
532カリハン:02/02/04 17:14 ID:???
ちなみに、ここからかりてます。
SAKURA.AD.JP // SAKURA INTERNET
http://www.sakura.ad.jp/
533名無しさん@お腹いっぱい。:02/02/04 17:24 ID:???
>>527
なんつーか、いかにも"素人が書きました"っつー感じのスクリプトだな。
534カリハン:02/02/04 17:32 ID:???
プログラムって物自体これが始めてのまぁ素人ですから。
大目に見てください。
535カリハン:02/02/04 17:39 ID:???
すみません、もしかして、オレ勘違いしてますか。
初心者スレじゃなくて、素人スレ探して聞くべき質問ですか。
536名無しさん@お腹いっぱい。:02/02/04 18:04 ID:???
>527にアクセスした時にも1回503が出た。
アクセス数か転送量かどちらかが一定以上になるとストップかけられるとかは?
鯖業者に聞いた方が早くない?
537カリハン:02/02/04 18:06 ID:???
>>536
ありがとう。そうしてみます。
538Name_Not_Found:02/02/04 18:48 ID:???
あのー、超初心者の質問なので気がひけるのですが、
ジオシティーにHPをなんとか作ることができたのですが、
掲示板を設置したいなとおもって、フリーソフトのBBSをダウンロードして
使おうとしたのですが、Perlへのパスがわからなくて、行き詰まっています。
ジオシティーのパスを知っているもしくは
どこに行けばわかるか知ってらっしゃる方、よろしければ教えていただけませんでしょうか。
539名無しさん@お腹いっぱい。:02/02/04 18:53 ID:???
スレ違いだよ
GeocitiesってPerl使えないんじゃないの?
FAQ探して読んでみるべし
「CGIは使えますか?」とか有るから
540Name_Not_Found:02/02/04 19:13 ID:???
>539 
ありがとうございます。
そうなんですか、ちょっとがっかりです。
間違ってスレに書き込んでしまってすみませんでした。
541名無しさん@お腹いっぱい。:02/02/04 21:10 ID:???
>>537
sakuraはサーバ負荷が高くなると、そのエラーを返します。
業者に聞くまでもなくFAQに載ってますよ。
回避策はまぁ、負荷を小さくするしか。

そもそも共用鯖で503が出るほど使うなゴルァ。
1日辺り数万アクセス、ギガ単位の転送量あるはずだぞ。
503だとおそらく転送量の方だと思う。ここら辺り見てくださいな。
http://xxxxx.sakura.ne.jp/log.html xxxxxxは自分所のサーバ名
http://www.sakura.ad.jp/support/web/errmsg/err-web.html
542perlのバージョン:02/02/04 22:48 ID:4hvyQ2bt
perlのCGIからperlのバージョンって調べられるっけ?
543名無しさん@お腹いっぱい。:02/02/04 22:56 ID:???
open(PIPE,'/usr/local/bin/perl -v |');
print <PIPE>;
close(PIPE);
544名無しさん@お腹いっぱい。:02/02/04 22:59 ID:???
$]
545perlのバージョン:02/02/04 23:16 ID:4hvyQ2bt
>>543
すいません。いっぱい出てきました。
546名無しさん@お腹いっぱい。:02/02/04 23:17 ID:???
print `/path/to/perl -v`;
547名無しさん@お腹いっぱい。:02/02/04 23:18 ID:???
>>545
さぁ!そこで正規表現の出番だ!

ッテ言うか>>544さんを試してください。。。
548_gzip:02/02/04 23:22 ID:???
$]
ないし
perl -V:version
549perlのバージョン:02/02/04 23:27 ID:4hvyQ2bt
>>544
$]は、書き間違いかと思ってしまった・・
だんだん自分が嫌になってきた(鬱
550名無しさん@お腹いっぱい。:02/02/04 23:31 ID:???
ガムバレーw
551名無しさん@お腹いっぱい。:02/02/05 01:36 ID:bVJSiotc
他人のHPに張ってあるリンク数を自動的に調べて書き出すスクリプト
を教えてもらえないでしょうか?

Aさんのページは○個のリンクが張ってあります。
Bさんのページは○個のリンクが張ってあります。

という具合にしたいのですが。。。
552名無しさん@お腹いっぱい。:02/02/05 02:10 ID:???
以前Web制作で聞いてらっしゃいましたね。
553名無しさん@お腹いっぱい。:02/02/05 02:51 ID:hit8P6YF
$linknum=scalar /(<a)/sgi;
554名無しさん@お腹いっぱい。:02/02/05 03:25 ID:fmBbp0lc
Tスイッチを付けると @INCの価が変わるんですが( .がなくなる)
そんなもんなんですか?
5.005_03です。
555名無しさん@お腹いっぱい。:02/02/05 03:36 ID:???
そんなもんですと言えば良いのか? w
カレントをコマンドサーチパスに加える事の危険性と
意味は同じだと思うが。
556554:02/02/05 04:17 ID:???
>555
Tスイッチについて調べても、 @INCについて触れているものがなかったので
@INCは自分の環境でしか変わらないのかなぁ思い質問しました。

> カレントをコマンドサーチパスに加える事の危険性
は知らなかったのですが、
カレントディレクトリにスクリプト内で使われているのと同名のファイルを
他人に勝手に置かれた時に、意図しない動作をする可能性があるから危険
ということですか?
557カリハン:02/02/05 10:14 ID:???
>>541
それがですね。スナックのHPと上記アップローダだけおいてるんですが、
HPのほうは1日多くても20アクセス(内半分は従業員)ほどなんです。
558名無しさん@お腹いっぱい。:02/02/05 17:55 ID:???
>>556
>カレントディレクトリにスクリプト内で使われているのと同名のファイルを
>他人に勝手に置かれた時に、意図しない動作をする可能性があるから危険

その通り。

ついでに-T付けると$ENV{PERL5LIB}とかも無効になるから。
559名無しさん@お腹いっぱい。:02/02/05 20:07 ID:kMSeXYwX
掲示板を作りたいのですが、
書き込みフォームは別に作る必要があるのですが
ログをとりたいのですが、
これだと入力したのを出力するだけの事しか出来ません。
誰か改造を・・・。
#!/usr/local/bin/perl

#データの受け取り
read( STDIN, $query,$ENV{ 'CONTENT_LENGTH' } );

@in_params = split( /&/, $query );
foreach $in_param ( @in_params ) {
( $key,$value ) = split( /=/,$in_param );
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-f0-9])/pack('C',hex($1) )/ge;
$param{ $key } = $value;
}

#結果の出力
print "Content-type: text/html\n\n";
print $param{ 'name' };
print "<br>";
print $param{ 'gimon' };
print "<br>";
exit;
560名無しさん@お腹いっぱい。:02/02/05 20:11 ID:???
>>559
意味がわからない。
説明もプログラムの意図も。

あ、ファイル!ファイル!

open

print

<>

close

など勉強して。
561名無しさん@お腹いっぱい。:02/02/05 21:20 ID:???
その前に日本語を勉強して。
562名無しさん@お腹いっぱい。:02/02/05 22:05 ID:???
日本語を勉強し終わったら常識を勉強して。
563名無しさん@お腹いっぱい。:02/02/05 22:11 ID:Zu+hD/6k
ゲームを作ろうとして頑張ってるんですが、
まず最初に、Login画面を出して、
個人の認証をおこないます。

その次に、その認証した人用に、常にHTMLを反映させたいのですが、
どうすればいいでしょうか?

たとえば、モナーという人がログインしたら、
常に、モナーという人を意識したページにしたいんですが。

誰か、教えてくださいませ。
564名無しさん@お腹いっぱい。:02/02/05 22:15 ID:???
>>563
cokkieで良いのかな?
$ENV{"HTTP_COOKIES"};
書き込み方は勉強して。

もしくは生成するページのリンクを

/path/a.cgi?name=モナー

として常にモナー用のデータを出力するようにするとか。
565563:02/02/05 22:23 ID:Zu+hD/6k
>>564
そうなんですよね。
クッキーでやるのがベストかな。

>もしくは生成するページのリンクを
>
>/path/a.cgi?name=モナー
>
>として常にモナー用のデータを出力するようにするとか。
これだと、誰かが不正に利用してしまいそうで、
(まぁ、パスワードも常に出力するというのもありだけど)
厳しいかなぁと。
他のログインを利用してるページを見ると、
この方法は使ってないようですし。
566名無しさん@お腹いっぱい。:02/02/05 22:33 ID:???
もうないけどrobotmailっ言うwebメールがこの方式。
もちろん暗号化+httpsだったけど。
567563:02/02/05 22:40 ID:Zu+hD/6k
ふむふむ。

なんか、もっとスマートな方法はないでしょうか?
クッキーも拒否してる人がいないとは限らないし。

ヘルプミ〜
568名無しさん@お腹いっぱい。:02/02/05 22:42 ID:???
COOKIEの時点でガリガリにスマート。
569名無しさん@お腹いっぱい。:02/02/05 22:43 ID:???
そこまでする奴は君のサービスも迷惑と感じる人。
570563:02/02/05 22:46 ID:Zu+hD/6k
やはり、クッキーですか。

クッキー以外になにかあればと思ったのですが。
教えてくれて、どうもありがとうございました。
571セキュリティホールについて:02/02/05 23:19 ID:Iem+OJzp
大変御無沙汰しています。教えていただきたいことがあります。
WEBはセミプロ程度、WEB言語系は素人若干書き換え程度です。
現在、ボランティア系の団体で複数の応募フォーム、SSLPGPクレジットカード引き落としなどを
使ったホームページを担当しています。
若干コーディングできる方から、簡易計算自動入力、曜日自動入力を強く勧められて以下の
スクリプトを頂きました。
曜日自動入力については、動作して入力欄がブランクでなく選択なので、安全上問題ない気がしますが、
自動計算に関して、動作もおかしく、それよりも入力欄ブランクで、タグその他
記述された場合、セキュリティ面でかなり不安なのですが、いかがでしょうか。
私個人としては、買物カゴ式の別CGIをあてる方が良いのではないかと思うのですが、
どうか教えて下さい。宜しく。 (長くて乗らないので一部除く)

<!-- saved from url=(0022)http://internet.e-mail -->
<HTML>
<HEAD><TITLE>簡単な入力検査の例</TITLE>
</HEAD>
<BODY>
<H3>簡単な例</H3><HR>
<FORM NAME="ValidForm">
5/18
<INPUT TYPE="TEXT" NAME="T0" SIZE="3">

<p>5/19
<input type="text" name="T1" size="3">
人</p>
<p>合計
<input type="text" name="T2" size="3">人</p>
<p>申込金(人数×2000円)<input type="text" name="T3" size="20">円</p>
<p>入金日 2002年<select size="1" name="D1">
<option value="1">1</option>
</select>月<select size="1" name="D2">
<option value="1">1</option>
</select>日<input type="text" name="T4" size="3">曜日</p>
<p> </p>
</FORM>
</BODY>
</HTML>


572Name_Not_Found:02/02/05 23:25 ID:IJ+Ly9Q8
すごく初歩的なことで壁に当たっています。
相対パスの記入の仕方で
../みたいなのってもっと..が小さくないといけないと思うのですが
どうやって打てばいいでしょうか?
よろしくお願いします。
573名無しさん@お腹いっぱい。:02/02/05 23:29 ID:Zu+hD/6k
>>571
あなたの質問に答えてあげたいけれど、
微妙に日本語の意味がわからないです。

でも、タグが心配なのであれば、
Perlの正規表現を使って除去すればいいのではないでしょうか?
574名無しさん@お腹いっぱい。:02/02/05 23:29 ID:???
>>571
情報が少ないのでなんとも言えません。
HTML・JavaScriptの話なら板違いです。

>>572
>../みたいなのってもっと..が小さくないといけないと思うのですが
意味がわかりません。
575名無しさん@お腹いっぱい。:02/02/05 23:32 ID:???
>>572
フォントの問題だと思う
等幅とそうじゃないのだと点の大きさちがうから
どっちでもよい
576こぐぅ:02/02/06 00:00 ID:1lbXw0DS
2チャンの板みたいな掲示板が作りたいのですが
根本的なことから分かりません。
誰か無知な私を助けてください。
577名無しさん@お腹いっぱい。:02/02/06 00:06 ID:???
簡単に言えば掲示板の掲示板。
ほら、スレッドって一般的なサイトで一般的にある掲示板形式じゃん。
578名無しさん@お腹いっぱい。:02/02/06 00:08 ID:???
579名無しさん@お腹いっぱい。:02/02/06 00:12 ID:???
>578
それ Cじゃん
580名無しさん@お腹いっぱい。:02/02/06 06:12 ID:???
>>579

ほぼそのままで効率の悪いperlプログラムに変換できるでしょ。Cなら。
581名無しさん@お腹いっぱい。:02/02/06 09:17 ID:???
変数って普通に使ってると、
グローバル変数になりますが、
myとか使って、スコープを設定すると、
メモリーの使用量に変化は出ますか?

なるべく、my使ったほうがいいでしょうか?
582名無しさん@お腹いっぱい。:02/02/06 09:27 ID:???
メモリは同じ変数を使いまわす方が少なくすむはず。
しかしそれ以前の問題で、myを使った方がいいと俺は思うね。
583 :02/02/06 10:47 ID:???
初心者過ぎて話にならないと仰らずに
入門者のおいらにも教えて下さいな。
JAVAやクッキーがオフだと別のページに
飛ばしてしまう様なcgiってありますか?
これってcgiを使わなくてもできますか?

584名無しさん@お腹いっぱい。:02/02/06 11:04 ID:???
>>583
マルチ氏ね
585名無しさん@お腹いっぱい。:02/02/06 11:08 ID:???
http://pc.2ch.net/test/read.cgi/php/1009331505/547
  547 名前: :02/02/06 10:39 ID:PbQtpnzC
  JAVAやクッキーがオフだと別のページに
  飛ばしてしまう様なcgiってありますか?
  これってcgiを使わなくてもできますか?
  初心者過ぎて話にならないと仰らずに
  入門者のおいらにも教えて下さいな。

http://pc.2ch.net/test/read.cgi/php/1003132904/877
  877 名前: :02/02/06 10:34 ID:PbQtpnzC
  JAVAやクッキーがオフだと別のページに
  飛ばしてしまう様なcgiってありますか?
  これってcgiを使わなくてもできますか?
  初心者過ぎて話にならないと仰らずに
  入門者のおいらにも教えて下さいな。
586名無しさん@お腹いっぱい。:02/02/06 15:22 ID:JVnz6bAn
Perl初心者です。
文字列前後のホワイトスペースの取り除き方を教えて下さい。
PHPだと、trim関数でできてしまいます。
例:$REPORT = trim($REPORT);

Perlでの方法を教えて下さい。
文字列の中の改行は残したいです。
よろしくお願いします。
587名無しさん@お腹いっぱい。:02/02/06 15:23 ID:ovT8yWtO
$REPORT =~ s/^\s//;
588名無しさん@お腹いっぱい。:02/02/06 15:57 ID:???
for($REPORT){
s/^\s+//;
s/\s+$//;
}
589名無しさん@お腹いっぱい。:02/02/06 16:11 ID:JVnz6bAn
>587さん
>588さん
出来ました。
ありがとうございました。
またよろしくお願いします。
590kopt:02/02/06 18:11 ID:BylxzAgo
すみませんGoogleで探せといわれると思いますが、
探したものは説明がないので参考にならないんです。
というわけで,質問させてください
ファイルアップロードスクリプトでファイルの制限(GIFとかJpegとか)させたいのですが、
どのようにすればいいかヒントをください。
591名無しさん@お腹いっぱい。:02/02/06 18:22 ID:???
>>590
スクリプトがないから何とも言えないけど
指定したファイルの拡張子以外のアップロードできないようにすれば?
そうするのはどうするのってのはスレ違いね。
592名無しさん@お腹いっぱい。:02/02/06 19:16 ID:???
>590
精度低いけど,ファイルのContent-Type見るとか。
593kopt:02/02/06 19:17 ID:BylxzAgo
>>591
スレ違いですか? でも、このスレって初心者のスレでしょ?駄目ですかねぇ
どのスレ行っても
ここで聞くなとかいわるんだろうなぁ
594名無しさん@お腹いっぱい。:02/02/06 19:24 ID:???
>593
とりあえず>>1を読んで、1〜3をしっかりしよう。
そして君は「ヒントが欲しい」と言った。
>591はヒントを教えた。
それでいいだろ。
595名無しさん@お腹いっぱい。:02/02/06 19:25 ID:???
ウザーウザーウザー
スレ違いって所しか読んでないの?

>>591 >指定したファイルの拡張子以外のアップロードできないようにすれば?
>>590 >精度低いけど,ファイルのContent-Type見るとか。
この二つの提案に食いつく気はないの?

スクリプト改造工房 Part4
http://pc.2ch.net/test/read.cgi/php/1012839651/l50
スクリプトのソース持参して上記スレに移動しろ
596名無しさん@お腹いっぱい。:02/02/06 19:26 ID:???
>>590ってのは>>592の間違いね
597590:02/02/06 20:17 ID:BylxzAgo
>>595
うーん,もちろんそれは候補にあるんです。
それをかけないんですよね。
まぁ、こんな厨房じゃ書くなって事ですね。

>>594
ヒントを教えてもらったのは確かですので感謝しマース

598ファイルロック:02/02/06 21:15 ID:6W+ZcRg7
たぶん、もう何度も話題にのぼってると想うんですが。。
今一どうすりゃ安心なのかわからないファイルロック。
掲示板のログファイルの保護の為にファイルロックする場合、
書き込む時に

open(IN, ">>$file");
flock(IN,2);
print IN "$data\n";
close(IN);

この程度で、十分役割を果たすものでしょうか?
ログファイルの読み出しの時にもロックってかけます?

またこのflockの汎用性はどの程度ですか、NTやらは抜かして
599名無しさん@お腹いっぱい。:02/02/06 21:33 ID:???
掲示版なるものを書いた事が無いんで良く分からんのだけど
結局cgiのファイルロックってのは、行き着く所は
システムコールのアトミック性なんだな。
で、上の書き方だと、open と flockの間に時間的なスキマが絶対有るだろ?
もしその間に100人が同じファイルをopenしちゃったら、
ファイルポインタの加減で死ぬ可能性が有るってこった

それがどれ位掲示版で危ない事なのかは、漏れには分からない。
600名無しさん@お腹いっぱい。:02/02/06 21:40 ID:???
何か変な説明だな
例えばファイルが100バイトだとするだろ?
で、openしてflockする前に他のプロセスが同じファイルを開くだろ?
そうすると、そのプロセスは全てファイルポインタを100バイトに
あわせて、そこから追記し始めると言う訳
601ファイルロック:02/02/06 21:41 ID:6W+ZcRg7
>>599
なるほど、氏ぬ可能性がある・・と。
でも、まぁ絶対は無いモンみたいだからこれでいいかなぁ
602名無しさん@お腹いっぱい。:02/02/06 22:11 ID:???
だいぶ遅スレ。

gifの判別はヘッダを見るべし!

gif89aとか書いてある。
jpgはダンプしたこと無し。
603名無しさん@お腹いっぱい。:02/02/06 22:16 ID:???
>602
PNGや JPGもヘッダでわかるはず。
604名無しさん@お腹いっぱい。:02/02/06 23:09 ID:???
598じゃないが
>>600 ってことは、書き込む時に
sysseek HANDLE, 0, 2;
とすればいいのだろうか?
605名無しさん@お腹いっぱい。:02/02/06 23:34 ID:???
それじゃappendにならないじゃん
606名無しさん@お腹いっぱい。:02/02/06 23:47 ID:+a0hOzna
お願いします。
$_ =~ s/ー/あ/g;
ってやったらエラー出ます。
$_ =~ s/!/あ/g;
だったら出ません。
どうしてですか?
漢字コード変換したりしていろいろやってみたんですが、うまくいきません。
よろしくお願いします。
607605:02/02/06 23:48 ID:???
ああ、ごめんごめんやっぱり中途半端だった (笑
ただ>604氏の方法じゃ上手く行かないと思うよ
ファイルポインタはプロセス間で共有されてる訳じゃ無いからね
追記モードの時は SEEK_SET == SEEK_END になってるだけで
上書きするのと何ら変わらない筈だから
後は、書き込む度にwriteの戻り値分SEEK_ENDを進めているだけ
だから、0,SEEK_END とすると他のプロセスが書き込んだ分は無視されてしまうよ

WINは知らないけど、大体同じ様なもんだと思う
(しかし下手な説明だ・・・)
608605:02/02/06 23:49 ID:???
s/\Qー\E/あ/g;

で如何? 後はquotemetaとかを検索
609名無しさん@お腹いっぱい。:02/02/06 23:53 ID:+a0hOzna
>>608
ありがとうございます!
1行目は意味不明でしたが、quotemetaで検索したらいろいろ出てきました。
調べてみます。
610ブクログラマー ◆eLx2NxJ6 :02/02/06 23:56 ID:6/WQt+6L
はじめまして。質問させていただいてよろしいでしょうか。

現在 僕は、CGIでメールを送信するページを作ってるんですが
ローカルで、sendmailを実行することはできますか?
611名無しさん@お腹いっぱい。:02/02/07 00:00 ID:???
sendmailがあればいくらでも。
612ブクログラマー ◆eLx2NxJ6 :02/02/07 00:04 ID:4GVSBAfQ
>>611

Apacheで確認して、その後鯖にうpするやり方で、作ってるんですが
Apacheにはsendmailがついてないようです。
DLすればよろしいんですか?
613名無しさん@お腹いっぱい。:02/02/07 00:08 ID:???
OSに依存しそうな問題なのだから自分のOS位書くのが礼儀ではないでしょうか?

後、うpとか言う人信用できないです。
自分のアドバイスでメールばらまきCGI組まれても困りますから。

新しい人をお待ち下さい。
>>613

礼儀知らずで、ごめんなさい。
うpっていう言葉も2chだから使ってしまいました。

使用しているOSはWinXP(Home)です。
PC上の仮想サーバー(Apache)で、sendmailの機能を使いたい、と考えています。

メールをばらまく行為とかは、考えていません。
その誓いとして、自分のメルアドとふしあなを書いておきます。
無礼をお許し下さい。
615age派:02/02/07 00:15 ID:???
鯖がhi-hoです。
それでCGIゲームを置きたくて
とりあえずApacheで動作確認したFFAとEndlessBattleを置いてみましたが
FFAは呼び出しの時点でスクリプトエラー
EBは呼び出しはできたもののどれかひとつでもリンク押すとスクリプトエラー
僕の力じゃどうしようもありません。
何か方法は無いでしょうか?
616age派:02/02/07 00:18 ID:???
あ、スレ違いだ!?
すいません、出直してきます(汗
617名無しさん@お腹いっぱい。:02/02/07 00:18 ID:???
サーバの設定とスクリプトの設定を一致させる。
できない、わからないならまだ時期ではない。あきらめる。
618age派:02/02/07 00:27 ID:???
そうですか、じゃあもう少し調べてみて駄目なら諦めます。
ありがとうございました。
あと、スレ違いすいません(汗
619名無しさん@お腹いっぱい。:02/02/07 00:32 ID:???
1行目のperlのパスに気を付けて。
620名無しさん@お腹いっぱい。:02/02/07 01:13 ID:???
>>618 この辺引っ掛かってない?
2.使えるプログラム言語は?
Perlのバージョンは4.036です。
http://home.hi-ho.ne.jp/home/faq/service/rweb/rweb_a2.html
621名無しさん@お腹いっぱい。:02/02/07 02:03 ID:???
喧嘩売ってるとしか思えんな  (w
622age派:02/02/07 06:23 ID:???
すいません(汗)
あの後戻っていろいろやってたらそのまま寝てしまって・・・。
Perlのバージョンはドメインがmaxなので5.6らしいです。
それでパスもやったんですが結局無駄でした(汗
623名無しさん@お腹いっぱい。:02/02/07 06:45 ID:???
Kcatch.pm 使ってみ

http://www.kawa.net/works/perl/catch/news.html
スクリプトの冒頭で Content-type 出しておけば大体のエラーは
ブラウザでチェック出来るから



624age派:02/02/07 06:46 ID:???
でも5.6でも動かないんだからやっぱ4,036なのかな・・・。
仕方が無い・・・厨房なんで学校いってきます。
本当にすいませんでした・・・。
625名無しさん@お腹いっぱい。:02/02/07 08:08 ID:???
#! /path/perl

print "CONTENT-TYPE:text/html\r\n\r\n".$[;

バージョンチェック。
626まゆ:02/02/07 09:37 ID:BzGq5BfM
Perlで画像アップロード掲示板を作成していますが、ユーザから
「アップされた画像を任意の大きさに変更したい」と言われましたが
そのようなことができるでしょうか?
ローカルからサーバにアップされた画像をたとえば250×200に変更するとか、
サイズを50Kに変更するといったようなことはできるのでしょうか?
どなたかご存じの方がいましたら教えてください。
また、そんなことはできないよということでも良いのでどなたか教えてください。
627名無しさん@お腹いっぱい。:02/02/07 13:11 ID:???
2ちゃんねるで・・・/test/read.cgi/板名/スレ番号/
という形式でcgiが使えているでしょう。
これはどうやっているのですか?
628初心者:02/02/07 13:49 ID:???
>>626
要するにgifなりjpgなりを加工したい訳だよね。
ファイルサイズを変えたいと言うことは。

そりゃぁPerlには無理なんじゃないかなぁとか思ってみる。
それとも、そんなモジュールとかあったりするんだろうか。。。

と、検索。
こんなの発見。

GDモジュール(日本語チョウ訳)
http://member.nifty.ne.jp/hippo2000/perltips/gdmemo.htm より。

getBounds
GD::Image::getBounds( ) オブジェクト・メソッド
このメソッドはそのイメージの幅と高さの2つ要素を持つリストを返します。
取得することはできますが、作成したらイメージの大きさを変更することができません。

やっぱり出来ないのかな?
629初心者:02/02/07 13:53 ID:???
あった。

copyResized
GD::Image::copyResized(sourceImage,dstX,dstY,srcX,srcY,destW,destH,srcW,srcH) オブジェクト・メソッド
copyと似ていますが、コピー元と出力先に違う大きさを指定することができます。
コピー元と出力先の大きさは、それぞれ (srcW,srcH) と (destW,destH) で指定します。
copyResized()は指定された大きさに合わせてイメージを拡大、縮小をおこないます。

例:

$myImage = new GD::Image(100,100);
... いろんな描画 ...
$srcImage = new GD::Image(50,50);
... いろんな描画 ...
# 25x25 ピクセルの領域を $srcImage から
# $myImageの(10,10)に大きくしてコピーします。
$myImage->copyResized($srcImage,10,10,0,0,50,50,25,25);

---
参考:http://homepage1.nifty.com/smastani/hp/smastani/pc/thumbn.html
630名無しさん@お腹いっぱい。:02/02/07 20:01 ID:wErLB+F6
文字列のすべての文字間に例えば/と入れたい場合はどうしたらいいですか?
あいうえお-->あ/い/う/え/お
こんな感じ。
とっても簡単なんだと思うんだけど、文字列置換ではやり方が思いつかないし、
splitとjoinでもなんか区切り文字が必要で、この場合区切り文字は無くて..
頭悪くてすみません。お願いします。
631名無しさん@お腹いっぱい。:02/02/07 20:25 ID:???
>630
http://www.din.or.jp/~ohzaki/perl.htm#JP_Split
これが参考になるかな?
632630:02/02/07 20:40 ID:wErLB+F6
ありがとうございます!!
斜め読みしたかぎり、理解できませんでしたが、
題名からして回答っぽいです。参考にさせていただきます。
633GIFの加工:02/02/07 21:42 ID:???
>>629
GIFはたしかUNISYSが版権?持ってて、画像をくっつけるぐらいなら
問題ないけど、加工するとなると権利に引っかかる可能性アリだった
と記憶してる。
pngとかでできないのかな?
634名無しさん@お腹いっぱい。:02/02/07 22:36 ID:XOjr1cO9
>>633
最近のGDはGIFサポートしてないのぉ
635名無しさん@お腹いっぱい。:02/02/07 22:59 ID:cTwOw5ea
>>630
print join "/",(split //,"aiueo");
でいいんじゃないのん?
636635:02/02/07 23:08 ID:cTwOw5ea
あ、全角のコトを言ってたのね。
勘違いしてた。ゴメ。
637age派:02/02/07 23:11 ID:???
っでぇあんな時間にレスがΣ( ̄□ ̄;)
すいません、重なって書き込みだったらしく気づかずそのまま行ってしまいました(汗
で、あと・・・KCatchの使い方が良くわからなかったです(汗
今までいじる程度しかやってなかったんで・・・。
638age派:02/02/07 23:15 ID:???
あ、すいません(汗
今のが623さんへです。

それと、625さん。それをファイルにして動かして見ればよいのでしょうか?
639名無しさん@お腹いっぱい。:02/02/08 05:15 ID:???
Perlのチャットを設置しようと考えています。
鯖への負担を減らしたいので、いくつかのCGIをテストしてその負荷を調べることにしました。
CPUの処理時間から負荷を量ろうと
win2000+ActivPerl+AN HTTPDの環境で、スクリプトの上のほうに
$CPU_start = (times)[0] ; #計測スタート

表示部分(普段リロードされる)の下のほうに
$CPU_end = (times)[0];
printf("<DIV align=right>消費時間: %.3f CPU秒</DIV>\n",$CPU_end-$CPU_start);
と書きました。しかしどのCGIも0.000〜0.010秒程度となり、比較ができませんでした。

Perlの負荷(チャットリロード時)を計る良い方法はないでしょうか?
640名無しさん@お腹いっぱい。:02/02/08 06:24 ID:???
どう削りたいのかによる
CPUビジーとは限らんだろ、メモリかも知れんし、ディスクかも知れない
Benchmark取れば君の言ってる事は出来るが
それが何の役にたつのやら・・・・
641名無しさん@お腹いっぱい。:02/02/08 09:18 ID:???
>>639
自作して自分なりのダイエットを徹底的に行うって言うのも楽しい。
642まゆ:02/02/08 09:23 ID:WCH/GiDk
ご回答ありがとうございます。
みなさんのアドバイスを参考に作成いたします。
初心者さま
参考になるページありがとうございます。
643名無しさん@お腹いっぱい。:02/02/08 14:01 ID:???
【傲慢】Perl使いに喧嘩を売る掲示板【問題発言】
http://choco.2ch.net/test/read.cgi/news/1013077421/
644名無しさん@お腹いっぱい。:02/02/08 20:05 ID:???
Perl-CGIからデータベース接続したいんですけど、
Java-ServletみたいなConnection Poolingってできるんでしょうか?

調べてみたんですが、mod_perlしか見つかりませんでした.
事情によりmod_perlは使えないので、その他の方法でなにかあります?
645名無しさん@お腹いっぱい。:02/02/08 21:30 ID:???
>>640-641
ご教授ありがとうございました。
Benchmark.pmの解読にいってきます。
646名無しさん@お腹いっぱい。:02/02/08 22:59 ID:???
お金を表示させようと思って、普通に表示したら
お金っぽくないんです。
で、なんでかなぁ?って考えたら、カンマがないからだとわかりました。

$money='500000'
に、3桁区切りのカンマをつけるにはどうすればいいでしょうか?
647名無しさん@お腹いっぱい。:02/02/08 23:02 ID:???
$data = "500000";
for($i = 0;$i < $length($data);$i++)
{
if($i % 0 == 2)
{
$res .= ",";
}

$res .= sybstr($data,$i,1);
}
648名無しさん@お腹いっぱい。:02/02/08 23:10 ID:???
>>647
早レスありがとうございます。

なるほど、そういう方法もありですか。
(たぶん$length → lengthだと思うのですが)

個人的には、正規表現か、sprintfでなんとかならないかなぁと思ってるんですが、
どうでしょうか?
649名無しさん@お腹いっぱい。:02/02/08 23:18 ID:???
>>648
過去ログ、その他の役立ち情報は>>2-10を見よう。

数字を 3桁ごとにコンマで区切る
http://www.din.or.jp/~ohzaki/perl.htm
650名無しさん@お腹いっぱい。:02/02/08 23:18 ID:???
そこまで解っていて何故聞く?

$l = reverse $l;
$l =~ s/(\d{3})/$1,/g;
$l = reverse $l;
651名無しさん@お腹いっぱい。:02/02/08 23:19 ID:???
あ、そうか。/gで全部処理すれば良いんだ。
652名無しさん@お腹いっぱい。:02/02/08 23:30 ID:???
>>644
多分 mod_perl + Apache::DBI じゃないと無理なんでないかな。
653名無しさん@お腹いっぱい。:02/02/09 00:46 ID:JKGEpIyz
>>646
$money='500000'
$money =~ s/500000/500,000/;
654644:02/02/09 00:47 ID:XYP1PySz
>mod_perl + Apache::DBI
やっぱりそうなりますか
ひとつだけperlプロセスを常駐させてそこからConnection受け渡し、とか
いろいろ考えてたんですけど・・・
Hashの参照と中身(データ)を丸ごとプロセス間でやり取りってのは・・・
できないですよねぇ
655名無しさん@お腹いっぱい。:02/02/09 00:54 ID:R07+bRc7
perlに付け足してアクセスログをとる方法なんですが、
ブラウザの種類(携帯は機種も)、IP、SSID、日付、訪問回数等を
取得できる方法ありませんか?
今は
# 適当なファイルをopenして
open(LOG,'>>logfile');
# 情報を書き込む
print LOG "$ENV{'DATE'} $ENV{'HTTP_USER_AGENT'} $ENV{'REMOTE_HOST'} $ENV{'REMOTE_ADDR'}\n";
# ファイルをクローズ
close(LOG);
ってやってるんですが、1回のアクセスで同じ情報が数回残るんです。
ちなみに掲示板のCGIの上のほうにつけてるんですが。
656名無しさん@お腹いっぱい。:02/02/09 01:06 ID:???
>>655
表示 1回。
書き込み 1回。
リロード 1回。

同一IPアドレスからは連続して情報を書き込まないようにすれば。
657名無しさん@お腹いっぱい。:02/02/09 01:12 ID:R07+bRc7
>>656
そのやりかたがわからないんです。
日付とSSIDの取得もわかりません。
もしわかるのであれば簡単なソースでものせてもらえませんか?
658名無しさん@お腹いっぱい。:02/02/09 01:17 ID:???
それじゃ解りまへん
自分が取りたい所で取れば良し
659名無しさん@お腹いっぱい。:02/02/09 01:37 ID:R07+bRc7
そうですか、ありがとうございます。
他の人が教えてくれるのを待ってます。
660名無しさん@お腹いっぱい。:02/02/09 01:39 ID:???
>>656 != >>658

>>656な俺も既に回答は放棄してるよ。
もう少し具体的に書かないと。
661名無しさん@お腹いっぱい。:02/02/09 01:57 ID:???
それ改造してんだろ? つーかSSID何かログれんのか?
自分で書いて何処でどう動いてるか分からんのか?
改造だったら改造スレにソース上げれば教えてくれるかもな
662652:02/02/09 02:26 ID:???
>>644
Storable, FreezeThaw, Data::Dumperなどで$dbhをプーリングする
・・・くらいしか思いつかなかったヨ。

> Hashの参照と中身(データ)を丸ごとプロセス間でやり取り
これをやってくれるのが上記のモジュール群だと思うのだが、どうか。
663644:02/02/09 03:32 ID:???
>>662
ありがとうございます.その辺から調べてみます.
664名無しさん@お腹いっぱい。:02/02/09 13:58 ID:ZyuqXnPG
半角英数字を全角に変換したいんですがうまく行きません。
require "jcode.pl";
&jcode'tr(\$string,'0-9A-Za-z','0-9A-Za-z');
これってなにか間違ってます?いろいろ調べたんですが、
頭の&無かったり'が::だったり、jcodeのヘッダでは最初の引数が*line
で*ってなんだ??とか全然わからんです。お願いします。
665名無しさん@お腹いっぱい。:02/02/09 15:53 ID:???
>>664
いろいろ調べた?
Googleで"jcode.pl"を検索すると出る最初のページすら読んでないのに?
jcode.plの私的な解説書 <http://www.mikeneko.ne.jp/~lab/kcode/jcode.html>

そこにこう書いてあるぞ。

> 「-」による範囲指定は、$line の文字コード及びスクリプト自身が、JIS か EUC でなければなりません。
666664:02/02/09 16:13 ID:ZyuqXnPG
そこはちゃんと読んで、すべてEUCでやってます。
667名無しさん@お腹いっぱい。:02/02/09 16:31 ID:???
どう上手く行かないんだ?
別段間違えて無い筈だぞ
一応最新Ver落としてやり直してみれ

まさかターミナルがSjisとかじゃ無いよな?
668664:02/02/09 16:33 ID:ZyuqXnPG
そうですか。jcode壊しちゃったかな。
何も変換されません。
ちなみにターミナルってなんですか?
669名無しさん@お腹いっぱい。:02/02/09 16:44 ID:???
telnetクライアントなどシェルと入出力を行う環境(?)。
670名無しさん@お腹いっぱい。:02/02/09 16:47 ID:???
どんな環境でやってるのやら・・・
ターミナルはターミナルだ、訳せ :)

&は関数のプレフィックスな、まあ有っても無くてもいい
'と::は意味が同じだが、まあこれもなるべく::を使え
*と\はちょっと違うんだけど、まあ似たようなもんだから気にするな
671664:02/02/09 16:47 ID:ZyuqXnPG
ごめんなさい。本当にごめんなさい。
jcode.plが壊れていたようでした。
正常なものに更新したら無事変換されました。
672名無しさん@お腹いっぱい。:02/02/09 16:52 ID:???
>670
投げやりな回答が分かり易くてGood (・∀・)b
673名無しさん@お腹いっぱい。:02/02/09 17:44 ID:???
>'と::は意味が同じだが、まあこれもなるべく::を使え

Perl5から非推奨だっけ?'
674名無しさん@お腹いっぱい。:02/02/09 17:57 ID:???
>>673
んだ。
Perl5からはパッケージデリミタは :: になっている。
' は後方互換の意味しかない。

型グロブとリファレンスについては、
速度の点や、スレッド有効での問題があるから、
素直にリファレンス使ったほうが良い。
675名無しさん@お腹いっぱい。:02/02/10 03:48 ID:TjXtgJNe
おしえて下さい。
208_978_4_37  この時、
208を取り出すにはどしたらいい? substrを使うかな?もっと簡単な方法あるよね?
676名無しさん@お腹いっぱい。:02/02/10 03:50 ID:???
(split /_/)[0]
677名無しさん@お腹いっぱい。:02/02/10 03:52 ID:???
1.
$str = "208_978_4_37";
$str =~/^(\d+)/$1/;

2.
$str = "208_978_4_37";
$str = (split /_/, $str)[0];

substrが一番簡単です。
678名無しさん@お腹いっぱい。:02/02/10 03:55 ID:TjXtgJNe
はや、 ほんじゃ substr使います。
>676 >677 ありがとうございました。
679名無しさん@お腹いっぱい。:02/02/10 11:23 ID:jVpiRjZn
良く本に載っているソースなどで
local(*data, @cokkie);
などを見かけますがこれの*dataの「*」の意味が理解出来ません。
どなたかご教授お願いします。
680名無しさん@お腹いっぱい。:02/02/10 11:30 ID:???
>>679
参照。
ポインタのようなもの。
681名無しさん@お腹いっぱい。:02/02/10 11:38 ID:jVpiRjZn
>>680
お答えありがとうございます。
参照という事はつまり、上記の
local(*data, @cokkie);
では、$data @data %dataが全て局所化されるという意味でしょうか?
ポインタはCの経験が無いもので、ちょっと理解出来ないです。。
682名無しさん@お腹いっぱい。:02/02/10 14:24 ID:???
型グロブと参照は違うだろ。

意味は>>681であってる。
683名無しさん@お腹いっぱい。:02/02/10 17:16 ID:LAh5h/Xv
書き出したテキストファイルを
Windowsで関連付けしたアプリで自動的に開きたいんですが、
どうすればいいんでしょうか?

hoge.txt を書き出したとして、
それを関連付け実行(ダブルクリック)した動作が実現すればいいんですが…。
(エディタでhoge.txtが開ければOK)
684名無しさん@お腹いっぱい。:02/02/10 17:19 ID:???
system("hoge.txt");
685683:02/02/10 17:26 ID:LAh5h/Xv
>>684
ありがとうございます。でも、

「コマンドまたはファイル名が違います.」

と出てしまいます…。
686名無しさん@お腹いっぱい。:02/02/10 17:29 ID:SYLMgyWM
>>685
hoge.txtのパス通ってる?
同じフォルダに置いてやってみ?
687名無しさん@お腹いっぱい。:02/02/10 17:30 ID:???
あ、やっぱり失敗か。

systemの実装がshellexecute()なら動くけどね。
688名無しさん@お腹いっぱい。:02/02/10 17:32 ID:???
system("start hoge.txt")
689686:02/02/10 17:33 ID:SYLMgyWM
出来ないこともあるんか。
漏れが出来たから、、偉そうな事言ってごめそ
690683:02/02/10 17:36 ID:???
>>688 これでできました!

パスは通ってました。 >>686
DOS窓から関連付け実行する時も start〜 で行けますね。勉強になりました。
ありがつおございました。

#と言うか、こんな時間に即レスが帰ってきたことにビクーリ
691681:02/02/10 18:08 ID:wM0dEuj6
>>682
*data
↑は型グロブいうんですね。知らなかったです。で検索して見たところ
Knave Web講座 というすごくわかりやすい解説がしてあるページにたどり
付きまして、なんとか理解することが出来ました。
>>680さんともどもありがとうございました。
692名無しさん@お腹いっぱい。:02/02/10 18:14 ID:???
クッキーを設定するにあたって質問です。
Set-Cookie: ******
は必ず
Content-type: *******
の1行下に記述しなければいけないのですよね?下の例であってますでしょうか?
例:
Content-type: text/html\n
Set-Cookie: web=$hoge\n
HTML記述〜
693名無しさん@お腹いっぱい。:02/02/10 18:17 ID:???
>>692
逆。

Set-Cookie: web=$hoge\n
Content-type: text/html\n

後、有効期限書かないとすぐ消えるよ。
694名無しさん@お腹いっぱい。:02/02/10 20:07 ID:???
数字のリストから空いているのを探すのって出来る?
たとえば
1,3,4,5,6,7,8,9
とかあったら2を返すようにしたいんですけど。
695名無しさん@お腹いっぱい。:02/02/10 20:10 ID:???
>>694
階差数列を利用すれば?

$a[$i + 1] - $a[$i] = 1

となる。この条件に合わなければブビー!
696名無しさん@お腹いっぱい。:02/02/10 20:14 ID:SYLMgyWM
@char = (1,3,4,5,6,7,8,9);
%char = map { $_, 1 } @char;
for(1 .. 9) { print if not exists $char{$_} }

イマイチ?
697名無しさん@お腹いっぱい。:02/02/10 20:30 ID:???
grep { ! { map { $_ => 1 } @hoge }->{$_} } (1..9);
698デビデビ:02/02/10 20:38 ID:TkcMar2j
Gimp-Perl のスクリプトを X はインストールされてるけど、
X サーバが走ってないマシンで、動かす方法はあります?
699名無しさん@お腹いっぱい。:02/02/10 21:04 ID:???
>>693
OH!?だから動かなかったのか。。?
どうもありがとうございました。
700          :02/02/10 21:26 ID:???
メールを読んでその代価としてお金がもらえます。当然、登録・維持全て無料。
広告メールの配信企業は他にも多数あります。しかし登録したはいいがメールが来ない、懸賞は自作自演、
果てには個人情報収集目的のサービス実態なし、なんてサイトまであります。
その点このサイトは月10通〜20通の配信実績がありますし、何より住所・電話番号等不要なので匿名性が高く、安心。
それにちゃんと送金してくれます。私も既に3回送金してもらいました。
ポイントが加速度的に増えるサービス、いくつかありますので仮登録したらCheckしてみて下さい。

※注意※ 
必ず 本登録 して下さい。仮登録のままではポイントが加算されません。
本登録するには アンケート に答えてから 本登録スタートボタン (メールでURL配信される)を押します。
興味のある項目を答えるアンケートでは全てチェックを入れるのが吉。その分配信メールが増えてポイント増。
本登録スタートボタンのURLが載ったメールが来るまで数日〜数週間かかりますが、待っただけの価値は十二分にあります。
時間がかかるケースが多いので早めに仮登録を済ましておくことをお勧めします。
その後の本登録維持も忘れないようご注意下さい。(何かと面倒なのも広告出稿者を多く集める為の策のようです)


Ariga10.com
http://www.ariga10.com/?id=207008
こちらから登録できます。記入欄は少ないので時間はほとんどかかりません。
701名無しさん@お腹いっぱい。:02/02/10 21:44 ID:???
>>698
マルチですか・・・。
702名無しさん@お腹いっぱい。:02/02/10 21:53 ID:???
>>701
あれだろ。
スレ立てて指摘されたんで質問直しなんだろ。
マターリマターリ
703名無しさん@お腹いっぱい。:02/02/10 22:55 ID:???
>>696
>>697 を参考にして
grep { ! { map { $_ => 1 } @hoge }->{$_} } ((sort @hoge)[0]..(sort @hoge)[$#hoge]);
てな感じか?
704703:02/02/10 22:56 ID:???
>>694 だった。スマソ……。
705名無しさん@お腹いっぱい。:02/02/11 00:20 ID:rEaHJsWI
$sort = [sort { $a <=> $b } @hoge];
print grep { ! { map { $_ => 1 } @hoge }->{$_} } ($sort->[0]..$sort->[$#hoge]);
706名無しさん@お腹いっぱい。:02/02/11 00:21 ID:rEaHJsWI
直結すると長くなるから分けただけで↓でも。
grep { ! { map { $_ => 1 } @hoge }->{$_} } ((sort { $a <=> $b } @hoge)[0]..(sort { $a <=> $b } @hoge)[$#hoge]);
707名無しさん@お腹いっぱい。:02/02/11 00:32 ID:???
foreach (@hoge){......}とかで配列処理する場合、今現在、
何番目の要素なのかを取得する方法って有る?
いつもブロックの中で$i++とかして参照しているけど、
いまいちスマートで無い気が。
708名無しさん@お腹いっぱい。:02/02/11 01:01 ID:???
>707
それが一番スマート。
709名無しさん@お腹いっぱい。:02/02/11 02:54 ID:fuw0wehn
SSIについてここで質問してもイイ?
710名無しさん@お腹いっぱい。:02/02/11 13:12 ID:???
>>709
Perlと関係ねーだろ。
CGI質問スレのほうがまだまし。
711名無しさん@お腹いっぱい。:02/02/11 20:56 ID:???
>>708
ふ〜む、やっぱりこれしか無いか。ありがd
712名無しさん@お腹いっぱい。:02/02/11 21:59 ID:???
>>707=711
for (my $i = 0; $i <= $#hoge; ++$i) {
...
}
という手も有り。
713名無しさん@お腹いっぱい。:02/02/11 22:10 ID:???
150ぐらいの単語をいっきに表示させたいんですけど,配列をforeachでまわすのと,
配列へ入れずにファイルをwhileでまわすのとどっちが効率いいんでしょう?
714名無しさん@お腹いっぱい。:02/02/11 22:52 ID:???
>>713
効率というのはメモリ効率なのか処理効率なのか分からないが
この場合は(単語1つ1つが膨大なサイズでなければ)
前者の方がメモリを喰らうけど速いなり。

もっとも、1・2回の繰り返しじゃ体感できるような差はないと思われ。
715名無しさん@お腹いっぱい。:02/02/11 23:04 ID:???
>714
レスサンクスです。参考になりました。
実はチャットの名前の色のリストなんですね。たいした量じゃないです。(笑
716名無しさん@お腹いっぱい。:02/02/11 23:05 ID:???
dbmopen(%FOO, foo, 0666);

for(0..$bar){
@data = split(/\0/, $all_data[$_]);

unless(defined($FOO{$data[0]})){
print"処理:新データとして書き込み";
}else{
print"処理:旧データと一部差し替え";
}
}

print"最終処理"

dbmclose(%FOO);

ソケットで得た複数のデータ(名前、所属、個人番号、等)を、
$FOO{個人番号}に収めて管理するプログラムを作っています。
データは正しく受け取れて、一通りの動きはしてくれるのですが、
なぜか最終処理の部分まで到達してくれません。
不思議な事に、ローカル環境(Win2000+Apache、Win98+Apache)では最終処理まで到達します。
解決方法をご存知でしたらご教授いただければ幸いです。
717名無しさん@お腹いっぱい。:02/02/11 23:14 ID:???
>>716
print"最終処理"
; が最後に抜けているとか?
\nないからバッファリングのデータ(最終処理)が吐き出されないとか?
718名無しさん@お腹いっぱい。:02/02/11 23:16 ID:???
>>716
野暮だが・・・
Perl5ならdbmopenじゃなくtie使ったほうが良いよ。
719名無しさん@お腹いっぱい。:02/02/11 23:17 ID:???
>>716
Socket扱うならバッファリングは行わないのが吉。
$| = 1;
720名無しさん@お腹いっぱい。:02/02/11 23:18 ID:rEaHJsWI
>>712
値にアクセスする時 $hoge[$i] になって遅くなる。

とラクダに書いてある。w

continue { $i++ }
とかはどうかな。。あんま変わらんか。
721707:02/02/11 23:53 ID:???
>>720
ラクダ見たけど、遅くなるなんてどの辺に書いて有るんでせうか。
>>712
そういうことで、改めてラクダ読んだら、第2章のforeachの説明
のところで、明確にforeach中で、要素の番号を知る方法は無い
と書かれていました。で、隣り合った要素を比較するなどの場合
は、>>712の方法が一つの解として紹介されており、ラクダを良く
読まねばと思う、今日この頃。
722720:02/02/12 00:14 ID:ed1xHjmG
>>721
たぶん同じページやでw
ラクダ第2版日本語のp.114、
> また、こちらのほうが高速なのは〜〜〜アクセスできるからだ。
って奴。
そういうことはちゃんと読んでから言えw
723720:02/02/12 00:15 ID:???
あ、次のページだったねw
724707(721):02/02/12 00:37 ID:???
>>722,723
納得
725たま:02/02/12 00:37 ID:/NrbiZO4
1. 画像アップロードとコメントをつけてHTMLページを作成したい。
2. http://digit.que.ne.jp/work/mtWiki/yukiwiki.cgi/yukiwiki.cgi?mycmd=read&mypage=%5B%5BCGI%3A%3ALite%5D%5DのCGI LITEと、cgi-lib.plを利用した
3. READShort と出た。
CGILITEを使って画像のアップと、コメントの送信をするにはどうしたらよろしいかお教えください
726名無しさん@お腹いっぱい。:02/02/12 00:41 ID:???
>>725

perldoc CGI_Lite
727 :02/02/12 01:38 ID:???
%Link = ('1'->'www.yahoo.com', '2'->'www.google.com');
%Link = ('2'->'www.google.com', '1'->'www.yahoo.com');

while(($Name,$Addr) = each %Link){
  print qq( [ <A href="$Addr">$Name</A> ]);
}

で出力が同じなのはなぜスか?
リストのほうで並び替えても出力(並び方)が変わらんのだが・・・

いい書き方あれば教えてください。
728名無しさん@お腹いっぱい。:02/02/12 01:41 ID:???
ハッシュは取り出す順番がバラバラ、、
って前もどっかに書かれてたな、、
sort key %Link にするか、どっかのモジュール(名前忘れ)使うかどっちかがいいと思われ。
729727:02/02/12 02:01 ID:???
>728
フム,sort key %Link のほうを調べてみます。
ありがとう!
730名無しさん@お腹いっぱい。:02/02/12 02:05 ID:???
ああそうか,実際は'1','2'じゃないからsortじゃ工夫せんと無理だな〜
'1_藍上尾', '2_柿苦毛子'にしてwhileでまわして,表示する直前に'1_'を消すとかか。

うーむ,めんどいな。
731名無しさん@お腹いっぱい。:02/02/12 02:06 ID:???
>>727

-> ではなく =>

> どっかのモジュール
Tie::IxHash
732agege:02/02/12 02:49 ID:???
> 728-729
key ⇒ keys

1_, 2_ などのキーをソートしたいなら、sort {$a <=> $b} %Link だけど、
必ず数値+_形式のキーが来ると決まっているのなら、末尾の_を取り除いて
普通の配列にしてもいいネー。
733名無しさん@お腹いっぱい。:02/02/12 03:18 ID:???
全然気付かんかったw < =>,keys
ちなみに
>>732
sort { $a <=> $b } keys %Link
734名無しさん@お腹いっぱい。:02/02/12 03:23 ID:???
みんな眠いから凡ミス?
735名無しさん@お腹いっぱい。:02/02/12 04:49 ID:???
どっかのスレッドにActivePerlを使ってて、
CGItempXXXXというファイルが残るって書いたものですが、
解決いたしました。
736名無しさん@お腹いっぱい。:02/02/12 05:49 ID:PUJwyJrl
>735
よかったねー。
なんかいい方法あったの?
737名無しさん@お腹いっぱい。:02/02/12 06:37 ID:???
>>735
>どっかのスレッドに
書き逃げでもしたの?
>解決いたしました。
解決方法も書き込めば、ログ読んだ他の人も助かるかもよ。
738名無しさん@お腹いっぱい。:02/02/12 12:02 ID:???
>>727
そのままだとひとつのサイトに対して
「ハッシュのkey」と「ハッシュのvalue」の
2つづつしか要素を持てないから
いっそのこと
%site = (id => 1, url => 'www.google.com', name => 'Google', comment => '便利!');
みたいな形式にしちゃって
push(@list, \%site);
していってそれをソートして表示してみるっていうのはどう?

foreach $this (sort {$a->{name} cmp $b->{name}} @list) {
print $this->{id}.'<a href="'.$this->{url}.'">'.$this->{name}.'</a>'.$this->{comment};
}

これならひとつのサイトに対していくらでも要素を持てるし、
ソートもID順とかURL順とかいろいろできるからいっそう便利かなーと。
739print<<"EOF";:02/02/12 15:27 ID:sXZ1u4GK
Perlでヒアドキュメントって嫌われているんですか?
740名無しさん@お腹いっぱい。:02/02/12 16:23 ID:???
>>739
何故?普通にバリバリ使いまくってますが。
741名無しさん@お腹いっぱい。:02/02/12 16:25 ID:???
>>739
多分ヒアドキュメントを書くときソース中でインデントできない
とかいうやつですか?
先頭のインデントを出力する前に正規化で削除すれば綺麗になる
し、ソース中の見栄えもよくなるからよろしいかと思われ
てかまったく関係なかったらゴメソ
742名無しさん@お腹いっぱい。:02/02/12 16:59 ID:???
確かにインデントしてないヒアドキュメントは読みにくいかも。
自分の場合はキレイにしないでそのまま(\t付きのまま)出力してるけど、、
クックブックの24ページにのってるね。<正規
743print<<"EOF"; :02/02/12 21:39 ID:???
>>740-742
レスありがとうです。
そうです、>>741さんの言うとおりインデント出来ないのが…。
と思ってたら、やっぱり回避策があったんですね。
頑張って自己満足なソースの美化に尽くします(笑)
あ、そうだ。ベンチマークでもとってみるか。ヒアドキュメントの。意味ないけど。
744名無しさん@お腹いっぱい。:02/02/12 22:10 ID:???
>>743
>あ、そうだ。ベンチマークでもとってみるか。ヒアドキュメントの。意味ないけど。
そういう心がけが上達の道だと思ったり。何となくだけど。
料理本以外にもEffective Perlは個人的にはお薦めなんでご覧あれ。
745名無しさん@お腹いっぱい。:02/02/13 07:36 ID:u18sBL1T
ヒアドキュメントでインデント、どうやれば出来るんでしょう。
数時間検索したけど見付けられず…。
どなたか解説、お願い出来ないでしょうか。
746名無しさん@お腹いっぱい。:02/02/13 08:08 ID:???
($hoge = <<_HERE_) =~ s/^\s+//mg;
...
_HERE_
747745:02/02/13 09:47 ID:???
>>746
/igsoe位しか修飾子つかったことが無かったのですが、
/m 文字列を複数行として扱う、はこう使うものなんですね。
勉強になります。ありがとうございました。
748名無しさん@お腹いっぱい。:02/02/13 15:02 ID:???
関係ないが、どっかのPHP本でPERLはヒアドキュメント中で
変数を展開できないとか書いてあって、鬱。
こういうもんなんすかね、一応プロフェッショナルブックとか
名うってあったんですが(藁
749名無しさん@お腹いっぱい。:02/02/13 15:25 ID:???
>748
酷い本だな。
750名無しさん@お腹いっぱい。:02/02/13 16:02 ID:???
ちとおしえてください。
HTMLファイル内の記述で、.cgiファイルを起動させたいのですが、
どうしたらいいですか?<img src=xxx.cgi> だと、HTMLに画像跡がでるし。
お願いします。
751名無しさん@お腹いっぱい。:02/02/13 16:15 ID:???
イメタグで1x1の透過gif出力するとか
752名無しさん@お腹いっぱい。:02/02/13 16:22 ID:???
>751
ありがとうございます。消えたました。
imgタグで起動してるか心配だけど試してみます。
753名無しさん@お腹いっぱい。:02/02/13 18:11 ID:KS70lsn0
$temp = int( 18.9 * 100 );

で,$temp = 1889 になったんだけどなんで?
ActivePerl 5.6.1.630
754名無しさん@お腹いっぱい。:02/02/13 19:12 ID:???
>>753
18.9を2進法に変換してみると分かると思われ。
755名無しさん@お腹いっぱい。:02/02/13 20:38 ID:???
>>753
ま、可能な限り不自然にならないように、いろいろ苦労してるんですよ。
756名無しさん@お腹いっぱい。:02/02/13 21:34 ID:xqc5dBTw
>>754-755
やっぱり,分からん
もう,泣きそう
757名無しさん@お腹いっぱい。:02/02/13 22:46 ID:???
>>756
>>755の言っている事をもっと穿って考えよう。(w
ホントだよ?
758名無しさん@お腹いっぱい。:02/02/13 22:49 ID:???
>>756
簡単に言うと「Perlは人と同じように数値を理解しているわけではない」ってこと。
これは仕様なんで注意して扱うしかない。

どうしても高精度な計算がしたいならモジュールを使う事。

#!/usr/bin/perl
use Math::BigFloat;

my $num = new Math::BIgFloat('18.9');
print int($num * 100);
__END__
759名無しさん@お腹いっぱい。:02/02/13 22:51 ID:???
っと、一文字間違えた

<my $num = new Math::BIgFloat('18.9');
>my $num = new Math::BigFloat('18.9');
760名無しさん@お腹いっぱい。:02/02/13 22:54 ID:???
>>758
「難しく」言うと、どのような理屈になるのでしょうか?
できるだけ付いてこられるように頑張ります。
761名無しさん@お腹いっぱい。:02/02/13 23:10 ID:???
>>760
とりあえず、Perlが数値を表現するのに確保しているメモリの量では、
18.9を正確に表現することは出来ない、ってことです。

これ以上詳しく言うと長くなりすぎるんで「浮動小数点 内部表現」とか「浮動小数点 フォーマット」
とかで検索すると多分ずらずら出ます。
(でも大抵はその仕様について書かれてるだけなんでイメージしづらいんだよな)

762753:02/02/13 23:23 ID:???
>>761
精度(?)云々というのはなんとなく頭の片隅にはあるんだけど
 int( 18.9 * 10 )=189
 int( 18.9 * 100 )=1889
 int( 18.9 * 1000 )=18900
なんで,*100 の時だけ?というのが腑に落ちないんだな,これが
763名無しさん@お腹いっぱい。:02/02/13 23:27 ID:???
>>762
で、浮動小数点については調べてきたのか?
764名無しさん@お腹いっぱい。:02/02/13 23:30 ID:???
>>763
そこはそれ>>755ということ。
具体的に何やってるのかは知らんが、善処した結果なんだろうね。
まぁ俺も妙だとは思う。int()を外すと1890になるのも不可解だし。
765名無しさん@お腹いっぱい。:02/02/13 23:31 ID:???
間違い。>>762宛てだった。
766名無しさん@お腹いっぱい。:02/02/13 23:31 ID:???
>>764
構造知らずして結果の食い違いは理解できないぞ。
767名無しさん@お腹いっぱい。:02/02/13 23:32 ID:???

>>765ということで>>766も忘れてね。
768名無しさん@お腹いっぱい。:02/02/14 02:16 ID:???
754の解説をお願いします
769名無しさん@お腹いっぱい。:02/02/14 02:46 ID:???
>768
うろ覚えだけど,
2進数では
整数部分は 1, 2, 4, 8, 16, 32, 64...と位が上がっていって
小数部分は 1/2, 1/4, 1/8, 1/16, 1/32...と位取りされている
んじゃなかったかな。
770名無しさん@お腹いっぱい。:02/02/14 08:31 ID:???
>>768
調べろ。と言ったはずだが?
勉強しないプログラマに明日はないぞ。

>>769
正解。
771名無しさん@お腹いっぱい。:02/02/14 12:48 ID:???
ちなみにprint $nとprint int $nの結果が違う事だが、
Perlのprint()関数は、C言語のprintf()、
またはそれに準ずるフォーマットルーチンを使って実装されていて、
不動小数点数はある桁数(これは自由に設定可能である)で繰り上がる仕様になっている。
この現象は "print 2/3" 等とした時にも見られる。
ところが、int()というのは小数点以下を黙って全て切り捨てる。
これにより、答えが整数であるべき時でも"print int $n"と"print $n"に差が生じる事があるのだ。
772名無しさん@お腹いっぱい。:02/02/14 14:10 ID:???
>>762
53bit同士の計算で, 結果の54bit目が1だと切り上げされるからじゃない?

18.9 ≒
10010.111001100110011001100110011001100110011001100110
10 = 1010
100 = 1100100
1000 = 1111101000
10000 = 10011100010000
100000 = 11000011010100000

18.9*10 ≒
10111100.1111111111111111111111111111111111111111111111
->10111101

18.9*100≒
11101100001.1111111111111111111111111111111111111111110

18.9*1000≒
100100111010011.111111111111111111111111111111111111111
->100100111010100

18.9*10000≒
101110001001000111.111111111111111111111111111111111111
->101110001001001000

18.9*100000≒
111001101011011001111.111111111111111111111111111111110
773名無しさん@お腹いっぱい。:02/02/14 14:21 ID:+0g/R+F6
Perlでファイルを取り扱うモジュール(というかクラス?)を作ったのですが、ファイルハンドルがインスタンス間で共有されてしまってイマイチ使いづらいです。
同じクラスのインスタンスを複数作った場合、インスタンス間でファイルハンドルを別々に持つようにできますでしょうか?

$file1=new FileClass('read.txt');
$file2=new FileClass('write.txt');

$string=$file1->getLine(1);
$file2->insert($string);

$file1->close();
$file2->close();

みたいな。
ファイルハンドルに参照とか無名配列みたいのがあれば自分で解決できそうだけど聞いたこと無いので。
774名無しさん@お腹いっぱい。:02/02/14 14:23 ID:X8oQt8gz
perlで、あるhtmlファイルから、見出しタグ(<Hn>ほげ</Hn>)とその中身だけを書き出したいんですが、
どうすればいいのでしょう・・・。
(結果として、以下のようになる)

<h1>ああ</h1>
<h2>いい</h2>
<h3>うう</h3>
<h2>いい</h2>
775名無しさん@お腹いっぱい。:02/02/14 14:34 ID:0AhamLLI
print $1 if m|(<([hH][1-6])[^>]*>[^<]*</\1>)|o;
776774:02/02/14 16:11 ID:peM7yPQ9
どうもです>>775
でも、
$filename = "test.html";
open(IN, $filename) || die "$filename: $!";
open(OUT,">result.html") || die "result.html: $!";

while(<IN>){
chomp:
print OUT $1 if m|(<([hH][1-6])[^>]*>[^<]*</\1>)|o;
}

close(IN);
close(OUT);

で、結果が0k。。。。なぜ?
test.htmlの中身は、以下の通り

aaaa<H2>えいちに</H2>bbb

<h1>えいちわん</h1>
777774:02/02/14 16:18 ID:peM7yPQ9
もとい、chomp:でなくchomp;としてます。
778名無しさん@お腹いっぱい。:02/02/14 16:21 ID:???
>>773
使用法なんてどうでも良いから実装を見せろよ。
多分 "open HANDLE" とかしてるんだろうけど。
とりあえず標準ライブラリの Symbol と IO::Handle および IO::File のソースを読めば幸せになれるかもな。

関係ないが、クラスの名前に"Class"をつけるのはアホらしいと思うのは俺だけか。
779名無しさん@お腹いっぱい。:02/02/14 16:35 ID:???
print $1 if m|(<[hH]([1-6])[^>]*>[^<]*</[hH]\2>)|o;
としてみたらいけた。()のネストってこうなるのか。
780773:02/02/14 17:07 ID:???
>>778
非常にありがd。ついでにスマソ。
で、ご指摘どおりsymbolを読んで、とりあえず幸せになれた。
ファイルハンドルにスカラー変数が使えるとは。

クラスの名前にClassなんて、いつもは付けてないけど今回は念のため。
781名無しさん@お腹いっぱい。:02/02/14 22:58 ID:oPnLkVh5
すっごい初歩な質問でスマソなんだけど
掲示板で書きこみ者の任意の回数だけ要素(例えばアイコンとか)を
繰り返し表示させるスクリプトを組み多淫です。
うんこのアイコンを選んで「10」とエリアに入れてpostしたら
うんこアイコンが10個出る、見たいな感じで。

この繰り返させるスクリプトの書き方がわからんのです
どなたかわかる方いたら教えてください。
782名無しさん@お腹いっぱい。:02/02/14 23:33 ID:7pMXJhas
多淫。
783名無しさん@お腹いっぱい。:02/02/14 23:38 ID:???
多淫だな。
784名無しさん@お腹いっぱい。:02/02/14 23:40 ID:???
どうすればいいんですか?
を変換しようとするとき
どうすれ売淫ですか
になって、よく困るな。そういえば。
こういうことやるから、また売淫ででるな。
785名無しさん@お腹いっぱい。:02/02/14 23:44 ID:???
>>781
アイコン<select name="icon">
回数<input name="kaisu">
-------------------
for (1..$in{'kaisu'}) {
$icon.="<img src=$in{'icon'}>";
}
-------------------
786名無しさん@お腹いっぱい。:02/02/14 23:56 ID:???
>785
こんな基本的なコードでも人のコードは勉強になる。
なるほど,すごくシンプルだ。おれなら"i="云々書いてるとこだった。
787名無しさん@お腹いっぱい。:02/02/15 00:04 ID:???
$icon = qq{<img src="$in{'icon'}">} x $in{'kaisu'};
788781:02/02/15 00:55 ID:LCJ4YCpt
>>785
>>787
THANXです!
今スクリプトをこねくり回してますがうまいこといかないです。
成功したら完成形を報告します。うー…
789名無しさん@お腹いっぱい。:02/02/15 06:20 ID:WCBRMEef
どうも
790名無しさん@お腹いっぱい。:02/02/15 06:20 ID:oL67ZYlw
ごば、、
791名無しさん@お腹いっぱい。:02/02/15 06:30 ID:???
>>多淫
汚染チェックと上限チェックを忘れないようにな。頑張れ。
792賛成の反対の反対ナノだ!:02/02/15 06:30 ID:???
> <img src="$in{'icon'}">
>
$in{'icon'}の値が「xxx.gif" onLoad="JavaScript:ウケケ」に書き替え
られて送信されてきたらどうする?チェックはキッチリやっておこうネ!
そうしないとセキュリティホールになったりして。
793名無しさん@お腹いっぱい。:02/02/15 13:10 ID:???
>792
とほほみたいなこと言うなよ・・・
794:02/02/15 16:07 ID:???

したらばの「管理人メニュー」に意味不明のものがありました。
FAQにも書いてありませんでしたし、
サポート掲示板に書いても反応がありませんのでこちらでお願いします。

>Getによる投稿を認める

Getってなんですか?

795名無しさん@お腹いっぱい。:02/02/15 16:19 ID:???
>>793
まじで大切だと思うけど。
796名無しさん@お腹いっぱい。:02/02/15 16:47 ID:???
>>794
CGI側:データ受け取りに環境変数を使うか標準入力を使うか。
ブラウザ/サーバ側:HTTP0.9でも動くか否か。
797名無しさん@お腹いっぱい。:02/02/15 16:59 ID:???
>794
だからなGETだと,「<A href="http://www.aaaa.com/boke.cgi?name=荒らしだよ〜ん&naiyou=死ね死ね死ね">僕のホームページはここです!</A>」なんてことができるってこと。
そのかわり「boke.cgi?Logview」とかアドレスで直接モードへの移行はできなくなる。
まぁPOSTにしとけ。
798名無しさん@お腹いっぱい。:02/02/15 17:20 ID:???
ファイルハンドルにスカラーを使うとき、printで出力するときはどうするのでしょう。
open(FILE,'>text.txt')
print FILE 'abcd';
close FILE;
の代わりに
$file=1;
open($file,'text.txt');
print $file 'abcd';
close($file);
とやるとprintで死ぬのですが。<>でくくってもだめだったです。
799名無しさん@お腹いっぱい。:02/02/15 17:22 ID:???
>>793
セキュリティホールに気を配るのは基本だと思われ
800名無しさん@お腹いっぱい。:02/02/15 18:04 ID:???
くだらない質問かも知れないけど、@a[1]と($a[1])って等価?
ちょっと気になったもので。
801名無しさん@お腹いっぱい。:02/02/15 18:12 ID:???
>>800
@a[1]は有効か?
802名無しさん@お腹いっぱい。:02/02/15 18:13 ID:???
>798
「1」はダメだろ。
803名無しさん@お腹いっぱい。:02/02/15 18:17 ID:???
ファイルロックって書き込む時だけすればいいの?
読む時もロックしといたほうがいい?
804名無しさん@お腹いっぱい。:02/02/15 18:17 ID:???
>>803
読み込んでる最中にロックされると困りませんか?
805798:02/02/15 18:19 ID:???
>>802
中身のないスカラーはFH代わりに使えないけど、なにか代入したら使えましたよ。
もっとも、私は標準ライブラリsymbolの
$sym = gensym;
open($sym, "filename");
のgensymの意味がわからないのでテケトーにやってみた、というだけの話ですけど…。
まぁ、モジュール化とかの理由で通常のファイルハンドルが使えない状況なので無理にスカラーをば。
で、1じゃだめですか?
806名無しさん@お腹いっぱい。:02/02/15 19:17 ID:???
>804
なるほど。つまりやめとけって意味ですか?

レスの意味はよく考えたんだがちょっと想像できない・・・。
人が読み込んでるときに自分が読み込めないのは無駄で遅くなる原因になるっぽいけど・・・
807名無しさん@お腹いっぱい。:02/02/15 19:33 ID:u5RDXGaq
$file=1;
open($file,'text.txt');
print $file 'abcd';
close($file);

これは、やっていることは以下といっしょ。

open(1,'text.txt');
print 1 'abcd';
close(1);

よって、君がいう「通常のファイルハンドル」となんら代わり無い。

そんなことより、open($file ,'> text.txt') でしたという落ちはなしにしてくれ。
808名無しさん@お腹いっぱい。:02/02/15 20:14 ID:???
>>800
@hoge[] はスライス、($hoge[])はスカラーが一個のリスト。

>>803
読むときもファイルロックすべき。
読むときにロックしないで、読んでる最中にいきなりロックかけられたら困るでしょ?
>>804の答えはそういうこと。
> 人が読み込んでるときに自分が読み込めない
いいえ、これはLOCK_EXでなくLOCK_SHを使えばいいだけの事。
この辺り、過去ログでJAPUさんが詳しく述べているとこあり。
過去ログ閲覧をお勧めする。
809名無しさん@お腹いっぱい。:02/02/15 20:34 ID:???
>808
2ちゃんねるの過去ログなんて、これほどあさりにくいものはないっすよ
横やり失敬しました(笑)
810800:02/02/15 23:15 ID:???
>>808
あ、それはわかるんですけど、
実際使う上で違いがあるのかどうかを聞きたかったんです(^^;
811名無しさん@お腹いっぱい。:02/02/15 23:19 ID:???
>>810
あ る に 決 ま っ て る だ ろ !
812名無しさん@お腹いっぱい。:02/02/16 01:38 ID:???
ランキングで困っています。
2_45_5_74
4_36_3_53
8_83_2_27
こんな感じのデータがある時、12_45_5_74 の 
1番目の12と3番目の5を足してその値を大きい順に
並ばせるにはどうしたらいいでしょうか?

データを開いて、whileで各、足していって、
データ保存

保存したデータを大きい順に並べていって、
データ保存 

こんな感じを感じを考えているのですが、
一つにまとめる方法とかありますか?

おねがいします。
813名無しさん@お腹いっぱい。:02/02/16 01:41 ID:???
速さ求めるならクイックソートでもすれば?
数値の大きさ比べるだけなら実装も楽でしょう。
814名無しさん@お腹いっぱい。:02/02/16 01:42 ID:???
sort()使えば。
815名無しさん@お腹いっぱい。:02/02/16 01:44 ID:???
挿入ソートとか。

計算後のデータを記憶する際に大きい順になるように記憶させれば。
816断罪!断罪!また断罪!!:02/02/16 01:54 ID:???
> 812
open(READ, $readFile);
while(<READ>){
   if ( /^(\d+)_\d+_(\d+)/ ){
       $sort{$1+$2}++;
   }
}
close(READ);
open(WRITE, ">$writeFile");
for ( reverse sort keys %sort ){
   print WRITE "$_\n";
}
close(WRITE);
817名無しさん@お腹いっぱい。:02/02/16 01:57 ID:???
>>816
いちいちソートするのって効率悪くないですか?
818断罪!断罪!また断罪!!:02/02/16 02:14 ID:???
> 817
>
ソートだけにそーっとすればOK (ヮ
819名無しさん@お腹いっぱい。:02/02/16 02:21 ID:smdGl30B
$moji = "a'a'a'a'";
となっているのをs//やtr//などを使って
$moji = "a\'a\'a\'a\'";
という結果にしたいのですが、どうしたらいいでしょうか?
820断罪!断罪!また断罪!!:02/02/16 02:22 ID:???
> 819
>
$moji=~ s/'/\\\'/g;
821賛成の反対の反対ナノだ!:02/02/16 02:25 ID:???
「断罪!断罪!また断罪!!」 改め、元の「賛成の反対の反対ナノだ!」に戻ります。
822名無しさん@お腹いっぱい。:02/02/16 02:27 ID:smdGl30B
>>820
それはやってみました。以下のエラーがでます。
syntax error at test.cgi line 6, near "$moji~"
Execution of test.cgi aborted due to compilation errors.
823名無しさん@お腹いっぱい。:02/02/16 02:34 ID:???
>822
=~じゃなくて ~= にしてない?
824賛成の反対の反対ナノだ!:02/02/16 02:35 ID:???
> 822
>
$mojiに 漢字コードが入っているのでは?
825名無しさん@お腹いっぱい。:02/02/16 02:37 ID:smdGl30B
>>823
ありがとう!!
自分のぼんくらミスに気付きませんでした。(感謝)
826名無しさん@お腹いっぱい。:02/02/16 02:39 ID:???
>>820
それじゃ予め \' となっているものも置き換わので、後読みするのが吉。
s/(?<!\\)'/\\'/g;
827名無しさん@お腹いっぱい。:02/02/16 02:54 ID:smdGl30B
>>826
ありがとう。(感謝)
828名無しさん@お腹いっぱい。:02/02/16 03:26 ID:hJTYeQVW
>>805 素直にIO::File使うのじゃだめ?
use IO::File;
my $fh = new IO::File "text.txt", "w";
die "なんか開けませんでした:$!" unless $fh;
print $fh "abcd";
$fh->close;
829名無しさん@お腹いっぱい。:02/02/16 04:12 ID:???
>>798
IO::Fileみたく型グロブを使うとか。
open HANDLE, 'hoge.txt';
$fh = *HANDLE{FILEHANDLE}; #$fh = \*HANDLE;
print $fh 'HOGE';
830名無しさん@お腹いっぱい。:02/02/16 04:28 ID:???
最近のperlなら *GLOB{IO} って形じゃないかしら、と記憶。
831名無しさん@お腹いっぱい。:02/02/16 05:38 ID:???
>803です。

>808
なるほど分かりました。そうします。
832名無しさん@お腹いっぱい。:02/02/17 03:46 ID:???
スクリプトをできるだけ重くしないコツってどんなのがあります?
スクリプトを分割するってのは意味あるんでしょうか?
833名無しさん@お腹いっぱい。:02/02/17 12:39 ID:???
>>832
例えば1〜10を足すとき、

for($i=1;$i != 10;$i++)
{
$sum += $i;
}

と、

$sum (10 * 9) / 2;

の2種類がある。

まぁ、こんなそのものズバリの公式がある場合は少ない。

基本的にはその処理をいかに少ない命令で実現するか。
sprintfとかは重いらしいwからそう言うのも考慮して。
ループの外でもできる処理はループの外に出すとか。
ループ内でうまくnext;last;を使うとか。

なお、分割したところでコード量は減らない。
むしろ各種オーバーヘッドがかかったり。

なぜ分けるかと言えばその方がわかりやすいから。
関連の機能をまとめてモジュール化しているわけです。



834名無しさん@お腹いっぱい。:02/02/17 12:42 ID:jcHWzcYr
他人のソースを見て勉強しようと思うのですが、
誰のソースは勉強になる、誰のはやめとけっていうのは
やっぱりありますか??
全然perl初心者なので、そのへんの区別がつきにくいです、、
835名無しさん@お腹いっぱい。:02/02/17 12:44 ID:???
>>834
初心者ならどれ読んでも参考にはなるかな?
と、言うか読めるのか??大変だぞ。人のソース。
836名無しさん@お腹いっぱい。:02/02/17 14:10 ID:???
>>835
応、簡単な入門書などを読んで、すげー単純な掲示板などは
作れるようになったくらいのレベルです。
やっぱりもっと本などで十分に勉強してからのほうがいいのかも、、、
837名無しさん@お腹いっぱい。:02/02/17 14:14 ID:???
コードをまねることはないんだよ。
おもしろいと思った処理を自分の書き方でパクればいい。
まぁ、クイックソートとかリストとかデータ構造とアルゴリズムは知って置いて良いかも。
838名無しさん@お腹いっぱい。:02/02/17 17:08 ID:???
>833
なるほど,意味ないんですか。
まぁできるだけ意味のないこと(アクセスログ採取とか)はやめとけってことですね。

>834(>836)
そのくらいのレベルならここに定着したら良いかと。
839名無しさん@お腹いっぱい。:02/02/18 02:04 ID:???
Win+ActivePerlなのですが、
Perlを実行する時は、コマンドプロンプトからですか?
ダブルクリックでは実行できますか?
あと、Perlの拡張子は何ですか?
840名無しさん@お腹いっぱい。:02/02/18 02:12 ID:FZ6+Jcwo
あげ
841 :02/02/18 02:22 ID:g517xzDH
なぜファイルハンドルという概念が必要なんでしょう
842名無しさん@お腹いっぱい。:02/02/18 03:17 ID:???
>>834
人によって変数の書き方や改行の仕方の癖があるので
色々みてみて、自分の書き方に近い人、読みやすいものを
さがすといいのでは。
Perlだと、人によってはすごくトリッキーな、
もはや芸術的なコードを書く人がいますんで。
いいんだか悪いんだか最初はわからないかもだけど。
843この子の七つのお祝いに:02/02/18 03:25 ID:???
> 839
DOS窓から次を実行。
% perl test.pl
--- 拡張子はなんでもOKだが、一般には.plを使う。---

> 841
ファイルとお話するためです。しゃべり専門と聞き専門がいますが、
しゃべり専門は、考えたことを一気にしゃべり倒すのか少しずつしゃべって
いくのかタイプが分かれますが、途中で切り替えることもできる器用な人です。
聞き専門の人は話が今どこまで進んでいるかを憶えておかないといけない。
844名無しさん@お腹いっぱい。:02/02/18 05:23 ID:???
中身
 @zzz = ("a","b","c","d","e","f","g","h","i","j","k");
 $xxx = 3;
表示
 abc<br>def<br>ghi<br>jk<br>

「@zzzを$xxx回ごとに<br>で区切って表記」
と、いう処理をしたいんですが、どうしたらいいでしょうか?
845名無しさん@お腹いっぱい。:02/02/18 09:33 ID:9k5avLiX
>841
同時に開くファイルが、1つであるとは限らないからです。
2枚以上のファイルを開いているときに、FHをつかって、
どっちに仕事させたいのか指定するのです。
846名無しさん@お腹いっぱい。:02/02/18 21:03 ID:Lwlv3uzp
ここでいいのかな?

BBS作って、書き込みがあったら管理人のメアドに書き込み内容を自動送信するようにしたんです(sendmailで)。

自動送信するのとしないのとでは30秒程度のタイムラグがあります。sendmailの設定が悪いの?
847名無しさん@お腹いっぱい。:02/02/18 21:06 ID:???
>>846
処理時間が増えたんだろ?
848名無しさん@お腹いっぱい。:02/02/18 21:07 ID:???
>846
その質問内容で、君の相談内容が理解できたやつは神。
849名無しさん@お腹いっぱい。:02/02/18 21:12 ID:???
>>846
MZ-80じゃあるまいし、書き込み変数をそのままsendmailに投げて送信するだけで30秒も掛からないっすよ。
850名無しさん@お腹いっぱい。:02/02/18 21:12 ID:???
>>846
タイムラグの使い方変。
8518484:02/02/18 21:20 ID:zt3xmvgw
『ハッキングのわざが手に取るようにわかるサイト』または
『ハッキングのわざが手に取るようにわかる本』に書かれている内容を
実践・計画をした場合、以下の罪・違反・侵害に問われる可能性アリ。
どうかご注意して頂きたい。
http://www.puchiwara.com/hacking/
852名無しさん@お腹いっぱい。:02/02/18 21:25 ID:???
プチワラねえ。
853名無しさん@お腹いっぱい。:02/02/18 21:28 ID:???
プチワラなんでアクセス制限されないんだ?(笑)
854名無しさん@お腹いっぱい。:02/02/18 23:54 ID:???
> 844
こんな感じ?

;# 設定
my( @zzz  )= ('a'..'k');
my( $xxx  )= 3;
my( $cat  );

;# 処理
for ($i=$[; $i<=$#zzz; $i+=$xxx){
   $cat.="$zzz[$i]$zzz[$i+1]$zzz[$i+2]<br>";
}
print $cat,"\n";
855844:02/02/19 00:16 ID:???
>>854
うひゃー(;д:)
出来ました。ありがとうございましたぁ(;_;)

あぁ、しかし、凄い初心者な質問だったということが
解答から見て取れる・・・ 鬱だ。(2週間目で初心者そのものですが)
856名無しさん@お腹いっぱい。:02/02/19 01:06 ID:???
>855
いやめんどくさそうだから誰も書かなかったんだと思うよ。
857名無しさん@お腹いっぱい。:02/02/19 01:13 ID:u2bv8Yg8
ボディに含まれる1000とか572とか0とかって何なんでしょうか?
で、これを飛ばすのにはどうしたらいいのでしょうか?

1000
<html><head><meta http-equiv="Content-Type" content="text/html; charset=x-sjis"><base href="http://pc.2ch.net/test/read.cgi/php/" target="body"></head><body><font size=2>
<a href="1003539977/l50">1: WebProg板の名無しさんを決めよう (299)</a> 
<a href="1013945931/l50">2: ASP VS PHP (24)</a> 
 (略)
<a href="987850713/l50">304: PH
572
PとJAVAさぶれっと (26)</a> 
<a href="987470871/l50">305: デザイナーとの連携 (28)</a>
 (略)
</body></html>
0
858名無しさん@お腹いっぱい。:02/02/19 01:19 ID:???
>>857
HTTPのリザルトコード・・・にしては不自然。
何の話よ?ところで。
859名無しさん@お腹いっぱい。:02/02/19 01:44 ID:???
socketでsubback.htmlを所得したらそんなのが混じるんですよね
まあtelnet系でも混ざってるんでPerlに限った話でもないでしょうし
ブラウザソースでは消えるんですが。

でも整形する時にはかなり邪魔なのでどうしたものかなぁ、と。。。
860名無しさん@お腹いっぱい。:02/02/19 02:09 ID:???
>>856 
実は今、改めてみてみると、
$xxx= 3;
$xxxが絶対"3"で無ければなりたたない解答だと言うことに気付いた…(爆)
これじゃ$xxxが5だった場合に即破綻してしまう(汗)

う、うーん・・・。結構難しいのか・・・?
と、取り敢えず>>854をヒントに頑張ってみよう(;´д`)
ヒントは確かにもらえた感じがする。
お礼も「ありがとう」ぐらいしか言えないし、頼ってばかりでもなんだし(汗)
861名無しさん@お腹いっぱい。:02/02/19 02:21 ID:uiFxg8op
@zzz = ("a","b","c","d","e","f","g","h","i","j","k");
$xxx = 3;
$i =1;
foreach(@zzz) {
print $_;
if ($xxx == $i) { print "<BR>"; $i = 1; }
else { ++$i; }
}
862名無しさん@お腹いっぱい。:02/02/19 02:22 ID:???
my $i = 0;
foreach (@zzz) {
 print;
 $i++; $i %= $xxx;
print '<BR>' unless $i;
}
863862:02/02/19 02:26 ID:???
あう、かぶった。
864名無しさん@お腹いっぱい。:02/02/19 02:27 ID:???
>>857,858
chunk-part-size の 16進表記
詳しくはHTTP/1.1仕様書などを見れ
865名無しさん@お腹いっぱい。:02/02/19 02:59 ID:???
>>861-862
あっ、お二方、ありがとうございます(;-;)
しかし、同じ結果処理に色々な解答が出るものだなぁ。

いつか質問者じゃなくて解答者になれるんだろうかなぁ。
頑張ろう(>_<
866名無しさん@お腹いっぱい。:02/02/19 03:04 ID:???
>865
一つの問いに数多の解答、がPerl。
半年がんばれば、回答者に入ってくると思うよ。
867名無しさん@お腹いっぱい。:02/02/19 06:03 ID:???
>>864 ありがとうごぜーますです。。
ということでHTTP/1.0にしたらなんとなく解決しましたです。。
う、、これは逃げなのか、、(^_^;)
868864:02/02/19 07:21 ID:???
869名無しさん@お腹おっぱい。:02/02/19 07:41 ID:???
質問です。
例えば現時点でWEBプログラム板の上位にあるスレ
のスレタイトルをHTMLにインクルードしたい場合、
どんな処理をしたら良いのでしょうか。。
870名無しさん@お腹いっぱい。:02/02/19 07:52 ID:???
>869
対象を取得し,解析し,変換し,書き出す。
871名無しさん@お腹いっぱい。:02/02/19 12:43 ID:???
>>869
上位スレッドはsubject.txtに書き出されてるはずだから、
それを使えばいいと思う。

が、今のスクリプトってsubject.txtはどこにあるんだろ?
http://pc.2ch.net/php/subject.txt
ここじゃないんだぁ…。
872名無しさん@お腹いっぱい。:02/02/19 22:15 ID:???
>>871
いや subject.txt は確かにそこにあるんだけど、
Monazillaに属する2ch専用ブラウザじゃなきゃ読み込めないように
しちゃったんだよね。。一応読み込む方法はあるんだけど。
873名無しさん@お腹いっぱい。:02/02/20 02:43 ID:zdJQxaGu
分からなくて困っています。
以下は『1である限りはif文以下を実行せよ』という
スクリプトなのですが、何が1なのでしょうか?
『何かが1である限り』ではなく、『偽である限り』という意味なのでしょうか?
それなら何が偽なのでしょう?
while(0)とすると何も実行せずに終ってしまいます。

#!/usr/bin/perl -w

$| = 1;

$test = "mona";

while (1) {

if ($pid = fork) { wait; } else { print "子プロセス\t$test\n"; }

}

よろしくお願いします。
874名無しさん@お腹いっぱい。:02/02/20 03:38 ID:???
0 は偽、1 は真。
while( ループ継続条件 ){
だから while (1)は、何時までもやってろゴルァ(゚Д゚)y-~~
875名無しさん@お腹いっぱい。:02/02/20 03:40 ID:???
>>873
> 何が1
while の条件が1でしょ。常に真だろ。

あと、何でwaitpidじゃなくてwaitしてんの?
876名無しさん@お腹いっぱい。:02/02/20 03:41 ID:3mg+TPcG
>>874
あ、そうでした。
0が偽、1が真だった。
でも・・・何を評価して真か偽かを決めてるんですか?
ごめんなさい。
877名無しさん@お腹いっぱい。:02/02/20 05:02 ID:???
>>876
>0が偽、1が真だった。
だよね。
だから、while (1) { は
while (真) { っていうワケで常に真。
878名無しさん@お腹いっぱい。:02/02/20 05:05 ID:dXs9ILx0
>>877
それだ!
うう・・・ありがとうございます。
そしてお休みなさい・・・。
879名無しさん@お腹いっぱい。:02/02/20 05:33 ID:???
偽 0
真 0以外
でないの?
880名無しさん@お腹いっぱい。:02/02/20 05:40 ID:???
undef
881名無しさん@お腹いっぱい。:02/02/20 05:59 ID:???
空文字列も偽
882名無しさん@お腹いっぱい。:02/02/20 06:54 ID:???
"0"
883名無しさん@お腹いっぱい。:02/02/20 10:47 ID:???
>879
条件式には-1の場合もあり得る。
884名無しさん@お腹いっぱい。:02/02/20 12:32 ID:???
正規表現に変数は使えないのですか?

$a = "aaa.jpeg";
$oks = "jpeg";

if($a =~ /\.$oks$/i){
  print "aru";
}

ファイル名の拡張子を調べるルーチンを組みたいのですが・・・
885名無しさん@お腹いっぱい。:02/02/20 12:49 ID:???
>>884
「〜はPerlでは出来ないのですか?」と聞く前にまず自分が間違っていないかどうか確かめろ。
つーか、>>884の結果は「aru」なんだが、アンタどういう環境で実行してんだ?
886名無しさん@お腹いっぱい。:02/02/20 13:18 ID:???
>885
解決。見まちがえてました(爆
887名無しさん@お腹いっぱい。:02/02/20 15:47 ID:Mi91V+XZ
やりたいことはファイルに保存してあるURL一覧から情報を引っ張って来てどん
どん裏でどんどん画像をダウンロードすることです。すでにダウンロードを始め
ているファイルの転送が完了しないうちに次行に書かれてあるURLからダウンロー
ド始める・・・要するに同時にいくつものファイルをダウンロードするというも
のですが、forkの使い方で躓いています。

でも以下のスクリプトだと$fileの最初の行のURLをダウンロードし続けるだけで
す。実はforkの使い方がよく分かっておりません。
子プロセス側の処理はオーケーとして、親プロセス側の処理が問題なのではない
かと睨んでいますが、どうにも・・・。

よろしくお願いします。

#!/usr/bin/perl -w
$file = "./image";
open (READ, "<$file");
while (<READ>) { $data_url = "$_"; &get("$data_url"); }
close (READ);

sub get {
while (1) {

if (fork) {
wait;
} else {
print "Download: $_[0]\n";
system "wget -q $_[0] ";
exit;
}
}
}
888名無しさん@お腹いっぱい。:02/02/20 16:12 ID:???
body$back_envで設定した壁紙と背景色が出力できるようになってるんですけど
同様にページのテキストの色を設定するのはどう書き加えればいいですか?
889名無しさん@お腹いっぱい。:02/02/20 16:15 ID:???
>888
死んでしまえ。
890名無しさん@お腹いっぱい。:02/02/20 16:17 ID:???
>888
Web制作
http://pc.2ch.net/hp/
こっちで聞いてごらんよ。

コーディングで変えたいっていうんだったら、フォントの色を変える部分で変数使ったらいい。
891名無しさん@お腹いっぱい。:02/02/20 16:17 ID:???
>>887
>>874

>>888
作者に聞け
892名無しさん@お腹いっぱい。:02/02/20 16:36 ID:???
>>887
上の方でwaitpidの事シカトされたから教えてやんない。
893名無しさん@お腹いっぱい。:02/02/20 16:40 ID:???
perl -cでデバッグしてもなぜかEOFにエラーが出るんですがどういうことでしょう?


Missing right curly or square bracket at D:\usr\www\home\chat\chat.cgi line 834,
at end of line
syntax error at D:\usr\www\home\chat\chat.cgi line 834, at EOF
Execution of D:\usr\www\home\chat\chat.cgi aborted due to compilation errors.
894名無しさん@お腹いっぱい。:02/02/20 16:43 ID:???
>>893
{}の対応がおかしくなっているのでは。
ブラケットを確認セヨ。
895名無しさん@お腹いっぱい。:02/02/20 16:49 ID:???
>893
EOFまでのあいだに}が見つからないって話だよね。
896名無しさん@お腹いっぱい。:02/02/20 16:56 ID:???
>894 >895
即レスさんくす!
さっそく探してみます!
897名無しさん@お腹いっぱい。:02/02/20 17:07 ID:???
>894 >895
やったやった!動いた!ありがとう!
898名無しさん@お腹いっぱい。:02/02/20 17:15 ID:???
>897
よかったねー!
899吉野家紗香:02/02/20 19:33 ID:cwPAEcob
a1.html
a2.html
gikogiko.cgi
omaegana ――― b1.html
            b2.html
            omaemona ――― haa.txt
            oremona  ――― itteyoshu.dat
                        z.html

こういうファイル構成から下のようなファイル一覧を作るには、
どのようにやればよいですか?

a1.html
a2.html
gikogiko.cgi
omaegana/b1.html
omaegana/b2.html
omaegana/omaemona/haa.txt
omaegana/oremona/itteyoshu.dat
900名無しさん@お腹いっぱい。:02/02/20 19:54 ID:???
カレントから再帰で潜って行って吐き出す
901名無しさん@お腹いっぱい。:02/02/20 20:09 ID:???
過去ログに全く同じようなソースが転がってたよ。
http://www.angelfire.com/ak5/2ch-web-program/kako/979894521.html の97
902901:02/02/20 20:10 ID:???
違った。鬱士
903名無しさん@お腹いっぱい。:02/02/20 21:12 ID:???
opendirつかうか、ls -lR取ってテキスト整形する。
904名無しさん@お腹いっぱい。:02/02/20 22:51 ID:Mi91V+XZ
>>892
頭がいっぱいいっぱいでwhile(1)のことばかり気にしていて・・・。
ごめんなさい。

>>887の件、教えて下さい。
905名無しさん@お腹いっぱい。:02/02/20 22:59 ID:???
ちょっと来てない間にpart9まで出来てたのか。
perlを勉強する人が増えたって証拠かな?
906名無しさん@お腹いっぱい。:02/02/20 23:15 ID:???
>904
レス読み流してない?>>873周辺とか。
907名無しさん@お腹いっぱい。:02/02/20 23:19 ID:???
みんながみんなperl習ったらおもしろくないね(ぷ
908名無しさん@お腹いっぱい。:02/02/21 00:15 ID:???
Perlメモのファイルロックを使っています。
同時に3つのファイルをオープンする場合は,先にロックしてからまとめてオープンする(つまりロック→ファイル1オープン→ファイル2オープン→ファイル3オープン→アンロック)のと,それぞれのオープン直前に専用のロックをするのとどちらがいいのでしょう?

ただし,それぞれ別作業でオープンする場合もあります。
909名無しさん@お腹いっぱい。:02/02/21 00:17 ID:???
>>908
俺はプログラムごとにエクスクルーシブロックかけるが(ダメダメ)。
910名無しさん@お腹いっぱい。:02/02/21 00:51 ID:???
>>908
環境やどんなプログラムなのかわからない以上、状況によるとしか言えない。
911飲み活要員:02/02/21 02:35 ID:h7QujQlw
こんなもん作ってみたーよ。

http://www.lodestar.nu/niki/index.cgi

中途半端なWikiEngineみたいな感じだけど
・一応認証がある
・文法がHNS下位互換
・単語をページごとのリンクに変換できる。
・逆リンク
・段落ごとにリンクをはれる
・ブラウザ上からハイパーテキストを編集するツール
という特徴がある。

こーいうツールの必要性があるものかどうか、ふと確認してみたくなった。
どうよ?意見キボンヌ。
912名無しさん@お腹いっぱい。:02/02/21 02:37 ID:???
nikiについて
Wiki* に多大な影響を受けている。 Wiki* とは不特定多数の人々がウェブを編集できる仕組み。ハイパーリンクが気持ちいい。Wikiとnikiの違いは
コマンド体系(nikiはHNS下位互換)
編集ポリシー
普及度
完成度(汗
などが挙げられる。

次世代NikiNikiWeb
悪いところは反省し。他のWikiEngineのよいところを参考に
oldtype
ver 0.01-beta6のソース?と使い方
性格
基本的に自動リンク用語集。たまにハイパードキュメント作成ツール。日記にもなるかも。
Wiki* 方面はみんなが目指しているので、NikiNikiはハイパードキュメント作成ツール方面でひとつ
でも Wiki* 的な機能もありで。
既知のバグ
LINKのURL判定が甘い
いろいろ
リンク
http://tiki.is.os-omicron.org/?c=v&p=WelcomeVisitors Omicron
http://isweb21.infoseek.co.jp/computer/h_yanai/html/WelcomeVisitors.html ese-nikki
http://hpcgi1.nifty.com/~k_ogata/diary/diary.rb diary.rb
http://todo.org/
913名無しさん@お腹いっぱい。:02/02/21 03:09 ID:???
>>911
私的には大変興味アリ。
カテゴリつくりたい時なんかにも役立つ?
派生して色々な用途に使えそうなので良いのでは。
914飲み活要員:02/02/21 03:10 ID:h7QujQlw
>>911
しまた、ここはPerlの質問を受け付ける擦れだったのか。
間違いた。スマソ
915名無しさん@お腹いっぱい。:02/02/21 03:24 ID:???
>>911
おもしろいね。いろんなことに使えそう。
上の方にある「一覧」とか選ぶとエラー出るのは仕様?
916名無しさん@お腹いっぱい。:02/02/21 03:44 ID:???
おおしろいね。
実は煮たようなものを作ろうとしていたりします。
917名無しさん@お腹いっぱい。:02/02/21 09:35 ID:???
Wiki系には興味あり。新規スレッド立てたら?
918さんこうすれ?:02/02/21 09:48 ID:???
「Wiki Wiki 楽々 Run! Run! Run!」
http://pc.2ch.net/test/read.cgi/tech/1010317366/
919名無しさん@お腹いっぱい。:02/02/21 14:16 ID:???
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■477まで読んだ■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
920名無しさん@お腹いっぱい。:02/02/21 19:32 ID:9QK6Cxc7
$loginstr中の</DIV>\nを$indexstrで置換えたいとき、

$loginstr =~ s/<\/DIV>\n="$indexstr";

では出来ないのでしょうか?
正しい表現が分らず困惑しとります。
921名無しさん@お腹いっぱい。:02/02/21 19:36 ID:???
$loginstr =~ s/<\/DIV>\n/$indexstr/;
922920:02/02/21 20:07 ID:???
でけた!神たま>>921有難う。
923迷える920:02/02/21 20:39 ID:???
ごめんなさいまたもや。

$indexin =~ s/$indexstr//;

ってできますか?
$indexinの中から、$indexstrと被る部分を削除したいんです。
中身日本語だからダメなのかしら?
$indexstrの中身の頭数行が、文字化けして表示されて、続いて
invalid [] range "7-0" in regexp at ./hp.pl line 72.
ていうアナウンスがあります。

お願いとどきますように。
924名無しさん@お腹いっぱい。:02/02/21 20:43 ID:???
>>923
変数$indexstr内が正規表現の場合、展開される。

$i = '.*';

s/$i//; #<- s/.*//;

925名無しさん@お腹いっぱい。:02/02/21 20:45 ID:aeAe/JtX
$indexinの中身がS-JISなんじゃねえの?
CGIはEUC-jpが基本。
926名無しさん@お腹いっぱい。:02/02/21 20:47 ID:???
>>925
はぁ?
927迷える920:02/02/21 20:55 ID:???
白状するとCGIプログラムではないんです。
で、文字コードに関してはよく分らなかったので、
取り敢ずやってしまえって試しにやってみたら、うまくいった。
で、それじゃぁって、つくりたいプログラムを書いてたら
920,923の質問にはまったと。

>>924
正規表現ではなく文字列なんです。
で、文字列だとすると、
>>925
文字コードが関ってくるんでしょうか?
928名無しさん@お腹いっぱい。:02/02/21 21:13 ID:+rGDE/uD
ここいらへんをよくよむよろし
http://www.din.or.jp/~ohzaki/perl.htm#JP_EUC_JP
参考になればよいが。関係なかったらスマソ
929名無しさん@お腹いっぱい。:02/02/21 21:14 ID:+rGDE/uD
取りあえずソース
9308484:02/02/21 21:36 ID:39ejQiBa
どんなにスゴイんだ?
韓国でも翻訳して発売されるらしい。
http://www.puchiwara.com/hacking/
うにゅ。
931名無しさん@お腹いっぱい。:02/02/21 21:37 ID:???
>>930
みんながっかりしてたよ。
932名無しさん@お腹いっぱい。:02/02/21 21:44 ID:xFoRv15a
掲示板全部CGIをeucでつくって
そのままeucでhtmlを出力してるんですが、
エンコード自動選択でsjisになってしまいます。
metaタグでちゃんと宣言してるんですけど。
なんか他にすべきことありますか?
933932:02/02/21 21:46 ID:xFoRv15a
なんか日本語変だった。
掲示板CGIを関連ファイル全部EUCで作って...です。
934名無しさん@お腹いっぱい。:02/02/21 21:47 ID:???
>930
うちで見るとこんな感じ

930 名前:8484 投稿日:2002/02/21(木) 21:36 ID:39ejQiBa
どんなにスゴイんだ?
韓国でも翻訳して発売されるらしい。
http://www.puchiwara.com/hacking/ [ブラクラ]
うにゅ。
935名無しさん@お腹いっぱい。:02/02/21 22:41 ID:???
>>932
ttp://tohoho.wakusei.ne.jp/wwwxx005.htm

ここが参考になるかと。
でもいろんなブラウザで試しておかしくなるなら、metaタグか、CGIの出力も疑うべきです。
936名無しさん@お腹いっぱい。:02/02/21 22:58 ID:???
>>927
>>925のいうように、スクリプトもデータもEUCにしときましょう。
ttp://tohoho.wakusei.ne.jp/wwwperl1.htm#Kanji
937名無しさん@お腹いっぱい。:02/02/22 00:18 ID:Ednlkjpe
1Gくらいのtextfileを読み込んで処理しようとするとout of memoryになってしまいます。
何とか分割して処理できないでしょうか?読み込んだ後は単に文字列検索したいだけなんですけど・・・・
938名無しさん@お腹いっぱい。:02/02/22 00:20 ID:???
>>937
>textfileを読み込んで処理しようとすると

どういう状態?
939名無しさん@お腹いっぱい。:02/02/22 00:29 ID:???
>937
興味あるな。
どんなデータ?

繰り返し同じものが出てくる場合はKeyにして別DBにする、っていう
リレーショナル的な分割しかないと思うけどね。
940937:02/02/22 00:45 ID:Ednlkjpe
A、T、G、Cのランダムな繰り返しから構成される
遺伝子の配列データです。その中から特定の配列を検索して抽出するスクリプトを
書きたいのです。無理かな。。。
単純にfileをopenして配列変数にぶちこんで検索をかけ・・・を繰り返しているんですが
途中で止まってしまいます(当たり前か)。
941名無しさん@お腹いっぱい。:02/02/22 00:45 ID:???
>>940
readで何バイトかごとに読めば?
942名無しさん@お腹いっぱい。:02/02/22 00:47 ID:???
>940
Cで書くべきだと思うよ。
943937:02/02/22 00:52 ID:Ednlkjpe
>941
ありがとうございます。さっそくやってみます。
944名無しさん@お腹いっぱい。:02/02/22 01:22 ID:???
>>932
print "Content-Type: text/html; charset=EUC-JP\r\n\r\n";
945名無しさん@お腹いっぱい。:02/02/22 01:31 ID:???
ぷっ,遺伝子データをPerlで処理するのか。
そんな大きな規模なら別の言語で最適化しつつやっても3日ぐらいかかるのが普通じゃないの?
946名無しさん@お腹いっぱい。:02/02/22 01:38 ID:???
$| = 1;
って必要あるんですか?よく意味が分かりません。
グーグルで調べようにも""囲みでもヒットできないので困ります。
947名無しさん@お腹いっぱい。:02/02/22 01:46 ID:???
>>937
よく知らんのだけど、bioperlって使えないのかな?
948名無しさん@お腹いっぱい。:02/02/22 01:54 ID:???
>>946
foreach(1..5) {
print "$_:";
sleep 1;
}

$|=1;

foreach(1..5) {
print "$_:";
sleep 1;
}
ってやってみ。
949名無しさん@お腹いっぱい。:02/02/22 02:02 ID:???
>>946
$| の説明はperlvarに載ってる。
ぐぐーるする前に手元のperlマニュアル読もう。
950937:02/02/22 02:05 ID:Ednlkjpe
>941
どうやらうまくいったようです!!
ありがとうございました。
951名無しさん@お腹いっぱい。:02/02/22 04:49 ID:???
(´-`).。oO(そろそろ次スレかな…)
952_gunzip:02/02/22 08:24 ID:???
>>940
http://bioperl.org/
bioperlのBio::Tools::Blast, StandAloneBlast辺りのモジュールを使って
BLAST, FASTA辺りの吐くサーチ結果をパースするのが一番簡単&&高速だと思うな。

$in = new Bio::Seq(-id=>"test query", -seq=>"GAAG");
$blast_report = $factory->blastall($in);

詳しくは付属のドキュメント参照ね。
953名無しさん@お腹いっぱい。:02/02/22 18:07 ID:???
_gunzipタン久しぶり〜
954名無しさん@お腹いっぱい。:02/02/23 11:46 ID:???
デザインが似てるとパクリになるんですか?
9558484:02/02/23 11:59 ID:gBGRhxGb
         おにぎりワッショイ!!
     \\  おにぎりワッショイ!! //
 +   + \\ おにぎりワッショイ!!/+
                            +
.   +   /■\  /■\  /■\  +
      ( ´∀`∩(´∀`∩)( ´ー`)
 +  (( (つ   ノ(つ  丿(つ  つ ))  +
       ヽ  ( ノ ( ノ  ) ) )
       (_)し' し(_) (_)_)
http://www.puchiwara.com/hacking/
韓国版ってでるらしいけど、どんな内容になるんだ?
この手のものが韓国に翻訳されるなんて初めてでは?
956名無しさん@お腹いっぱい。:02/02/24 00:15 ID:5vPUCqZK
日付から(2002/2/24)から、1970からのシリアル秒?を計算したいんすけど、
だれか知りませんか?
957名無しさん@お腹いっぱい。:02/02/24 00:17 ID:???
>>956
ルーチンくまなきゃだめです。
シリウス歴か何かで検索。
958956:02/02/24 00:28 ID:5vPUCqZK
>>957
ルーチン組むって、
1970から、指定年数まで、閏年のチェックするって感じになります?
なんか、もっとスマートな方法あるかとなぁ〜と思って探してたんですけど、
どでしょ
959名無しさん@お腹いっぱい。:02/02/24 01:37 ID:???
>>956
use Time::Local;
$time = timelocal($sec,$min,$hour,$mday,$mon,$year);
960名無しさん@お腹いっぱい。:02/02/24 02:07 ID:???
>>959
Non Module派なんでねw。
961名無しさん@お腹いっぱい。:02/02/24 02:09 ID:???
>960
モジュールのコード使えば?
962名無しさん@お腹いっぱい。:02/02/24 02:15 ID:1IBSQesy
>>960
time::localは標準モジュールだよ?
963名無しさん@お腹いっぱい。:02/02/24 02:15 ID:???
>>962
Non Module派なんでねw。
964名無しさん@お腹いっぱい。:02/02/24 02:50 ID:???
965956:02/02/24 03:57 ID:5vPUCqZK
とりあえずこんなふうで、作ってみたけど、
ループに2個あんのが、どうもなぁ〜
こんなんしか無いかね?


sub date2Time
{
  local ( $year , $mon , $day , $hour , $min , $sec ) = @_ ;

  $days = $day - 1 ;

  foreach ( 0 .. $mon - 2 )
  {
    $days += (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)[ $_ ] ;
  }

  foreach ( 1970 .. $year - 1 )
  {
    if ( ( $_ % 4 == 0 && $_ % 100 != 0 ) || $_ % 400 == 0 )
    {
      $days += 366 ;
    }
    else
    {
      $days += 365 ;
    }
  }

  $seconds = $days * 86400 ;
  $seconds += $hour * 3600 ;
  $seconds += $min * 60 ;
  $seconds += $sec ;
  $seconds -= 32400 ;

  return $seconds ;
}
966---:02/02/24 04:37 ID:???
> 965 チョットこんぱくとにするとこんな感じかナー。
sub date2Time{
   local( $year, $mon, $day, $hour, $min, $sec )= @_ ;

   $days= $day - 1 ;

   for ( 0 .. $mon - 2 ){
       $days += (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)[$[+ $_] ;
   }

   for ( 1970 .. $year - 1 ){
       $days+= (( $_ % 4 == 0 && $_ % 100 != 0 ) || $_ % 400 == 0) ? 366 : 365;
   }

   $seconds = $days* 86400;
   $seconds+= $hour* 3600;
   $seconds+= $min * 60;
   $seconds+= $sec;
   $seconds-= 32400;

   $seconds;
}
967名無しさん@お腹いっぱい。:02/02/24 13:27 ID:???
>>965-966
おしぃ〜。あとちょっと。$yearがうるう年だったとき、ちょびっとずれるみたい。

use POSIX;
srand();
foreach(1..100) {
  $y = 1970 + int(rand(40));
  $m = int(rand(12)) +1;
  $d = 1;

  $t = POSIX::mktime(0, 0, 0, $d, $m-1, $y-1900);
  $t2 = date2Time($y, $m, $d, 0, 0, 0);
  printf("%4s/%2s/%2s : $t %s= $t2\n",$y,$m,$d, $t==$t2 ? "=" : "!");
}
968名無しさん@お腹いっぱい。:02/02/24 17:04 ID:KO+bj0za
正規表現で、質問があります。
<select name="hoge">
<option>
<option>
</select>

<select name="hoge">

</select>

にヒットする表現を知っている方がいましたらよろしくお願いします。
969名無しさん@お腹いっぱい。:02/02/24 17:29 ID:???
>>968
格納されてるのは1変数?リスト?それによる。
970名無しさん@お腹いっぱい。:02/02/24 17:39 ID:???
レスありがとうございます!

具体的には

HTML文を$bodyという変数に読み込んで、
<select name="hoge">
<option value="fuga">商品名1
<option value="fuga1">商品名2
</select>
で二つに切ろうとしているんですが、
($top,$bottom) = split '<select(.|\n)*</select>',$body;
とやってもうまくいきません。

$bodyに格納されているのはただのHTML文です。
よろしくお願いします。
971名無しさん@お腹いっぱい。:02/02/24 17:44 ID:???
そもそも正規表現形式ではない。
他人の正規表現って解析面倒だから・・・。

/'<select.*?<\/select>'/

とか。
972名無しさん@お腹いっぱい。:02/02/24 17:53 ID:???
ありがとうございます。
試してみました。
でもやっぱり$bottomの方に何も格納されません。

$topの方には<select が出てくる直前までの文が格納されるんですが・・

>そもそも正規表現・・
囲む記号は何でもいいらしいというのを本で読んだので、エスケープ
するのが面倒なんで、''でくくっていました。でも普通使わなさそうなので
素直に//でくくります。

もっと、試行錯誤してみます。アドバイスがありましたらよろしくお願いし
ます。
973名無しさん@お腹いっぱい。:02/02/24 18:27 ID:???
自己解決しました。

/<select.*<\/select>/s,$body,2;
とやれば出来ました。

(.|\n)使っていたのがおかしくなる元だったのかな?
ひまになったら考えてみます。

ありがとうございました。
974名無しさん@お腹いっぱい。:02/02/24 18:44 ID:oPNaAPLP
質問です。

Perlで書いたプログラムが遅いと言われた場合、
PHPに移植すれば高速化できるものなのでしょうか?
975名無しさん@お腹いっぱい。:02/02/24 18:56 ID:???
当然処理の内容によります。
劇的な速度の変化など期待するだけ無駄です。
976名無しさん@お腹いっぱい。:02/02/24 19:02 ID:???
>>973
> 囲む記号は何でもいい
区切り文字に//以外を使用するなら、m演算子が要る。
即ち、//が区切り文字の時のみm演算子省略可能。
977名無しさん@お腹いっぱい。:02/02/24 19:07 ID:???
>>973
?外すと最大マッチするから気をつけてね。
978名無しさん@お腹いっぱい。:02/02/24 20:54 ID:???
質問です.
バイナリとして読み込んだテキストファイルを処理して出来た文字列があります.
この文字列の末尾の改行を取り去りたい場合,
s/\x0D?\x0A?$// とする以外無いのでしょうか.
chompはどうも\x0Aしか消してくれないみたいなので,
改行コードが\x0D\x0Aだった場合は\x0Aのみが消されて\x0Dが残ってしまいます.

s/\x0D?\x0A?$// より良い方法があればご教示ください.
OSはWindows2000,PerlはActivePerlとPerl for Cygwinを使っています.

$_ = "str\x0D\x0A\x0D\x0A";
open(OUT_BIN, "> ./out_bin.txt") or die;
binmode(OUT_BIN);
chomp;
print OUT_BIN;
close(OUT_BIN);
979名無しさん@お腹いっぱい。:02/02/24 20:56 ID:???
>978
binmodeをコメントアウトしたらうまくいかない?
980名無しさん@お腹いっぱい。:02/02/24 20:57 ID:???
>>978
substr($data,length($data)-2,2):
981名無しさん@お腹いっぱい。:02/02/24 21:19 ID:???
 | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
 |   次スレ立てて!!  .|
 |_________|
    ∧∧ ||
    ( ゚д゚)||
    / づΦ
982978:02/02/24 21:32 ID:???
即レスどもです.

>>979
混乱させてしまったようで申し訳ありません.
テキストとして出力すると出力時に\x0A→\x0D\x0Aの変換がされてしまうので,
結果がわかりやすいようにサンプルコードではbinmodeしておきました.

実際にやりたい事を書いておきます.大崎氏の
「ファイルの最後の数行だけ表示する(http://www.din.or.jp/~ohzaki/perl.htm#File_Tail)」
を改造して「ファイルの最後の数行を『逆順に取り出す』」スクリプトを作っているのです.
取り出すところまでは書けたのですが,取り出した行の改行コードがchompでは取れない.
そこで質問したというわけです.


>>980
どもです.しかし一応改行が\x0D\x0Aでない場合(\x0Aとか)も考えておきたいのです.
983名無しさん@お腹いっぱい。:02/02/24 21:42 ID:???
>>978
DOS改行が入力される可能性がある場合は、>>978の通りにやってます。
s/\r?\n$//;
こんなかんじー。
984名無しさん@お腹いっぱい。:02/02/24 21:59 ID:???
1 0 0 0 ま で 平 然 と 質 疑 応 答 が 繰 り 返 さ れ る ス レ を 目 指 そ う ょ
985名無しさん@お腹いっぱい。:02/02/24 22:22 ID:???
次スレ建てちゃった。
【Perl】初心者コーナーPart10
http://pc.2ch.net/test/read.cgi/php/1014556702/
986名無しさん@お腹いっぱい。:02/02/24 22:29 ID:???
>985
お気に入りに入れて移動しマスです。。。。
987978:02/02/24 22:29 ID:???
>>983
ありがとうございます.一応支障は無いので私もこのままいく事にします.
答えてくれたみなさん,どーもです.

>>985
乙カレー.
988978:02/02/25 00:31 ID:???
うわ,つーかPerlメモの「改行コードを削除する」にしっかり書いてあった…….
お騒がせしてすまんかった.抜けてるなー,おれ.
989名無しさん@お腹いっぱい。:02/02/25 12:34 ID:xTyCNQEK
つかぬことをお伺いします。
既にログに記録されている数桁の文字列を、
出力時にカンマやピリオドで区切ることは可能なのでしょうか?

例えば
"19800"とログに記録されているものを19,800として出力、
或いは
"20020224"とログ記録されているものを2002.02.24として出力、

いかがでしょうか、
もし可能でしたら方法を教えてもらえると大変助かります。
990名無しさん@お腹いっぱい。:02/02/25 13:00 ID:???
>989
>>3のリンク先の
http://www.din.or.jp/~ohzaki/perl.htm#NumberWithComma
ここにカンマ区切りのことが書いてある。

日付の方は
$day =~ s/(\d{4})(\d{2})(\d{2})/$1\.$2\.$3/;
でいいだろ。
991名無しさん@お腹いっぱい。:02/02/25 13:07 ID:ZVFFw9ik
1 while ($str =~ s/^(\d+)(\d{3})/$1,$2/);
で、数字にコンマをつけます
992989:02/02/25 16:29 ID:xTyCNQEK
ありがとうございます。>990さん、991さん
望んでいたとおりの完璧に動きを得ることができました!
993出来の悪い子:02/02/25 17:11 ID:KjItHBP9
出来の良いお前らに質問です

cgiにプルダウンでパラメータを渡そうとしています
XXX.cgi?year=2002&month=02&day=25
という形にはなったのですが
cgi側が吐き出す結果$Todayは -- という形になります

$day = $in{"day"};
$month = $in{"month"};
$year = $in{"year"};
$Today = $year . "-" . $month . "-" . $day;
print $Today

どこらへんの記述を見直せば良いでしょうか?
ヒントよろしくお願い致します。
994名無しさん@お腹いっぱい。:02/02/25 17:18 ID:???
>993
このへんかな?

>出来の良いお前らに質問です
995名無しさん@お腹いっぱい。:02/02/25 17:19 ID:???
>993
$buffer = $ENV{'QUERY_STRING'};
@pairs = split(/&/,$buffer);
foreach $pair (@pairs){
($key,$value) = split(/=/,$pair);
$in{$key} = $value;
}

この辺。
肝心な部分が載ってねーじゃねーか。
だから出来が悪いって言われるんだ。
改善を要求しる!
996名無しさん@お腹いっぱい。:02/02/25 17:21 ID:???
ふが
997名無しさん@お腹いっぱい。:02/02/25 17:22 ID:???
ほんとにできがいいなー
998名無しさん@お腹いっぱい。:02/02/25 17:22 ID:???
。。。。。
999名無しさん@お腹いっぱい。:02/02/25 17:23 ID:???
       / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       | 1000
   ∧ ∧ |/\_________
   (,,゚Д゚)____.
   (つ/~ ※ ※ \
   /※ ※ ※ ※ \
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。