トップページ⇒php
1001コメント349KB

Perl 初心者コーナー Part22

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/04/15 10:15ID:???
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。

1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。


CGIだけど、なんか質問ある? Part 10
http://pc2.2ch.net/test/read.cgi/php/1048686475/
参考書籍の話題は、【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は、【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/

過去ログやお勧めサイトは >>2-10
0478nobodyさん03/05/01 14:37ID:???
(1)$test1、$test2にはどんなデータが入ってるの?
関数じゃなくてスカラーデータね。

(2)やってみたという命令文自体に問題はない。
他の項目まで全部 dezikame になってしまうってことは、
そこ以外での処理がまずいんでしょ。
ログファイルを読み込むとこから、処理をして、ログファイルに
書き込むとこまでのソース書いてみて
0479nobodyさん03/05/01 14:45ID:???
>>476
ちなみに、代入式は代入した値を返すのでif($i=1)とやれば真になるし、if($i=0)とやれば偽になる。
こういう書き方をする場合もあるので覚えておいて損はないかも。もちろん定数を入れては意味がないけど、関数の戻り値とかをね。

>>477
> なぜか関数同士の、しかも割算が動きません
変数同士に見えるんだけど。$test2が0なんじゃないの?
0480nobodyさん03/05/01 14:48ID:???
コーディングスタイルに関しての質問なんですが、
みんなprint関数だけは括弧をつけずに呼び出しているのはなぜですか?
教科書(?)がそう書かれていることが多いから?
048148003/05/01 14:51ID:???
スレ違いだったかもしれません。すみませんでした。
0482nobodyさん03/05/01 15:01ID:???
>>480
printf
048348003/05/01 15:02ID:???
>>482
printfと区別するためということですか?
0484bloom03/05/01 15:10ID:YcBKOzoM
http://homepage.mac.com/ayaya16/
0485nobodyさん03/05/01 16:16ID:l9KEH29r
http://yahooo.s2.x-beat.com/linkvp/linkvp.html
0486T-T03/05/01 17:02ID:???
477です、
�@の件
>478さん
>(1)$test1、$test2にはどんなデータが入ってるの?
>関数じゃなくてスカラーデータね。
$が付いてたらスカラー関数・・ではないんですね;

>479さん、
>変数同士に見えるんだけど。$test2が0なんじゃないの?
ちゃんと入ってる!・・とおもったら、、
BBSのを使った性でログの1行目のデータがからっぽな性だったみたいです、、
0以前に""(ナシ)な感じだったのかも、、
おかげさまで問題点気付けて正常動作しましたぁ〜〜、、/(_ _ / ペコリ

ログ入力をメモ帳でやってて、
見易くするためにスペース入れてたのも
何か影響あったみたいです、(ワードパッドで一括削除しました、)
数字じゃなく文字列扱いになってたのかも、(でも足算、掛算はできたし・・?)
0487T-T (ありがとうー、03/05/01 17:03ID:???
477です、(2
�Aの件
>478さん
>(2)やってみたという命令文自体に問題はない。
>他の項目まで全部 dezikame になってしまうってことは、
>そこ以外での処理がまずいんでしょ。
>ログファイルを読み込むとこから、処理をして、ログファイルに
>書き込むとこまでのソース書いてみて
syntax errorとか1度出て文法がおかしいんだと必死になってたんですが
問題は無いと助言いただけたので、他の処理を少し書き直してみたら
全部変換されてしまうのが止まりました、、 T―T

でもifに反応しないなと思ったらこっちも列揃えて見易くなるように
ログ打ち込みで半角スペース使いまくってた性があったみたいで
スペース消したら正常動作しました・・! ヽT―Tノ

読み込んだ時に縦列合わせに入れたスペースの存在を忘れた事と
何も入って無いものは掛,足,引はできるけど割算系はできないと勉強になりました、、


助言いただけたおかげで気付けて空回りを終れました〜、、
ありがとうございました > <ノ (またすぐにエラーでて来そうケド;
0488nobodyさん03/05/01 19:59ID:???
$_ が 「から」 もしくは、半角スペース、全角スペース、タブのみの組み合わせで構成されている時、「処理1」を行うというif文を作ってください。
半角スペース、全角スペース、タブがあるならばというのならできるのですが、のみというのに苦労してます。
よろぴくおながいします。
0489nobodyさん03/05/01 20:04ID:???
>>488
「から」って何? そのままの日本語の通り

   から

っていう4バイトの文字列のことでいいの?
0490nobodyさん03/05/01 20:13ID:???
何もないっていう意味
0491nobodyさん03/05/01 20:25ID:???
本当の意味のぬるぽ?
0492nobodyさん03/05/01 20:50ID:???
>>488
>半角スペース、全角スペース、タブがあるならばというのならできるのですが
まずそれを書いてみろ。話はそれからだ。
0493nobodyさん03/05/01 21:30ID:???
>488
宿題くらい自分でやろうな。
049447703/05/01 22:52ID:IITpZ0lX
質問です、、
自作ログを配列に直してCGIに取りこんだんですが、
----↓こんな感じに------------------------------
@gyou01 = ('photo','pic','scan' 続く⇒);
@gyou02 = ('ph0001','pic001a','scan001');
@gyou03 = ('ph0002','pic001b','scan002a');
@gyou04 = ('ph0003','pic002','scan002b');
(50行くらい続く)
------------------------------------------------
種類別にリストに書き出そうと思ってforを使ったんですが
-----------------------------
for ($i = 1; $i <=51; $i++) {
print "$gyou$i[$i]\n";
-----------------------------
配列の部分の指定に関数使ったんですが動かず・・、(JavaScriptでは出来たのに、、
あと、
---------------------------
for ($i = 1; $i <=51; $i++){
j = i + 1;
if ($gyou$i[5] < $gyou$j[5]){
@temp = @gyou$i;
@gyou$i = @gyou$j;
@gyou$j = @temp;
}
---------------------------
こんな感じで配列の入れ替え整頓もできる状態にしたくて
あまり激しく変えたくないのですけれど・・・
無理でしょうか?、
よろしくおねがいします、、
0495nobodyさん03/05/02 00:08ID:???
>>480
俺は括弧は極力省く派だから「みんな」には入らんようだが、
print は直後にファイルハンドルが来る事が多いから、
それらと統一感を出す為じゃないか?

>>494
二次元配列にすれ。
@gyou = (
['photo','pic','scan'],
['ph0001','pic001a','scan001'],
['ph0002','pic001b','scan002a'],
['ph0003','pic002','scan002b'],
);

# photo, ph0001, ph0002...
foreach (@gyou) { print $_->[0] }

# 入れ替えはスライスで。
@gyou[2,1] = @gyou[1,2];

あと「変数」を「関数」と覚え間違えてるのは直そうな。
0496nobodyさん03/05/02 00:54ID:???
>480

$rtn = print "hello,world"; #rtn 戻り値

私の持ってる超ド級初心者用の本の説明・・・

関数printはまず失敗しないから、使わないだけ。らすぃ・・
0497nobodyさん03/05/02 00:58ID:???
質問です。

変数$hogeの文字列のうち、
文字列"FOO"と一致する内容を、変数$bに置換するにはどうすればいいですか?
0498nobodyさん03/05/02 01:03ID:???
>497
正規表現。
あとは検索すればいくらでも出てくる。
049947703/05/02 01:33ID:???
494です、
495様ありがとうございます> <ノ
C++かじった時出てたけど色んなとこで紹介さえなかったからCGIに2次元は無いと思ってました、
でも入れ替えも簡単で嬉しくて嬉しくて> <、

でも foreach (@gyou) { print $_->[0] } の機能が試したけど不明、、
$_->はどんな意味があるのでしょうか?

>あと「変数」を「関数」と覚え間違えてるのは直そうな。
はい、、
まだしばらく間違えそうな気がするけど気を付けます、

なにはともあれ、本当に助かります ありがとうございます〜、 ノ(_ _ ノ
0500nobodyさん03/05/02 01:41ID:???
>>499
>CGIに2次元は無いと思ってました、

PerlとCGIを混同してないか?
Java/JavaScriptと同じで、時と場合によっては叩かれるから注意な。
0501nobodyさん03/05/02 03:08ID:???
$hoge = '/home/user/public_html/hoge.jpg';
を
$hoge = '/home/user/public_html;
にする一番スマートなやり方ってどんなのがありますか?
0502nobodyさん03/05/02 03:25ID:???
>>501
「する」ってどういう意味で言ってるのか??

そのまま下の代入をすればできるでしょ。
置き換えでもいいし。
0503nobodyさん03/05/02 03:37ID:???
>>502
そうか・・・
サンクス
0504nobodyさん03/05/02 03:43ID:???
>>503
何をしたいのかがよくわからないな?
0505nobodyさん03/05/02 04:39ID:???
>>504
スマソ とんちんかんなこと言ってた
0506nobodyさん03/05/02 05:29ID:???
本来の意味での二次元配列のない言語はCでは?直行的だし
0507nobodyさん03/05/02 07:39ID:???
>>506
(´-`).。oO(本来の意味の二次元配列ってなんだろ・・・?)
0508nobodyさん03/05/02 07:46ID:???
>>499
# [ ] で無名配列のリファレンスを生成
@gyou = (
['photo','pic','scan'],
['ph0001','pic001a','scan001'],
['ph0002','pic001b','scan002a'],
);

# 同じ事を別のやり方で。\ でリファレンスを得る
@gyou1 = ('photo','pic','scan');
@gyou2 = ('ph0001','pic001a','scan001');
@gyou3 = ('ph0002','pic001b','scan002a');
@gyou = (\@gyou1, \@gyou2, \@gyou3);

foreach $line (@gyou) {
# リファレンスをそのまま見ると、型とアドレスが返される
print "$line - ";
# デリファレンスする事で元のデータにアクセスできる
print "(@{$line}) - ";
# リストの要素を個別に見る
print "${$line}[1] - ";
# デリファレンスに矢印演算子を使う
print "$line->[0]\n";
}

あとは上に出したような単語で調べてくれ。
0509nobodyさん03/05/02 08:40ID:???
Cの[][]こそが本来の意味の二次元配列なのだが。
PerlとかJavaとかは配列の配列と言う。
0510nobodyさん03/05/02 11:20ID:???
Perlのは、多次元配列とは少し違うみたいな事
解説書とかに書いてあるね。
私はPerlとPHPしかやった事が無いので
本当の2次元配列が、どういうものなのか分からない(´〜`)
Cだとどういう風に書くの?ってスレ違いか…。
0511nobodyさん03/05/02 11:48ID:???
うpろだで入力フォームの確認を行いたいんですが
fileの初期値が指定できないことがネックになってます
結局は確認の時点で保存、その後、本書き込みの時点でコピー
ということでファイナルアンサーでしょうか

>>510
C・・・きれいな長方形
Perl・・・棒グラフ
漏れの中ではこんなイメージ
0512nobodyさん03/05/02 12:13ID:???
>>511
Perlの話じゃねえだろが。

そうだな。確認の時に一時ファイルに保存して、
本書き込みでリネームするなりコピーするなりかな。
一時ファイルの削除を忘れるなよー。
0513nobodyさん03/05/02 12:23ID:???
>>512
どもです。まぁ、Perlで作ってるんでw
じゃぁ、やぱーり一時ファイル作成→コピーかぁ
ただ、これをやると確認アタックかけられると一時ファイルが膨大になる罠
本書き込みがなくとも10分程度でファイルを自動的に消す仕様にしたとして
10分以内にアホほどうpられるとどうしようかと
投稿制限と併用が妥当ですか?
051425003/05/02 12:28ID:???
>>510
C 綺麗な配列はいいんじゃない?
Perl はどっちかというとツリー構造
0515nobodyさん03/05/02 12:32ID:???
>>513
fileの中身をhiddenで送り返してやれ。(藁
0516nobodyさん03/05/02 13:07ID:???
っていうか スレ違い
0517nobodyさん03/05/02 18:25ID:???
Cの場合は二次元配列というか二重配列って感じ。テーブルじゃないし。
0518nobodyさん03/05/02 19:53ID:???
 二 重 配 列 ワロタ
0519nobodyさん03/05/02 21:10ID:???
>>518
なんかおかしい?
配列を要素に持つ配列だからイメージとしてそんな感じだと言ったんだけど。
もちろんそんな呼び方はしていないぞ。
0520nobodyさん03/05/02 21:24ID:???
>>519
>Cの場合は二次元配列というか二重配列って感じ。
何か勘違いしてないか?
君の言う二重配列はint **hogeだろう?
で、二次元配列はint hoge[][] だろ。
”というか”はおかしい。
0521nobodyさん03/05/02 21:30ID:???
スレ違いは帰れ。
はい、次の質問。




いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。

1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0522nobodyさん03/05/02 21:33ID:???
>>520
それは二重ポインタだろうが。
Cでの二次元配列はメモリー上にまっすぐ並んでいるんだよ。おまえこそ分かっているのか?

>>521
スマソ もうやめる。
052352203/05/02 21:35ID:???
まっすぐ並んでいるんじゃ二次元と呼ぶにはふさわしくないだろと。

これで本当に最後
0524nobodyさん03/05/02 22:26ID:???
私は緑茶よりほうじ茶が好きだ
0525nobodyさん03/05/02 23:14ID:???
>>522
>それは二重ポインタだろうが。
>>519に対してレスしてるんだよ?スレを嫁。(そして俺はスレタイを嫁。

>メモリー上にまっすぐ
なんじゃそりゃ。メモリの配置方法は関係ないだろ?
そんなこと言ったらそもそも「配列」なんて意味を持たない。
配列の各要素について等サイズのメモリが割り当てられてるのが多次元配列。
>>519の言ってる「二重配列」は配列の各要素でサイズが違うもの。お分かり?
0526nobodyさん03/05/03 00:31ID:???
511だが仕様が固まったんで一応、書き込んどくyo
確認時にtempディレクトリを作って、そこに画像を保存
画像の名前はIPからcryptしたユニークIDにすることで同じIPからの
投稿は上書き処理にすることで無効化する

一時保存の前にtempディレクトリをstatして10分以上更新がなければ
tempディレクトリごと消去することで仮に確認だけを行って一時ファイルを無作為に増やすような
嵐行為は10分以上時間が空けば無駄になる仕組み
一時ファイルは本書き込みの際に移動&リネームで本来の画像名を与える
もっといい案があればくれろ。

てかこの板ってまともな質問できるスレ少ないな
052725003/05/03 00:57ID:???
>>526cryptだと重複すること有るな・・・
画像の名前からMD5をとって、md5のファイル名の一時ファイルを作成。
それと同時に、md5ファイル名対応ファイルを作成。
んで本書きこみは対応表から本ファイル名にリネーム保存、んでリストから対応データを削除つーのはいかが?
0528nobodyさん03/05/03 01:13ID:???
>>527
う〜ん、10分程度の時間ならそれほど重複することもないかなとか
というか、問題は確認時に保存した一時ファイルの処理だったり
本書き込みの際に処理をさせるとなると確認だけで本書き込みに移行されない場合は
そのファイルが永遠に残ってしまうので

確認時に保存したファイルをどう削除するかスリープさせて一定時間で消去ってのも・・・
052925003/05/03 01:16ID:???
>>527
それよりか、ファイルのバイナリデータ自体にMD5をかければ連投さけれるな・・・
例えば
12a6de24c6aec73c5c23da03c135a3c0.png
12a6de24c6aec73c5c23da03c135a3c0.txt

つーのをつくって、12a6de24c6aec73c5c23da03c135a3c0.txt
ファイル名を記述しとく。
ayaya.png
とか・・・
んで、statなりつかってリネーム、txtファイルは削除とかどうよ・・・
053047703/05/03 01:43ID:???
>508さん
ありがとうございます^^
配列を配列に入れられる物なんですね〜、、
下半分はまだ駆け出しにはよくわかんないのでメモして調べて見ます、


あと、質問です、、
-----------------------------------------
@gyou([〜間〜'day'],
[〜間〜'20030202'],
[〜間〜'20021231'],
[〜間〜'20030101'],
);
for ($i = 0; $i <= 51; $i++) {
$j += $i;
if ($head[$i][7] < $head[$j][7]){
@temp1 = @head[$i];
@head[$i] = @head[$j];
@head[$j] = @temp1;
}
}
------------------------------------------
日付順に並べかえしようと思ったんですが、1部しか並べ変わりません、、
(日付をわざわざ打つのも自動にできればいいけど無理でしょうか?、
それはそれで、
入替えってすぐ頭がこんがらがってしまって上手く構想さえ練れません、、
52列は有るんですが、変数i+1 i+2 i+3 〜〜 と52個取得して
forを51度も置いて並べ替えしなきゃだめでしょうか?、
前教えてもらった$〜[○,○]での変換がまだ上手く使えなくって・・T T
できれば助言ください〜、、
053125003/05/03 02:15ID:???
>>530
何故に@gyou なのに@headをソートしてるにょ?
それはおいといて、もっと簡単に

@gyou([〜間〜'day'],
[〜間〜'20030202'],
[〜間〜'20021231'],
[〜間〜'20030101'],
);

@gyou = @gyou[sort{ $gyou[$a]->[7] <=> $gyou[$b]->[7]} 0 .. $#gyou ];

これでいけるよ。
0532nobodyさん03/05/03 02:19ID:???
>>530
sortを使うといいよん。
053347703/05/03 12:42ID:???
>250さん
実はややこしい配列使ってるからちょっと内容変えてたらミスを TT
内容変えてた性と構文と専門用語よくわかってないせいでまったく動かずパニック、
ちょっと別の手段さぐってみます T T
ごめんなさい、、
053447703/05/03 12:58ID:???
あ・・動いた!;
Sortのこと調べてたら$aと$bはSort用のなんですね、、
forで$aつかって$b += $aなんて作ってたから動かなかったみたいです、
繰返したりしなくても単品で全て入れかえるんですね、、
C++少しかじったのが仇になった気分です、

中身を宣言しなくてもいい変数が有ると覚えておきます、(_ _、
ありがとうございました〜、
0535nobodyさん03/05/03 13:07ID:???
ちょっと質問なんだけど
perlでクッキー使わずにセッション管理って出来るのかな?
URLでセッションIDとかを引き継ぐのもアレだしどうしたもんかと
>1:自分はこう言う事がしたい
適当なページでログインした後はログイン状態の維持

スレ違いだったらスマソ
0536動画直リン03/05/03 13:10ID:TBhkUsV+
http://homepage.mac.com/hitomi18/
053725003/05/03 13:34ID:???
>>535
formのhiddenで回すとか・・・
cookieはブラウザからの確認が来るから自分的には使わず
053853503/05/03 14:06ID:???
レスthx

やっぱそれぐらいしか無いのね・・・
出来ればhtmlはそのままでSSIぐらいで片付く方法探してたんだけど

リンク元・ホスト・IPなんかで絞る方法ってのも無理だろうなぁ・・・
0539nobodyさん03/05/03 21:04ID:???
http://pc2.2ch.net/test/r.i/php/1051456859/i
こっちかなーっと迷ったのですが、とりあえずここで聞いてみます。
perlで書かれてる掲示板スクリプトで、書いて読む(読み込む記事数を指定できる)だけの簡単なやつをだれか知りませんか?探したんですが、どれも何か実用できるような機能がついていたので...
勉強に使います。
誰か教えてください、お願いしますm(_ _)m
0540nobodyさん03/05/03 21:10ID:???
いらっしゃーい、Perlのコーディングで困ってる人のスレです。
0541動画直リン03/05/03 21:10ID:TBhkUsV+
http://homepage.mac.com/hitomi18/
0542途方にくれています03/05/03 22:51ID:40KqJ28q
Socketで他のサイトのHTMLを読みにいってます。
cgiファイルに書いてたときは問題なく動いてたのですが
関数をplファイルに移し変えたとたん↓の行が動かなくなりました。
select(SOCKET); $|=1; select(stdout);
なんもエラーメッセージ出てないが、ここで処理が中断されてしまう。
なぜ?
0543nobodyさん03/05/03 22:58ID:???
>>542
消えろ厨房
0544nobodyさん03/05/03 23:11ID:???
Perlの入門書でお勧めありますか?
054554203/05/03 23:19ID:40KqJ28q
おしえてくれよ〜。
0546nobodyさん03/05/03 23:25ID:???
>>545
そこで処理が中断されている証拠を見せろ。

予想では君の証言が間違ってる。
恐らくスクリプトが実行すらされていないんだろう。違いますか?
054754203/05/03 23:35ID:40KqJ28q
接続部分コードをぬきだしたもの。
  # URL分解
  $SrcFileName =~ /http:\/\/([^:\/]*)(:([0-9]+))?(\/.*)?/;
  $host = $1;
  $port = ($3 ne "") ? $3 : 80;
  $path = ($4 ne "") ? $4 : "/";

  # 接続先情報構築
  $addr = (gethostbyname($host));
  $name = sockaddr_in($port,inet_aton($host));

  # 接続
print "0<br>";
  socket(S, PF_INET, SOCK_STREAM, 0);
print "1<br>";
  connect(S, $name);
print "2<br>";
  binmode(S);
print "3<br>";
  select(S);
print "4<br>";
  $| = 1;
print "5<br>";
  select(stdout);
print "6<br>";

実行すると"3"までプリントされる。
サーバのerror.logには
DBD::mysql::st execute failed:
が出てるけど関係ないよなぁ〜?
054854203/05/04 00:12ID:???
あー、もしかしてプリントされない理由はselectしてるから?
0549nobodyさん03/05/04 00:14ID:???
な?全部貼ればわかりやすいんだから、適当に省略しないこと
0550nobodyさん03/05/04 00:23ID:GUaqk5wH
あるAサーバに置いてあるサイトから
SSIコマンドでCGI/SSIが動く他サーバにあるCGIを動かせて処理結果を
Aサーバのサイトに表示させたいんですがどうすればよいでしょうか?
exec cgiでフルパスを指定したんですが間違いですか?
他サーバにはちゃんとcontent-typeヘッダの出力はしてます。
同じサーバにおいたらちゃんと実行できたのでプログラムの処理自体はまちがってないはずなんですが
0551nobodyさん03/05/04 00:32ID:???
 
055254203/05/04 00:34ID:???
>>548 selectも関係ないよな〜??

>>549
まだ何も解決してないyo!
たとえば、
「Perl サブルーチン集」
ttp://www.antun.net/tips/cgi/perl.html
ここにあるget_homepageをcgiファイル上にコピペして
(すこしバグ修正して)動くようにする。
で、get_homepageを別のplファイルにカット&ペースト。
するとアラ不思議。
select(SOCKET); $|=1; select(stdout);から先が動かねええぇっ!!
なぜ?
0553nobodyさん03/05/04 00:35ID:???
>>550
間違ってるからできないんだろうよ
レンタルカウンターとか考えてみ
0554nobodyさん03/05/04 00:37ID:???
SSIで別鯖の呼び出しできたっけ?
まぁ、スレ違いなのだが。
0555nobodyさん03/05/04 00:38ID:???
>>552
>関数をplファイルに移し変えたとたん
だからどこか間違ってるんだろ。
一部分だけ書いてなぜって聞かれて誰がわかるってんだ。
055654203/05/04 00:42ID:???
>>555
たとえば何が考えられるの?
最初からソース全部アップするのもアレでしょ。
0557nobodyさん03/05/04 00:44ID:???
>>556
どこかコーディング間違えてるしかないじゃん
0558nobodyさん03/05/04 00:46ID:???
>>550
>exec cgi
できないよ。includeでも使いな。
055954203/05/04 00:56ID:???
>>557
たとえばどういうとこが?

ちなみに
select(SOCKET); $|=1; select(stdout);
のあたりはWebページ読み込みの紋切り型の処理の一部のようだから
判る人にはわかるにちがいないと思ったんだよ〜。

もしかしたらpl化するときのFAQ的なことなんじゃないだろうかと思ったので
バグがどうとか言うより、plではselectがうまく動作しないとかいうことがあるのかな、とか
そんな話が聞きたかった。
0560nobodyさん03/05/04 01:00ID:???
>>559
>バグがどうとか言うより、plではselectがうまく動作しないとかいうことがあるのかな
そんなことはない。
どっちにしても全ソース晒さなければ答えようがない。
0561nobodyさん03/05/04 01:26ID:???
あ、俺思いついちゃった。
.plがCGIとして実行されていないのでは?
どうせsub get_homepageに渡す引数は$ENVから取ってるんでしょ?
空っぽだったりしてね。
0562nobodyさん03/05/04 01:27ID:???
ぐはっ。違うわ。空っぽだったら途中でreturnされるな。>542が変な改造してない限り。
0563連カキすまそ03/05/04 01:30ID:???
いや、待てよ。
>>547を見る限り変な改造してそうだ。
print "0<br>";
の前に
print "$SrcFileName<br>";
print "$host<br>";
print "$port<br>";
print "$addr<br>";
print "$name<br>";
を付け足して.cgi,.pl両方の結果を晒してみろ。
056454203/05/04 01:51ID:???
socket直前の変数の状態。
552のソースで実験したもの。

cgi版
address = http://www.geocities.co.jp/AnimeComic-Tone/4606/index.html
host = www.geocities.co.jp
port = 80
addr = メ兀セ
name = Pメ兀セ

pl版
address = http://www.geocities.co.jp/AnimeComic-Tone/4606/index.html
host = www.geocities.co.jp
port = 80
addr = メ兀セ
name = Pメ兀セ
056554203/05/04 01:53ID:???
cgiソース。
#! /usr/local/bin/perl
require "test2.pl";
use Socket;
{
  # HTMLヘッダ
  print "Content-type: text/html\n\n";
  print '<html><head>'.
    '<meta http-equiv="content-type" content="text/html;charset=x-sjis">'.
    '<title>$strProject</title>'.
    '</head><body>';
  if ( 1 )
  {
    # cgi版
    my $html= get_homepage('http://www.geocities.co.jp/AnimeComic-Tone/4606/index.html');
    print "$html<br>";
  }
  else
  {
    # pl版
    my $html= &test2'get_homepage('http://www.geocities.co.jp/AnimeComic-Tone/4606/index.html');
    print "$html<br>";
  }
  # HTMLフッタ
  print '</body></html>';
  exit;
}
#この後ろにget_homepageが来る
#ただし、return値は $homepage{"body"} にしてある
056654203/05/04 01:55ID:???
plファイル。(test2.pl)
package test2;
use Socket;
$system_agent = 'unknown';

sub get_homepage
{
  # get_homepage
  # ただし、return値は $homepage{"body"} にしてある
}

1;
0567nobodyさん03/05/04 02:13ID:???
>>565
もーめんどくせーから固めてどっかにうpしろ。
0568nobodyさん03/05/04 02:22ID:???
>>542
当然のこと聞くけど、CGIじゃなくてコマンドとして実行したよね?
056925003/05/04 05:40ID:???
多分、拡張子をplに変えただけで動かないので、あるのならば、cgiで自分のファイル名
を指定してるところを書き変えてないとかしょーも無いところでないの?

おおよそ、解ってないんであればソースを全部アプロダなりに上げるぐらいするべきでは?
スレ汚れすぎてみる気もせんわい・・・
0570nobodyさん03/05/04 10:37ID:???
関数をplファイルにしてrequireしたら動かないって言うんじゃ
コーディングミスしかないわな
0571nobodyさん03/05/04 18:11ID:???
あるサンプルスクリプトを見て疑問に思ったことがあるので質問します。

代入された値が数字でないものを
インクリメントするというのはどういうことなのでしょうか?
0572nobodyさん03/05/04 18:29ID:???
あ、>>571は俺の読み間違いだったみたいです。スミマセン
0573nobodyさん03/05/04 20:34ID:???
>>571 マジカルインクリメントのことか?
0574nobodyさん03/05/04 21:17ID:SY2E/p10
use strict;
use Socket;

my $host = 'live2.2ch.net';
my $port = 80;
my $path = '/news/subback.html';

〜省略〜

print SOCKET "GET $path HTTP/1.0\r\n";
print SOCKET "\r\n";

while (<SOCKET>){
m/^\r\n$/ and last; }
print "Content-type: text/html\n\n";
while (<SOCKET>){
print ($_);
}

socketでニュー速のsubback.htmlを取得したいのですが,
変なページに飛ばされてしまいます.
イラク情勢のsubback.htmlは問題なく取得できるのですが・・
どうやったらニュー速のsubback.htmlを取得できるんでしょうか?
0575nobodyさん03/05/04 21:24ID:???
ブラウザで見る時は、
GET /news/subback.html HTTP/1.1
Host: live2.2ch.net
を出してるみたいだね
0576nobodyさん03/05/04 21:33ID:SY2E/p10
>>575
print SOCKET "GET $path HTTP/1.1\r\n";
print SOCKET "Host: live2.2ch.net\r\n";
print SOCKET "\r\n";

こんなふうにしたらできるようになりました.どうもありがとうございました.
0577nobodyさん03/05/04 21:37ID:???
GETでファイルを一つずつ取ってくるのではなく、
複数同時にやって処理を高速化したいと考えています。
forkを使って作ってみたのですが、プロセスの終了を待たずに
forkを繰り返すスクリプトでは、どうしても途中でエラーになってしまいます。
(win2kでActivePerlを使用)

forkを使う何かうまい回避方法か、
forkを使わないなるべく簡単な方法はありませんか?
■ このスレッドは過去ログ倉庫に格納されています