【Perl】初心者コーナー Part2

このエントリーをはてなブックマークに追加
1名無しさん
【Perl】初心者コーナー Part2

初めて来た方、初心者はまずこのスレッドから始めよう。
尋ねる前に同じ質問がないかこのスレや旧スレを一通り見てみよう。
案外答えはもう書かれているかもしれない。
レスは3日以内に誰かがしてくれると思う。
質問はなるべく具体的にしてもらった方が答える側も助かるよ。
telnet で実行したエラーメッセージを書いておくとかね。
print "Content-Type: text/html\n\n"; の書き忘れなんてのはよくあることっす。

旧スレ>
http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980&ls=100
やろうとしていることはここにあるかも「Perlメモ」
http://www.din.or.jp/~ohzaki/perl.htm
モジュール(*.pm)の日本語訳など「Perlの小技」>
http://member.nifty.ne.jp/hippo2000/perltips/
オフラインでPerlのテスト環境を整える>
http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980&st=88&to=101
2名無しさん:2000/10/18(水) 07:04
$email = 'age';
3パールはじめました:2000/10/19(木) 04:15
ライブラリとモジュールってどう違うんでしょうか?
4名無しさん:2000/10/19(木) 12:24
C言語で言うところの「#include」をやりたいのですが、
Perlではどうやるのでしょうか?

ちなみに、別のツールで作ったデータ配列ファイル、例えば
"abc"@`
"123"@`
"あいうえお"@`
のような物を

@datas = (
#include "a.dat"
);

のようなニュアンスで取りこみたいのですが・・
5名無しさん:2000/10/19(木) 13:30
>>4
a.dat に
--------
@datas=('abc'@`'123'@`'あいうえお');
------
と書いてあれば

require 'a.dat';

でOK。

6ブチ:2000/10/19(木) 13:46
>>3
モジュールは、C++などで言うクラスみたいです。
参照渡しが使えるので結構便利みたいですが詳しいことは使ってないのでわかりません。
詳しい人、補足お願いします。

>>4
#include と同じような機能だとしたら require 'a.dat'; かな?
require を使うのなら a.dat 内の最後に 1; を書いておかないと構文エラーと解釈されるので注意。
それに @datas = (.....); をまるごと データの方に書かないと駄目だろうね。

Perlとは関係ないけどそのような #include の使い方はお勧めできないなあ。
74です:2000/10/19(木) 13:59
>>5-6
どうもありがとうございました。うまく行きました。
とりあえずはこの方法でやって、後でもっといいやり方も考えてみます。
8名無しさん:2000/10/19(木) 15:15
>>3 >>6
man perltie
man perlmod
9PPP:2000/10/19(木) 16:10
職場を異動になりperlを使うようになりました。
プログラムは一度も作成したことないので、どのようなもので
勉強すればいいかわかりません。何かいい参考書籍がありましたら
教えていただけますか?独習perlとか簡単そうかなぁ?と思ってる
ですが、どうでしょう?
10名無しさん:2000/10/19(木) 17:06
11PPP:2000/10/19(木) 17:14
>10さん
ありがとうございました。
参考にさせていただいます。
12名無しさん:2000/10/19(木) 22:37
基本的なことかと思いますが質問させてください。
yesかnoを入力して分岐させたいのですが、yでもnでも
結果がelseの場合になります。どこが間違ってるでしょうか?
----
print "はい か いいえを選んでください(Y/N):\n";
$yes_no="";
$yes_no=<STDIN>;
$yes_no =~ tr/A-Z/a-z/;
if ($yes_no eq "y"){
print "Yを選択しました。\n";

}elsif($yes_no eq "n"){
print "Nを選択しました。\n";
}else{
print "YかNを選んでください。\n";
}
13>>12:2000/10/19(木) 22:44
そういうときはまず、変数の値が実際にどうなっているのかを確認すべし。
print "yes_no=[$yes_no]\n"; なんて行を1行おきに埋めこんでみよ。
14名無しさん:2000/10/19(木) 22:54
>>12
$yes_no =~ tr/A-Z/a-z/;
の後に、
$yes_no =~ s/[\r\n]//g;
を書く。
15名無しさん:2000/10/20(金) 04:05
フォームから入力された文字で半角英数字以外を拒否したいのですが
以下のようにすると半角英数字が一文字でも入っていればチェックに引っかかりません。
どのように書き直せば良いのでしょうか?

if( $check !~ /[a-zA-Z0-9]/){
print "Content-type: text/html\n\n";
print "<html><title>ERROR</title><BODY>ERROR</BODY></HTML>";
exit;
}
16名無しさん:2000/10/20(金) 04:15
if ($check =~ /\W/) とか
if ($check =~ /[^a-zA-Z0-9]/) とか
17名無しさん:2000/10/20(金) 04:32
>16
ありがとうございます。
でも、それでは出来ませんでした。
18ブチ:2000/10/20(金) 04:50
>>17
できないというのは半角英数字以外が $check に入っていても
if の内容が選ばれてしまうってことだよね?if が選ばれないという逆の意味ではなくて。
その時の $check の内容を教えて。
19ブチ:2000/10/20(金) 05:13
ごめん、逆は自分だった。
英数字以外が $check に入ってたら if のエラー表記だね。
それがされてないってことだよね。
20minima:2000/10/20(金) 06:54
>>15
こんなもんでいかがでしょうか。
半角英数字を全部消してみて,まだ何か残っていればエラーとします。
$temp = $check;
$temp =~ s/\w//g;
if ($temp ne ''){
print "Content-type: text/plain\n\nError";
exit;
}
21minima:2000/10/20(金) 07:02
あ,すんまそん。
16 がダメだったということは,20 のもダメのような気がしてきました・・。
2215:2000/10/20(金) 07:08
>>20
頭が固くてそんな発想は思いつきませんでした。。。
この方法だと
$temp =~ s/\.//g;
のようにすれば許容範囲も簡単に広げられますね。
本当にありがとうございました。
2315:2000/10/20(金) 07:11
>>20-21
21の書き込み見ないで書き込みしてしまいました・・・。
でも、実験してみてちゃんとできました。
24Perl仮面:2000/10/20(金) 11:07
ド素人が(--#、とあきれられそうですが、教えて下さい。
Perlスクリプトをコマンドラインから実行する時、
引数の数と内容を求めるにはどうすればいいのでしょうか。
(Cでいうmain()におけるargcとargvです)
「$何とか」という定義済み変数があるのでしょうか...
25RTFM:2000/10/20(金) 11:50
@ARGV
26ブチ:2000/10/20(金) 12:09
Perl だと $ARGV[0] からもう引数なので注意。
27ブチ:2000/10/20(金) 12:12
補足。
argc に相当するのは $#ARGV 。
28ひろゆさ:2000/10/20(金) 12:30
http://members.tripod.co.jp/hiroyusa/a.txt

2chのlogを落とすツールを作ったんですけど、
更新されてないlogを落としたり、
更新済みlogを落とさなかったりするんです。
どこにバグがあるんでしょう?

他スレで質問したけどあまり反応がないのでよろしく。
29名無しさん:2000/10/20(金) 12:42
>どこにバグがあるんでしょう?
お前のノーミソ
30Perl仮面:2000/10/20(金) 13:12
おぉ、ありがとうございます>RTFMさん、ブチさん
おかげで無事にスクリプトが動きました。
それにしても速く、しかも親切なレスポンス、
本当にここは2chなのでしょうか。
と思ったら(29を見たら)やっぱ2chですね。
31名無しさん:2000/10/20(金) 14:01
RTFM ってのは Read The Fuxx'in Manual のことなのだろうか
32名無しさん:2000/10/20(金) 15:10
VBScriptのFormatNumber()のように、
数値の3桁毎にカンマを入れる関数って
ありますか?
printf()で指定できるのかなとも思ったのですが
やり方がわかりません。涙。
33名無しさん:2000/10/20(金) 17:00
またFuxxin系の質問だ。(藁
34HナインボールH:2000/10/20(金) 17:36
自分のWinにperlいれたやつでは動くんだけど、サーバーにアップすると動かなくなるのはなぜっすか?
35Tea:2000/10/20(金) 17:41
すみません、本当にしょぼい質問というか的ハズレかもしれないん
ですけど、、

*.pl = *.c
*.cgi = *.exe

こんな感じなんでしょうか、、感覚的に…。
36名無しさん:2000/10/20(金) 17:45
>32
カンマ区切りのための組み込み関数はないので自作する。
このスレの>>1で紹介されてる「Perlメモ」に解答あり。お勧め。
perldoc -q "numbers with comma" にも解答あり。ただし英語だ。
37名無しさん:2000/10/20(金) 17:50
>34
(1) #!/usr/bin/perl 等のパスが違う。
(2) バイナリモードでアップロードしたため改行コードが異なり
  結果として(1)の状態になっている。
(3) 使用しているモジュールがサーバにない。
・・・などはありがちですな。
38名無しさん:2000/10/20(金) 19:46
>34
パーミッションってことはないよね・・
あとNIFTYとかみたいにディレクトリ構造が特殊とか・・
39名無しさん:2000/10/20(金) 20:38
>>34
明日のタメに その1 (Perl使いへの道)
http://tako.2ch.net/test/read.cgi?bbs=perl&key=958633101
4012:2000/10/20(金) 23:44
>13さん
変数は、=~ tr/A-Z/a-z/; の順序に依存していました。
/A-Z/a-z/なら小文字に、/a-z/A-Z/は大文字に。TR演算子は
小文字・大文字どちらも受け付けokにするという物だと思ってたのですが
小文字を大文字にしたい場合、大文字を小文字にしたい場合と使い分けるようにします。
>14さん
思った通りの処理が出来ました。ありがとうございます。
正規表現を使うのですね。ちょっとややこしそうなのでじっくり本を
読んでみようと思います。疑問なのですが、文字を扱う場合は
全て正規表現を使った方が良いのでしょうか?Y/Nのたった1文字
を入力するだけなので、入力ミスをしてない場合にも処理がおかしくなる
のが不思議なのですが。でもうまく動かないのだからやっぱり使った方がいいのでしょうね…。
41ブチ:2000/10/21(土) 00:13
>>34
telnet が使えるのなら端末からCGIを実行させて
エラーを見ればある程度原因も想像つくかと。
Perl がそもそも実行されてない場合は改行コードか、perl のパス間違い。

>>35
*.pl と *.cgi はソースと実行ファイルを兼用しているという点では同じです。
ですからあえて書くなら
*.pl = *.cgi = (*.c + *.exe)
かな?無理矢理過ぎるってしばかれそうですけど。
でも本当はそれぞれ微妙に違うのでイコールにはできません。

>>40
この >>12 については改行文字を削るのに chomp($yes_no=<STDIN>); にしてもいいと思います。
<STDIN> からのキー入力は「改行文字が来ると終わり」と判断してその改行も
データに含んでしまってるので削る必要があるんですね。
正規表現はむつかしいことをしているので処理に時間かかります。
上の chomp (=改行削り) のように使わないで済むところまであえて使う必要はないです。
4212:2000/10/21(土) 00:20
>ブチさん
疑問が解けました!!
なるほどー。改行のことをすっかり忘れていました。
丁寧に解説してくださって本当にありがとうございます。
4312:2000/10/21(土) 00:27
今になって13さんのアドバイスの意味も分かりました。
実際に改行された結果も見てたのに全然気付かなかった。
もっと修行します…。
44名無しさん:2000/10/21(土) 02:40
ずーーとわからなかったのですが、勇気を出して質問します。
シェルで動作確認する時に perl ./hoge.cgi とかしますよね?
で、hoge.cgiにクエリーを渡したときの動作確認はどうやるの
でしょうか?? 一応、 perl ./hoge.cgi?mode=init
とかやってみましたけどダメですね。
45ブチ:2000/10/21(土) 03:35
>>44
cgi-lib.pl などのライブラリを使って入力を受け取っているなら、
perl ./hoge.cgi mode=init opt2=2 opt3=3
の形式がWeb 上で実行する
http://www.hatena.com/cgi-bin/hoge.cgi?mode=init&opt2=2&opt3=3
に相当します。それ以外だとよくわかりません。

まあ perl ./hoge.cgi mode=init でやってみてください。
46名無しさん:2000/10/21(土) 05:04
>44
GETメソッドのCGIなら、環境変数QUERY_STRINGに
引数をそのまま代入しちゃえばオーケー。
csh系: setenv QUERY_STRING 'mode=init&name=hoge'
sh系: export QUERY_STRING='mode=init&name=hoge'
とか設定しといて、perl ./hoge.cgi です。

でもPOSTメソッドの場合はどうするんでしょ。
47名無しさん:2000/10/21(土) 05:29
うーん、簡単なテストの場合なら
スクリプトの中にそのまま書いちゃうのが一番早いかも。

#read(STDIN@`$buffer@`$ENV{'CONTENT_LENGTH'});
$buffer='test1=hoge1&test2=hoge2';

他にいい方法あったらきぼーん。
48名無しさん:2000/10/21(土) 05:30
スクリプト内部のクエリ処理部分でバッファに直接クエリ文字列を打ちこんでおく。
嫌な人は嫌でしょう
49名無しさん:2000/10/21(土) 05:33
KENTさんのYYBBSをこの様な上部にタイトル一覧が
出る様にしたいんですけど・何処をどうやってスクリプト
変更したらいいか、教えてください
http://www1.wisnet.ne.jp/~tech/cgi-bin/yybbs/yybbs.cgi
こういう風にしたいです。
5044です:2000/10/21(土) 06:42
44-48さん深夜にもかかわらず早速ご回答いただき
ありがとうございます。どの方の方法でもOKみたいです。
ずっと悩んでましたので、助かりました。
本当にありがとうございました。
51名無しさん:2000/10/21(土) 07:42
できるだけ、実機と同じWebさばを立てて、そとから
アクセスするのが吉かと。
文字コードとか、エスケープシーケンスのからみもあるし。

>49
これは、HTMLの直埋め込みでいいんでわないかと。
5249:2000/10/21(土) 07:57
具体的に書くスクリプトを教えて頂けると有り難いです
53ブチ@1:2000/10/21(土) 08:09
他にすることもあるというのに逃避…。
>>49 の掲示板に近いかと思います。

機能>
yybbs.cgi に索引を付ける。手持ちの 3.51 では問題なく動作。
行番号は KENT-WEB の YY-BOARD v3.51 を解凍した直後のソースのもの。
ソースいじってる人はずれてる可能性あるので各自調整してください。
下のソースの行頭にある番号は見やすくする為なので
コピペする場合は削っておいてください。
もう改造工房の範疇ですね…長いし。逝きます。

============================================================
索引表示部
 391 行目に下のソースを挿入。(索引表示部)
------------------------------------------------------------
388:# ページ区切り処理
389:$start = $page + 1;
390:$end = $page + $p_log;
391:
392:# 記事を展開
393:open(IN@`"$logfile") || &error("Open Error : $logfile");
394:$top = <IN>;
------------------------------------------------------------
388:# ページ区切り処理
389:$start = $page + 1;
390:$end = $page + $p_log;
  print "\n&lt;!--Thred Index--&gt;\n";
  print "<TABLE BORDER=1 WIDTH='90%' BGCOLOR=\"$tbl_color\" CELLSPACING=0 CELLPADDING=2><TR><TD>\n";
  $i = 0;
  open(IN@`"$logfile") || &error("Open Error : $logfile");
  <IN>;
  foreach (<IN>){
    ($no@`$reno@`$date@`$name@`$mail@`$sub@`
    $comment@`$url@`$host@`$pw@`$color@`$icon) = split(/<>/@` $_);
    if ($reno eq "") { $i++; }
    if ($i < $start) { next; }
    if ($i > $end) { next; }
    if ($reno ne "") { next; }
    print "[<STRONG>$no</STRONG>] <A HREF=\"#$no\">$sub</A> \n";
  }
  close(IN);
  print "</TD></TR></TABLE>\n<BR>\n\n";
392:# 記事を展開
393:open(IN@`"$logfile") || &error("Open Error : $logfile");
394:$top = <IN>;
54ブチ@2:2000/10/21(土) 08:09
============================================================
索引の飛び先
 424 行目を消して下のに置き換える(飛び先を番号で指定)
------------------------------------------------------------
420:  if ($reno) { print "<hr noshade size=1 width='85%'>\n"; }
421: print "<table border=0 cellpadding=2><tr>\n";
422:  if ($reno) { print "<td rowspan=2 width=40><br></td>"; }
423:
424:    print "<td valign=top nowrap><font color=\"$sub_color\"><b>$sub</b></font> ";
425:
426:    if (!$reno) { print "投稿者:<b>$name</b> <small>投稿日:$date</small> "; }
427:    else { print "<b>$name</b> - <small>$date</small> "; }
------------------------------------------------------------
420:  if ($reno) { print "<hr noshade size=1 width='85%'>\n"; }
421: print "<table border=0 cellpadding=2><tr>\n";
422:  if ($reno) { print "<td rowspan=2 width=40><br></td>"; }
423:
    print "<td valign=top nowrap>";
    if ($reno eq "") { print "[<STRONG><A NAME=\"$no\">$no</A></STRONG>] "; }
    print "<font color=\"$sub_color\"><b>$sub</b></font> ";
425:
426:    if (!$reno) { print "投稿者:<b>$name</b> <small>投稿日:$date</small> "; }
427:    else { print "<b>$name</b> - <small>$date</small> "; }
------------------------------------------------------------
5549:2000/10/21(土) 22:08
>ブチさんへ
有難う御座います
早速、YY-BOARD v3.51 を解凍した直後のソースを
指定どおりに書き換えましたが、INTERNAL SERVER ERROR 500
となってしまいのす、391 行目下からの変更でエラーに
なるみたいです、解決法をお願いします。
56ブチ:2000/10/21(土) 23:12
>>55
・先頭の番号が削ってない
・ソースではタブの代わりに全角空白「 」にしてあるのでタブに直す。
・ブラウザでは長い文
 print "<TABLE BORDER=1 WIDTH='90%' BGCOLOR=\"$tbl_color\" CELLSPACING=0 CELLPADDING=2><TR><TD>\n";
 などが勝手に改行されてる可能性があるので直す。

思い当たる原因はこれくらいかな。
もしtelnetで実行できる環境なら perl.yybbs.cgi を実行した時の
エラーメッセージを書いてもらえれば原因特定できるんじゃないかと。
変更でエラーになったというのは1の方ですよね?
57名無しさん:2000/10/21(土) 23:53
>>55
http://www.kent-web.com/support/faq/faq1.html#9
↑これを使ってチェックしてみるとか……。
5849:2000/10/22(日) 00:32
>ぶちさんへ
本当に有難う御座います。
タブに直したら動きました。
お忙しい中、私の要望に答えていただき感謝しています。
ブチさんは何か自作のperl公開やホームページを
お持ちなんですか?
>57さんへ
わざわざ済みませんです。有難う御座います。
59ブチ:2000/10/22(日) 00:45
サイトは持ってますがCGIは公開はしてません。
配布できるようなわかりやすい造りのものじゃないので…。
60ブチ:2000/10/22(日) 00:50
なんか変な表現…えらそうだし。
自分と身内専用で配布用には作ってないということで…。
問題なく動いたようでなによりです。
61名無しさん:2000/10/22(日) 01:19
winでいいエディタ無いですかねぇ?
ど素人なもんで、perlのifとかforとか$〜ってのの
色なんて変わるとわかりやすいんだが。。。
62名無しさん:2000/10/22(日) 01:24
perlediter http://www.k-collect.net/
peggy(シェア) http://www.vector.co.jp/soft/win95/writing/se110764.html?l
terapad http://www.vector.co.jp/soft/win95/writing/se104390.html?l

個人的にはterapadがお勧め。軽いし見やすい。
6361:2000/10/22(日) 01:27
>62さん
おおー、有難うございます。
早速試してみます!!
64Tea:2000/10/22(日) 22:03
ブチさん、ありがとうございました!
頑張って勉強します、、。
65初心者です:2000/10/22(日) 22:36
初心者です。
ぷちボードをHTML表示にしたいのですが
どうすればいいでしょう。
よろしくおねがいします。

66名無しさん:2000/10/22(日) 23:04
>>65
マルチポストなので無視しよう。
67名無しさん:2000/10/22(日) 23:16
裏ニュース(http://www.uranews.com)の転送サービスをうちでも
やってみたいと思ってます。
CGIはずぶの素人なので自作するのはちょっと無理がありますが、
なんとか無料で教えて頂けないでしょうか。
68>67:2000/10/22(日) 23:32
金が無いなら知恵を出せ、知恵が無いなら汗をかけ。
金も知恵もない君は、裏ニュースに平身低頭聞くべし。
69名無しさん:2000/10/23(月) 00:17
ハッシュからランダムな要素を取り出す、効率の良い方法はありますか?

@key = keys %hash;
$random = $hash{$key[int rand @key]};

こんなのしか思い浮かばなくて…。
70あっくん:2000/10/23(月) 01:00
>>67 bind 使え(いいかげん) http://www.isc.org/products/BIND/
71japu:2000/10/23(月) 06:51
>>69
%majokko = (creamy => "mami"@` magical => "emi"@` pastel => "yumi");
$moe = (values %majokko)[int rand values %majokko];
だと、萌えますか?

一度だけ行うのであれば、一時変数を使わないこの方法が速いと思う。
複数回の場合 @values = values %majokko; として配列に代入しておいて、$moe = $values[int rand @values]; とするのが速いはず。
72名無しさん:2000/10/23(月) 07:00
どうしてperlスクリプトには「¥」がいっぱい書いてあるんですか?
73名無しさん:2000/10/23(月) 07:07
クッキーについてなんですが

hoge = foo;
というものを以前に記憶させているとして

1.このkeyとvalueの両方を削除する方法
2.keyはそのままでvalueのみを書き替える方法

を教えてください。
74 :2000/10/23(月) 10:30
>>72
『「¥」がいっぱい』なのは初心者な証拠。
qq(value="hoge") 使えば読みやすく、効率が上がる
75名無しさん:2000/10/23(月) 12:28
CGIを設置したカレントディレクトリにある
ファイルとフォルダを判別するにはどうしたよいですか?
76japu:2000/10/23(月) 13:24
73:
1. hoge=; として expires に過去の日付を指定
2. hoge=bar; として送出
では?

----
75:
if(-f $file) {
&nbsp;&nbsp;&nbsp;&nbsp;print "$file is a regular file.\n";
} elsif(-d $file) {
&nbsp;&nbsp;&nbsp;&nbsp;print "$file is a directory.\n";
} else {
&nbsp;&nbsp;&nbsp;&nbsp;print "others\n";
}
では? -X 演算子の項目を参照。
7769>71:2000/10/23(月) 23:19
ありがとうです。やっぱり配列を使うしかないんですね。

まあ、あんまり大きくないからいいか…。
78名無しさん:2000/10/24(火) 05:55
>>74
それってなんですか?
79名無ιさん:2000/10/24(火) 06:39
>>78
例えば、CGIで
<BODY TEXT="black" BGCOLOR="#CCCCCC" link="#0000FF" vlink="#660099" background="../ba.gif">
みたいなHTMLを吐き出させようとする場合。

この時、
print "<BODY TEXT=\"black\" BGCOLOR=\"#CCCCCC\" link=\"#0000FF\" vlink=\"#660099\" background=\"../ba.gif\">";
みたいな書き方だと『「¥」がいっぱい』なスクリプトになる。
そこで、
print qq(<BODY TEXT="black" BGCOLOR="#CCCCCC" link="#0000FF" vlink="#660099" background="../ba.gif">);
みたいにすれば読みやすくなる、と。
80名無しさん:2000/10/24(火) 07:55
>>79
どんな時に\を書くのですか?
”の前後以外には、どういうところに書きますか?
なんかいっぱい見かけるんですけど・・・
81名無しさん:2000/10/24(火) 08:38
なんか変な癖に見えるぞ。
シングルクオートの方がいいんじゃないか >>79
82>81:2000/10/24(火) 10:18
同感。
変数がないのにダブルクオート相当のものを使うのも、初心者な証拠(笑
83名無しさん:2000/10/24(火) 10:48
実際には変数あるんじゃないの

おいらもいつも qqつかってます
あとはひあどきゅめんと
84名無しさん:2000/10/24(火) 14:36
フォームから送られてきた半角カナを全角カナに変換したいのですが
jcode.plを使って
&jcode::convert(*kana@` "sjis"@` "z");
とかやってもうまくいきまへん。どないしたらエエんでしょうか?
85名無しさん:2000/10/24(火) 14:44
SOCKETモジュール使って
タイムアウト値の設定はどうすればいいですか?
86>84:2000/10/24(火) 14:48
&jcode'h2z_xxx(*line)
   JIS X0201 KANA (so-called Hankaku-KANA) to X0208 KANA
   (Zenkaku-KANA) code conversion routine. String xxx is
   any of "jis"@` "sjis" and "euc". From the difficulty
   of recognizing code set from 1-byte KATAKANA string@`
   automatic code recognition is not supported.
8781:2000/10/24(火) 15:17
俺はシングルクオートと、ヒアドキュメントしか使わない。
qqは実は79で始めて知ったが、さほど優れた書式とも思えない。
ちなみにヒアドキュメント中の変数は{}で囲みまくってる。
8884>86:2000/10/24(火) 15:27
つまり変換前のコードがjis@` sjis@` eucのどれであるかを
あらかじめ把握しておかなければならないんすね。
フォームから送られてきたばかりの半角カナって、
%記号のあとに16進コードが続いているから
$name =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C"@` hex($1))/eg;
で%記号を取って、16進バイナリに変換して
&jcode'convert(*name@` "jis");
とやってるから、この後に
&jcode'h2z_jis(*line);
を追加してみることにするです。
ありやとやんした > 86
89名無しさん:2000/10/24(火) 16:23
>85
ていうと、use IO::Socket で楽チンしようとせずに、
use Socketでガリガリ書きたいと? 漢ですな。
やっぱconnectの直後にalarmを仕掛け、一定時間が
経過したらソケットを強制的にクローズするのかな。

use Socket;
(中略)
connect(SOCK@` $sockaddr_in);

$timeout_flag = 0;
$SIG{'ALRM'} = sub{ close(SOCK); $timeout_flag=1; };
alarm(60); # 60秒でタイムアウト

while (<SOCK>) {
(作業)
}

if ($timeout_flag) {print "タイムアウトで失敗";}
else {print "正常終了";}
90名無しさん:2000/10/24(火) 16:34
まじかよ。(じゃねーな)
しかし初心者までソケットゴリゴリのスクリプト
書くのはなんでかね。
おれなんか使ったことねえよ。
# あ、初心者か(藁

91名無しさん:2000/10/25(水) 00:31
useした後にrequireするとエラーになってしまいます。
requireを絶対パスで指定すれば回避出来ますが、
複数のファイルをrequireする時に面倒です。
もっと効率的に回避するというか、他の回避法はないでしょうか。
92名無しさん:2000/10/25(水) 01:06
フォームに入力された郵便番号が架空のものかどうかを
チェックしたいのですが、なにか手軽で良い方法はないもの
でしょうか?郵政省関連のページから郵便番号データはダウンロード
してきましたが、これがまた巨大なサイズで約16Mbytes、途方に
暮れております。
93名無しさん:2000/10/25(水) 01:29
結局どの文字の前(後)で『¥』使うんだろう・・・

使うな派が大多数か・・・

でも、配布されてるCGIって、¥がいっぱいな気がする・・・。
94名無しさん:2000/10/25(水) 01:36
>>92
その郵便番号で郵便を出してみる
届いたら有効な番号、というのはどう?

というのは置いといて、16MBつーのは地域名も入ってるんでしょ?
番号だけのファイルにするとかDBMに入れるとか、ツリーを構築して
そのままバイナリでファイルにしておくとかすればいいんじゃない?
9581:2000/10/25(水) 02:19
不親切君です。

>>93
それはPerl初級者の作ったスクリプトだから。

>>94
DBMに入れる案は俺も賛成。
住所をvalueにすれば、住所の入力が省けるかも知れなくてラッキー

96名無しさん:2000/10/25(水) 02:20
>>92
要SQLか?
9792>94..96:2000/10/25(水) 03:07
16Mbytesつーのは地域名とか、その読み仮名もはいってました。
おっしゃるとおり、郵便番号と地域名だけ抜き出せばもっと小サイズ
になるです。

PostgreSQLの本を買ってきてヘロヘロ読んでる最中です。
PHPとかいう言語(なのかな?)も覚える必要がありそうで
ドキュソな僕に前途は多難であります。(mySQLつーのもあるのね)
番号と住所だけならDBMだけでもイケるんかなあ。
「CGIのための実践入門Perl」著:アーク・シンク・タンク 三島俊司
を参考にしてるんだけど、これによると「1Kから4Kバイト程度の小規模
で単純なデータベースを管理するライブラリ云々」とあって、ちょっと
サイズが・・・(いや、一番足りないのは自分のオツムと
重々わかっております)

郵便番号が7桁、フルに入力されてなくても住所データから
補完できるようにすれば、エンドユーザには親切かなぁと
その逆に7桁ちゃんと入力されてれば、ある程度住所は確定できるし
などと漠然と考えてる段階です。
98名無しさん:2000/10/25(水) 05:14
それだったらRDBMSだろうなあ。。
99名無しさん:2000/10/25(水) 15:54
CGIで将棋かオセロやろうと思ってんだけどどうよ。
100名無しさん:2000/10/25(水) 16:30
コンピュータの先読み部分が時間がかかる上に
CGI だと普通毎回読み込む必要があるのでJAVAの方がストレスが少ないかも。
101名無しさん:2000/10/25(水) 17:53
HTTP_REFERERってCGIのみで取得するのは無理なんですか?
SSIもJavascriptも使えません。
102名無しさん:2000/10/25(水) 18:15
>101
アホ発見!
103名無しさん:2000/10/25(水) 18:16
パールなら $ENV{HTTP_REFERER} です。
104名無しさん:2000/10/25(水) 18:41
パールなら $cgi->referer です。
105名無しさん:2000/10/25(水) 21:31
javascriptの
escape("文字")
に値することをperlで出来ませんか?

↓みたいにやってみたんですが、出来ませんでした。
$aaa = "文字";
$aaa =~ s/(\W)/sprintf("%%%02X"@` unpack("C"@` $1))/eg;

よろしくお願いします。
106>99:2000/10/25(水) 21:43
オレもJavaでやった方が楽だと思うが、もしかして対象がi-modeだと
するとそれもできん。しかしi-modeの入力ってストレスたまり
まくりですじゃ。
107名無しさん:2000/10/25(水) 22:28
>>105
できましたけど?どういう状況でできなかったんでしょか。

ソース:
$aaa = "文字";
$aaa =~ s/(\W)/sprintf("%%%02X"@` unpack("C"@` $1))/eg;
print $aaa;

結果:
%95%B6%8E%9A
108105:2000/10/25(水) 22:34
>>107
javascriptで

document.write( escape("文字") ) ;

結果:
%u6587%u5B57

になります。
これをperlでしたいのですが、無理ですか?
109107:2000/10/25(水) 22:41
それunicode…。
スクリプトが間違ってるんじゃなくて入れてる文字コードが違うの…。
110105:2000/10/25(水) 22:52
>>107
じゃあどうしたらいいですか?

javascriptで、
%95%B6%8E%9A
を、
文字
に変換することは出来ないですか?

unescape("%95%B6%8E%9A");

では出来ませんでした。
よろしくお願いします。
111105:2000/10/25(水) 23:00
または、
perlで、"文字"を、"%u6587%u5B57"にすることは出来ませんか?
112105:2000/10/25(水) 23:16
少し分かりました。
IE5じぁ、unescape("%95%B6%8E%9A");
すると、文字化けしますが、

ネスケでは、ちゃんと表示されます。
これは、IEが原因?(謎)
113名無しさん:2000/10/25(水) 23:37
HP関係をこれから勉強しようと思うんですが
cgi、HTML、JavaScript等はどういう順で勉強していけばいいでしょうか?
114名無しさん:2000/10/26(木) 00:10
>113
全く経験ないんだよね?
そしたら、普通にサイトを作るとしたら、当然最初はHTML。
で、多分、カウンタやらアクセス解析、掲示板の必要に迫られて、
cgi(自作じゃなくても他人のを触ってるうちに基本は勉強せざるを
えないと思う)。その後は必要に応じてJavaScript勉強しても
いいし、cgiを深く勉強してもいいと思う。
というか、ごちゃごちゃ考えないでとにかくサイト作れば?
とにかくHMTL書けなければ話が始まらない。
115名無しさん:2000/10/26(木) 01:08
>>114
わかりました。ありがとうございます。
サイトを創る気は無いんですが、教養として覚えたいんです。
そういう場合は何を目標にしたらいいでしょうか?
参考までに教えていただけるとうれしいです。
116名無しさん:2000/10/26(木) 01:30
御託はいいからそういうときはとりあえず index.html を書けよ
117>115:2000/10/26(木) 01:44
>そういう場合は何を目標にしたらいいでしょうか?

KENT
118むぎ茶:2000/10/26(木) 02:30


目標ぐらい自分で決められない奴は障害者だね。

119107:2000/10/26(木) 03:44
>>112
IE4以降では uncode にしてしまうようだ。おかしなことを…
%uXXXX は uncode の印だから内部で判定して Jperl.pm で unicode と他のコードとの変換、
それをエスケープ…できると思うんだけどどうなんだろう。その辺は詳しくない。スマソ

どっちにしろ目的によって unucode まで意識しなくていいんじゃないかな。
CGIとJavaScriptを連携させる(JavaScriptの出力をCGIに送るとか)なら
上のような面倒なことをしないといけないだろうけど暗号化も復号化もCGIでやるなら最初ので問題ないかと。
JavaScript でunicodeにエスケープされた Cookie を受け取る場合はややこしそうだ。
120107:2000/10/26(木) 03:45
uncodeじゃなくてunicode だった…。
121名無しさん:2000/10/26(木) 04:51
うんこーどage
122名無しさん:2000/10/26(木) 07:04
自分で定義した関数を呼び出すときに & を付けたときと
付けないときの違いを教えて下さい。

いつもつけるものだと漠然と思っていたのですが
つけなくても動きますよね(?_?)
123>122:2000/10/26(木) 10:30
サブルーチンが定義済なら同じだね。
でも&を省略すると読みにくくならない?
124名無しさん:2000/10/26(木) 10:51
>111
119が言ってるようにJcode.pmを利用すれば
Unicodeでescapeする関数が作れるはずだと思って書いてみたら、
すげーごちゃごちゃになってしまったよ。

ソース:
use Jcode;
sub escape {
my $j = new Jcode;
join ""@` map {
/[\x80-\xFF]/ ? "%u".unpack("H4"@` $j->set(\$_)->ucs2) : $_
} split /([\x80-\xFF]{2})/@` $j->set(shift@` "sjis")->euc;
}

$a = &escape("文字");
print $a;

結果:
%u6587%u5b57
125名無しさん:2000/10/26(木) 15:50
>>122 あーほんとだ
初めてきがついた
定義済みならってのはどういう意味なんすか?>>123
知らないことがざくざくでてくる…鬱だ…
126105:2000/10/26(木) 17:49
皆さんいろいろありがとうございます。。

>>119
まさに、私は、クッキーの処理で悩んでました。。escapeしないとネスケで文字化けするし、
したら、IEで化けるし・・ブラウザが複数あるのがいけないんですよね。
いっそのことみんなひとつに統一して欲しいですね。。。
そしたらどれだけ楽になるか…

ブラウザの問題と分かりましたので、ブラウザ別に処理を分けることにします。
皆さんありがとうございましたm(__)m

127名無しさん:2000/10/27(金) 04:58
>ブラウザ別に
これがまた面倒だったり。
128119:2000/10/27(金) 05:59
面倒くさいね。
JavaScript で読むことをしないのなら、別にブラウザや unIcode は気にしなくていいかもよ。
なんでかっていうと、読むのも書くのも同じCGIでしょ?
エスケープとアンエスケープは同じCGIで処理するのなら問題なし。

CGIで吐き出したHTMLファイルでフォームへの代入は JavaScript でさせようとしたら
うまくいかなかったのだけどこういうことだったのな。
CGI で Cookie 出して、CGI で読み込むのなら最初ので問題ないと思う。
129むきむきまん:2000/10/27(金) 11:28
便乗質問です。
ブラウザごとに・・・というのがありましたので質問です。
環境変数の
HTTP_USER_AGENTで吐き出される、それぞれの環境における値の一覧を
まとめてくださってるサイトなどは、ご存知でしょうか??
はっきり言って、とんでもない数になるとは思うのですが、
かなり厳密に、ブラウザや環境によって場合わけしたいと思っているのです。
130名無しさん:2000/10/27(金) 11:38
 EUCで書かれたCGIをi-modeで使うためにSJISに変換したいんですが、
保存時に文字コード変える以外にperlの記述でどこを変えたらいいですか?
131>130:2000/10/27(金) 12:08
先に聞くけどPerlの知識ゼロなの?
132130:2000/10/27(金) 12:20
>131
改造はいちおうやってますが、0からは作れません。
133名無しさん:2000/10/27(金) 12:33
>132
つまり、Perlの知識はほとんどないって事だな。
レイアウトを変える位なら改造とは言わないし、
HTMLの知識があればそれはできる。

jcode.plをつかってください。
134名無しさん:2000/10/27(金) 15:50
122です>>123さんありがとうございます
あの後、いろいろなソースを見ていたら、&を付けていないものが
結構あると言うことに気が付きました。
どっちがスタンダード?なのでしょう。>>123さんの言うとおり
&があった方がわかりやすいので、これからも&を付けるだろうと
思うのですが、なんとなく気になります。
あと、&が必須というのはどういうときなのでしょう?
定義されていないとき?は理解が及びませんでした(?_?)
135名無しさん:2000/10/27(金) 16:46
sub hoge {...}
がすでにあるなら
hoge; も &hoge;
も同じ。

でも
sub hoge {...}
が無いと hoge; は
裸のワード扱いになる。
136105:2000/10/27(金) 16:50
>CGIで吐き出したHTMLファイルでフォームへの代入
今これをやってるんですよね。。(^^;
はい、、
137名無しさん:2000/10/28(土) 01:53
>>136
つーか、ここのHTMLソースみて3分で作れたが?
138105:2000/10/28(土) 02:15
>>136
すいません。。。とっくに解決してるんですよね。。。
これが。。。
139名無しさん:2000/10/28(土) 03:38
あげ
140japu:2000/10/28(土) 08:38
こんばんは。久しぶりに見ましたが、マジカルエミの最終話は良いですね。
さて、本題。
Perl5では、サブルーチンには後で宣言されている場合でも基本的に & は不要です。先に宣言してある場合は括弧すら省略可能です。
サブルーチンに対するリファレンス \&moe とか、予約語と同名のサブルーチンを使用する場合 (普通しないけど) は & が必要ですけどね。(あとは後で宣言されていて、サブルーチンの呼び出しに括弧をつけない場合。)
それでは。

-- just another perl user
141名無しさん:2000/10/28(土) 12:09
現在minibbsを改造しています。

機能としてresのメッセージは色を変えて表示出来るように
しようとしているのですが、タグを閉じる方法が思いつきません
どうするのがビューティフルでしょうか?

ちなみにレスの判定は
「>」を「>」に置き換え、表示時に「<font=hoge>>」って感じです。
142名無しさん:2000/10/28(土) 13:59
>141
実体参照を使えよ。
143名無しさん:2000/10/28(土) 20:14
>141
「>」で始まる行だけ色を変えるんじゃだめってこと?
144141:2000/10/28(土) 20:56
>143
その通りです。

CONTENT_LENGTHなどで受けたデータをタグを禁止する前に
$hoge =~ s/^>/>/;
を入れといて、出力時に「>を<font color=red>>」とな感じに
(>の全角半角は特に意味は無いです)

これでレスの部分だけ色を変更したいんですが、<font>タグを
閉じる方法が思いつかないんです。
145名無しさん:2000/10/28(土) 22:08
(だれかぁ)
ちょっと思いつきなんだけど、
sendmailのvacation.msgをCGIで書き換えるようにして、
アクティブな自動返答システムを作れないかなぁ?だめ?

146名無しさん:2000/10/28(土) 22:39
</font>
タグは閉じろ。
147名無しさん:2000/10/28(土) 23:05
apacheの質問で申し訳ないんですが、Hilightの掲示板など、過去ログを
自動で生成するCGIなんかで、出来たファイルの所有者がnobodyになって
しまうんです。これを所有者のものにするにはhttpd.confのどこを変えれば
いいのでしょうか?
148名無しさん:2000/10/28(土) 23:06
japuさんに礼ぐらい書けよ>聞いていた奴等
149名無しさん:2000/10/28(土) 23:21
apacheをnobodyで動かさない。
150名無しさん:2000/10/28(土) 23:33
>>149
それは分かりますが、User の後の指定をどうすればいいんでしょう?
151名無しさん:2000/10/28(土) 23:54
何か月か前までCGIがnobodyで動いており、現在はownerで動くサーバを使っています。

nobodyで動いていた頃にCGIから作ったディレクトリやファイルがありまして、それを今現在削除する事ができずに困っています。

どなたか良い方法ありましたらご享受お願いします。
152149:2000/10/29(日) 00:02
>150
ちょっと板違いだと思うけどな
サイービス

#
# If you wish httpd to run as a different user or group@` you must run
# httpd as root initially and it will switch.
#
# User/Group: The name (or #number) of the user/group to run httpd as.
# . On SCO (ODT 3) use "User nouser" and "Group nogroup".
# . On HPUX you may not be able to use shared memory as nobody@` and the
# suggested workaround is to create a user www and use that user.
# NOTE that some kernels refuse to setgid(Group) or semctl(IPC_SET)
# when the value of (unsigned)Group is above 60000;
# don't use Group nobody on these systems!
#
User nobody
Group nobody
153名無しさん:2000/10/29(日) 00:06
>150
suEXECやるならhttpd.confの設定だけじゃできないよ。つっても
Apacheのソースとコンパイル可な環境があればむずかしくないす。
詳細は下記。
http://japache.infoscience.co.jp/japanese_1_3/manual/suexec.html
154名無しさん:2000/10/29(日) 00:15
>>152
つまり、
User nobody
Group nogroup
でやればいいんでしょうか? で、Groupの数が60000を越えてたら
使ったらダメなのね。
155名無しさん:2000/10/29(日) 00:19
>>151
rootになって、chwon じゃダメ?
156151:2000/10/29(日) 00:24
>155
rootっていちユーザーがなれるものなんでしょうか?
無料のスペースなんですけど。
157名無しさん:2000/10/29(日) 00:29
>151
その状況だと、もう管理者に頼むしかないんじゃ・・・
ていうか、nobody動作からowner動作に変わるときに
そのへんの危険性をユーザーに告知しなかった管理者が
そもそもいけない。だから堂々と要求すれ。
158151:2000/10/29(日) 01:04
>157
危険性はともかく変更のアナウンスは事前にありました。
その時点で予想できなかった自分も悪かったですね。
とりあえずメール出してみます。ありがとう

解決sage
159名無しさん:2000/10/29(日) 01:42
一番上は自分がオーナーじゃないの?
自分がオーナーのディレクトリなら他人のファイルとか消せるから
そこからディレクトリ丸ごと消したらどう?
160名無しさん:2000/10/31(火) 18:18
入力された値によって大きく挙動が変わるスクリプトを
現在組んでいるのですが、こういう場合は一つのファイルに
全てをまとめて書くよりも、それぞれの機能を分割して書いておき、
必要に応じてrequireした方がサーバーに負荷をあたえずに済むのでしょうか?
if ($in{'mode'} eq 'read') { require 'read.pl'; }
elsif ($in{'mode'} eq 'write') { require 'write.pl'; }
161名無しさん:2000/10/31(火) 18:21
>>160
そのとおり!
モジュールになってれば autouse って手もあるな。
ただし autouse は 5.6.0以降のみ。
162名無しさん:2000/10/31(火) 18:27
requireもタダじゃないけどね。
163名無しさん:2000/11/01(水) 22:59
>156
なれるわけないやろ
164名無しさん:2000/11/02(木) 02:20
>whoiam
>名無しさん
165名無しさん:2000/11/02(木) 06:15
プログラムなんてほとんどやった事の無い超初心者です。
WIN98、2000でPerlを使ってXML関連のプログラミング
をやりたいのですが↓の2つについて教えて頂けないでしょうか?

1、XMLを扱うのに必要なモジュ―ルとそのインストールの方法
  (とりあえず、ppmはわかります。)

2、エディタはどんなものを使えばよいのか
166>165:2000/11/02(木) 10:15
1.
use XML::Parser;

$p1 = new XML::Parser(Style => 'Debug');
$p1->parsefile('REC-xml-19980210.xml');
$p1->parse('<foo id="me">Hello World</foo>');


# Alternative
$p2 = new XML::Parser(Handlers => {Start => \&handle_start@`
End => \&handle_end@`
Char => \&handle_char});
$p2->parse($socket);


# Another alternative
$p3 = new XML::Parser(ErrorContext => 2);


$p3->setHandlers(Char => \&text@`
Default => \&other);


open(FOO@` 'xmlgenerator |');
$p3->parse(*FOO@` ProtocolEncoding => 'ISO-8859-1');
close(FOO);


$p3->parsefile('junk.xml'@` ErrorContext => 3);


--------------------------------------------------------------------------------

2.
秀丸
167名無しさん:2000/11/02(木) 10:35
質問です。htmlの入力フォーム、ありますよね
それで↓のようなテキストエリアを配置して、値をCGIに渡して
処理しているのですが、
<textarea name="aaa" rows="5" cols="60" wrap="off">
</textarea>

textareaの改行コードがうまく取り除くことができないんです。
$aaa=~ s/\n/:/g;
$aaa=~ s/<BR>/:/g;
$aaa=~ s/<br>/:/g;
こんな感じでいろいろ試してみたのですが、どうしてもダメです。
どなたかよろしくおねがいいたします。
168名無しさん:2000/11/02(木) 10:38
>>167
\r
169名無しさん:2000/11/02(木) 12:42
>>168
ありがとうございます!できました!
調べたら \nは改行 \rはリターンとか書いてありました
どっちもいっしょのような気がするけど・・なんだろ。
まあいいか(笑)とにかくできました ほんとにありがとうございました
170名無しさん:2000/11/02(木) 14:27
>>169
そんな書籍?は捨ててください。
171名無しさん:2000/11/02(木) 17:16
>>170 書籍・・・っていうかとほほのWWW入門に
    かいてあったんですけど(笑)
172名無しさん:2000/11/02(木) 18:15
XMLってDOMとか使わなくていいの?
あとjcodeとかつかわなくていいのかい?
173名無しさん || die:2000/11/02(木) 20:00
>>165@`>>172
FAQ
http://db-www.aist-nara.ac.jp/xml/perl-xml-faq-j.html
DOMが好きならXML::DOMを使えばいい。メモリ食うだろうけど。

>>171
\n は newline、\r は carriage return。
タイプライタでタイプのヘッドを行の先頭に戻し(\r)、
紙を次の行に送る(\n)のが元。たしか。
174名無しさん:2000/11/02(木) 20:53
秀丸を使ってる人に聞きたいんですけど
どういったマクロ使ってますか?

お勧めのがあったら教えて欲しいです。

175(;゚Д゚)ゴルァ:2000/11/06(月) 12:45
>>169
\n = ↓(一つ下へ)
\r = ←(一番左へ)
とでも覚えておけばいいんじゃないかね。DOS と WINの場合だけですが。
Mac だと \r が ←+↓ だったり
UNIX だと \n が ←+↓ だったりするんで統一させとかないといかんのですが。
つうか、とほほの「改行コード」についてそんなこと書いてあったっけなあ?
wwwxx011.htm を見てそう思ったんなら解釈違いじゃないかね。
他に改行についてどっか書いてあったっけな。

>>174
他からコピペしてきた内容をそのまま表示させるために
選択範囲のメタ文字をエスケープとか。正直マクロはろくに使ってない。
秀サイトのリンクたどればマクロ配布してるところあるけど、あれじゃダメなん?
こだマクロとか。
176( ´∀`)さん:2000/11/06(月) 16:41
>>175
違うよ。UNIXだろうとMacだろうと、\nは改行だし\rは復帰。
ただ、Macの\nと、UNIXの\rが同じ文字だというだけの話。

ちなみに、
UNIX : \n="\x0A"@` \r="\x0D"
Mac : \n="\x0D"@` \r="\x0A"
Win : \n="\x0D\x0A"@` \r="\x0A"

だから、(やったことは無いけど)Macで出力した"\n"をUNIXで取り除こうと
思ったら、s/\r//g; とやらないとダメなんじゃないかな。
こんないい加減なことは勿論やっちゃだめだけどさ。
177名無しさん:2000/11/06(月) 16:43
しもた。Win: \r="\x0D" です。( ´∀`)
178名無しさん:2000/11/07(火) 00:25
負荷や速度などを考えると
下のA@`B@`C@`Dでどれが一番良いのでしょうか?
それぞれの利点などありますか?

if($data eq ""){print "OK";} #A
unless($data ne ""){print "OK";} #B
if(!$data){print "OK";} #C
print "OK" if !$data; #D
179いちろう:2000/11/07(火) 00:27
速度? 何百万回やるの?
ない知恵絞るより、cpuとかに金使え > 178
180名無しさん:2000/11/07(火) 00:35
>>175
あなた、む〜ちゃく〜ちゃですね。
改行(行末)コードはOSにより異なり、
UNIX:LF Win/DOS:CR+LF Mac:CR
コードはASCIIで共通なんだから、
LF(\n):0x0A CR(\r):0x0D
181180:2000/11/07(火) 00:36
>>176でした〜ん。スマソ
182名無しさん:2000/11/07(火) 00:57
いちろうって。。新参者の馬鹿か?厨房丸出しの煽りだな。
PERL の P も知らないくせに偉そうな事ばっかり言って。
そういえば前に似たような奴がいたな。
ハンドル変えただけか?
183名無しさん:2000/11/07(火) 02:04
sky.pl(ttp://rie.h.kobe-u.ac.jp/~ohkubo/script.shtml
の使えるフリー鯖は有りませんかね?
以下の条件を満たすメールサーバで無いと駄目だそうです。

個人のホームディレクトリに .forward(もしくは .qmail)を置くことができる。
MTA(sendmail@`qmail等)が個人のホームディレクトリにある上記のファイルに従い、メール受信をトリガーとしてプログラムを起動することができる。
perlが使える。
184>183:2000/11/07(火) 02:08
ありません。
185名無しさん:2000/11/07(火) 02:38
PERL ぷぷっ
186160:2000/11/07(火) 03:57
>161さん@`162さん
お礼が遅くなってしまいましたが有り難う御座いました。
今後もサーバーに出来るだけ負荷をかけない様努力してきますです。
187名無しさん:2000/11/07(火) 04:45
>178
ベンチ取った訳じゃないが・・・。
Dが一番早いはず。
188名無しさん:2000/11/07(火) 05:04
#Aと#Bはどうだろう?
189178:2000/11/07(火) 05:09
>187
ありがとうございます。
私もそんな気はしてたのですがやはりそうですか。
フリーで配布されてるスクリプトとか見ると
Aの方法が多い気がしたのでAが何かメリットとかあるのかと気になっていたもので。。。
190178:2000/11/07(火) 05:18
>188
私も気になっているのですが多分Aの方が効率的だとは思います・・。
日本語で書くと
A「$dataが空だった場合は〜」
B「$dataが空以外ではなかった場合は〜」
だと思いますのでこれだけ見るとAの方が効率的な気がします。

私の勝手な考えなので間違っていたらすいません。
191名無しさん:2000/11/07(火) 05:22
>if($data eq ""){print "OK";} #A
>if(!$data){print "OK";} #C

#Aと#Cは $dataが"0"のとき結果がちがい、そのため
ハマった経験のある初心者は、おれだけではあるまい。
192名無しさん:2000/11/07(火) 05:35
>191
俺は今のところハマってない。
どんな使い方したときにハマる?
193191:2000/11/07(火) 06:37
BBSで、たしか「削除データは発言番号を""にする」とかいう設計で、
それに加えて「発言番号は0から始まる」形式のデータで、
当然ながら最初の書き込みは常に「削除されました」になっちゃう。
あのときは2日ぐらい悩んだ……遠い目。
194192:2000/11/07(火) 06:50
う〜ん。
今は笑い話に出来るからよかったね。
俺はBBS書いたことないからわかんないけど、
そのBBSって削除したデータも残しておく設計ってこと?
195名無しさん:2000/11/07(火) 12:45
>>178
速度はどれも大して変わらんでしょう。
ブロックのオーバーヘッドがあるので#Dが少し有利という
答もあるかもしれませんが、最近はブロック内が1文なら
最適化されてしまうようですし。

意味的には、文字列として"0"が来たときにどうしたいかによって
#A@` #B系か#C@` #D系か使い分けます。

あとはスタイルの問題ですが、「英語として自然なもの」を
採用するとPerl達人っぽく見えます。

if (!$data) { print "OK" } # if no data print OK
unless ($data) { print "OK" } # unless data (exists) print OK
$data or print "OK" # data (exists) or OK
print "OK" if !$data # OK if no data
print "OK" unless $data # OK unless data (exists)

条件に!をつけてifと書くより、unlessを使った方が
英語っぽくなります。英語圏の人にはunlessの方が読みやすいですが、
日本人にとってはif (!...)の方が「もし……でなければ」に近くて
読みやすいかもしれません。後置ifは実行部分が小さいとき、orや
andは条件が超簡単なときに読みやすくなります。

perldoc perlstyleも読んでみましょう。

同じ意味なのになんでこんなにたくさんに書けるのかというと、
書く人のセンスで自分に気持ちいいように書けばよいということです。
「ifと!があればunlessなんていらないし、後置ifだって
ブロック使えばいらないじゃん」という立場も正しいです。
どっちも受け入れるのがPerl流、かな。
196名無しさん:2000/11/07(火) 13:22

すごく素朴な質問なのですが、ライブラリとモジュールってどう違うのですか。

197名無しさん:2000/11/07(火) 14:01
@abc = ("1"@`"8"@`"acd"@`"1"@`"acd"@`"3");
こういう配列があったとしてsortして重複を取り除くにはどうすればいいですか?
@abc = ("1"@`"3"@`"8"@`"acd");
としたいのですが。

http://www.din.or.jp/~ohzaki/perl.htm#ArrayUnique
ここにそれっぽいことが書いてあるんですがよくわかりません。。
198197:2000/11/07(火) 14:38
上のリンクのやつまだわかってないんですがそれを使えばとりあえず出来ました。
やってから聞いた方が良かったですね、すいませんm<--&gt;m
199japu:2000/11/07(火) 22:59
英語的に読ませたければ、not / and / or を使うとか。(! && || と優先度が異なるので注意。)
ちなみに私は unless 使わないで print if(not /^#/); と書く派です。

---
>>197
@majokko = qw[momo mami emi yumi mami pelsia momo emi lala emi];
@uniq = sort keys %{ { map { $_ => "moe" } @majokko } };
というトリッキーな方法もあります。:-)
200178:2000/11/08(水) 00:24
>195
詳しい解説ありがとうございます。
書く人間の好きな方法で書けばいいって事ですね。
今度、perldoc perlstyleも読んでみます。
201名無しさん:2000/11/08(水) 05:00
まさに初心者です。ご教示下さい。

殆ど同じCGIを数多く設置したい場合、
共通な部分はひとつのファイルにして、
各CGIからrequireさせた方が、メモリを食わなくて済むのでしょうか?
また、もしそうだとしても、処理速度自体は変らないのでしょうか?

よろしくお願い致します。
202名無しさん:2000/11/08(水) 05:51
>201
スペースの問題だけでメモリは関係ないよ。
処理速度も全く関係なし。
203名無しさん:2000/11/08(水) 06:05
>202さん
メモリに一切蓄えずに、毎回読みに行ってしまうのですか?

204名無しさん:2000/11/08(水) 06:08
お礼を言い忘れました。有り難うございます。202さん。
205名無しさん:2000/11/08(水) 06:14
超初心者です。
現在ローカルマシンで動作確認しています。
index.htmlのリンクからcgiというリンクを作って試しています。
indexの表示は上手くいくのですが、リンクするとcgiが実行されず、記述したものが表示されてしまいます。
何故ですか??
206名無しさん:2000/11/08(水) 06:26
>203
何が言いたいの?
も少し分りやすく説明してくれ。
>205
ローカルマシンってだけじゃ何も答えられん。せめて動作環境を書け。
設定の問題だろうとは思う。
207ログ:2000/11/08(水) 06:29
スクリプトエラー、構文エラーが出ます、なんのことでしょうか?
ただ、張り付けるだけで良いはずなのになぜ、エラーが出るのでしょうか?

アクセスログをとって更新の励みにしようと思っていたのですが、
エラーが邪魔でしょうがないです、だれか助けてください。
お願いします。
208名無しさん:2000/11/08(水) 06:39
>207
悪いけど俺にはあなたの使っているソースを透視したり電波を受信する事はできません。
お手数ですがどんなソースをお使いなのか教えていただけないでしょうか。
209ログ:2000/11/08(水) 06:56
<SCRIPT Language="JavaScript">&lt;!--
document.write("<IMG SRC='http://www.raku2.net/cgibin/wclog.cgi?kcai32+2+"+document.referrer+"'>");
// --&gt;</SCRIPT>

これです、これを
ファイル→編集→挿入→スプリクト→張り付け→言語Java→OK。
あとは、アップロードするだけです。
無料のCOOLで作ってます。
お願いします。
210名無しさん:2000/11/08(水) 07:03
>209
板違いです。
211ログ:2000/11/08(水) 07:06
探しましたが、どこが良いのかわからなくここに書きました。
行けない板もあるようですし。
212名無しさん:2000/11/08(水) 07:17
>211
web制作板っつーのがあるからしばらくしたら行ってみそ。
213ログ:2000/11/08(水) 07:25
ああ、もしかして今、飛んじゃってるだけなんですか?
web制作、初級ネット、パソコン一般、どれもこれもつながらないんで途方にくれていました。
あと、早く問題解決したいという焦りから、書きこんでしまいました。
すみません。
では夜にでも行って見ます。
214名無しさん:2000/11/08(水) 08:32
今 htmlのレイアウトが入ったtxtファイルを読み込んで表示するcgiを作っています
セキュリティー面で心配なので質問しました

txtファイルはブラウザから変更できるようにしています
txtファイル内で変数を使っている為$evalを使っています
書き込みできる部分は一部で以下のEOMの内部のような感じです

print <<EOM;
私の名前は$nameです<br>
最新更新日は$dayです
EOM

それでtxtファイルへの書き込みは誰でも出来るようになっているのですが
書き込む際に禁止すべき文字はどのような物があるのでしょうか?
危ないと思ったのは
~ s/&lt;!--(.|\n)*--&gt;//g;
~ s/EOM//g;
の二つなのですがこれで十分でしょうか?

215名無しさん:2000/11/08(水) 08:42
私の名前は$nameです<br>
最新更新日は$dayです

txtファイルが↑で、それを誰でも書き変えられるってこと?
追加書き込みでなくて。
216214:2000/11/08(水) 09:05
はい txtファイルを上書きすると言う事です
217201@`203:2000/11/08(水) 12:30
質問がわかりにくい…との突っ込みがありましたので…

例えば、100個掲示板CGIがあるとして、jcode.plも各々100個用意した場合より、
jcode.plは1つだけにして、各100の掲示板CGI共有で参照させた場合で
メモリ消費量に差があるかどうか…という疑問なのです。
202さんのお答えから推測するに、jcode.plを一つにしたところで、
毎回メモリに蓄えに行ってから実行するので差はない…のかな?と思うのですが…。

如何なのでしょう?何度もごめんなさい。
218名無しさん:2000/11/08(水) 12:48
差はないんじゃない?
キャッシュは効くかも知れないけど。
219名無しさん:2000/11/08(水) 13:15
perl、正規表現初心者です。
日本語の文字列を2バイト文字として切り離すいい方法はありますか?
split( // @` 'abc123' ); → a@`b@`c@`1@`2@`3
のようなことを全角混じりの文字列
'abcあいう123亜射宇'
でもやりたいのです
220名無しさん:2000/11/08(水) 13:32
221japu:2000/11/08(水) 13:35
前に思いっ切り出た気がするけど...

# EUC-JP 限定
$_ = "CCさくら";
@moe = m{\G([\x00-\x7f] | # ASCII
\x8e[\xa0-\xdf] | # JIS X 0201 Katakana
\x8f[\xa1-\xfe]{2} | # JIS X 0212
[\xa1-\xfe]{2})}gx; # JIS X 0208
print "@moe\n";
222219:2000/11/08(水) 13:47
>>220-221
ありがとうございます!多分うまくいきそうです
過去ログろくに読まずに質問しちゃってすみませんでした・・・
223Rl:2000/11/08(水) 13:58
転送CGIを作っています。
「./link.cgi?magical=star」と実行したら、
「majokko.com/magical-emi/」に飛ぶような感じにしました。(httpは省略)
ところが、ネスケを利用した場合、そのリンクを張ったサイトによって
飛んだ先のサイト(majokko.com)が文字化けを起こしてしまいます。
(IE5.01では文字化けしませんでした)
具体的に言うと、自分のサイト内からのジャンプでは文字化けしないのですが
mentaiサーバーから飛ぶと文字化けしてしまいます。
この文字化けはリロードをしても直らず、キャッシュをクリアして
別ルートから入室して、ようやく文字化けがなくなります。
ただ逆に、先にmajokko.comを見てから転送CGIを利用すると、
ネスケにキャッシュが残ってるためか、今度は文字化けが起こりません。

URL転送は、入力されたmajokkoを$majokkoURLに変換してから、
print "Location: $majokkoURL\n\n";
のような形式で飛ばしています。
ネスケのせい、文字コードのせい、CGIのミスのどれが原因か自分には
わかりません。
回避方法までわかれば最高のですが、せめて原因がCGIにあるのか
どうかだけでも教えていただけると幸いです。
CGIでの回避が不能なら、素直にMETAタグでの転送をするように
しますので。(^^;

よろしければご教授お願いします。
板違いでしたら申し訳ありません。m(_ _)m
224201@`203 :2000/11/08(水) 14:19
やはりメモリ消費量に関係無いとの結論で宜しいのでしょうか??
225名無しさん:2000/11/08(水) 14:34
>>223
誰のせいかといえば、たぶんApache 1.3.12とネスケのせいで、
回避も可能みたいです。↓参考スレッド
http://tako.2ch.net/test/read.cgi?bbs=perl&key=967877995
http://tako.2ch.net/test/read.cgi?bbs=perl&key=965500973&st=212
226Rl:2000/11/08(水) 14:55
>>225さん
ありがとうございます!
専用のスレが立っているのには気付きませんでした。(^^;
そこに書いてあったように
print "Status: 301 Moved Permanently\n";
print "Content-Type: text/html\n";
print "Location: 〜\n\n";
としたら、何とか解決できたようです。

助かりました。
早い回答本当にありがとうございました。m(_ _)m
227名無しさん:2000/11/09(木) 02:13
>201@`203@`217@`224
その結論でOK。って何度言えば分かる?
228名無しさん:2000/11/09(木) 02:13
日記CGIで日付けを漢字で表示させようとしています。
10月がうまくいきません。

if($mon =='10'){$mon='十';}

print "$mon月";

でエラーになります。何かいい方法はありますか?
229名無しさん:2000/11/09(木) 02:16
十がSJISで8F5Cだからです。
EUCとかにするのが早いが、
SJISでやりたいなら
print "十\月";
とかするんだな。
230228:2000/11/09(木) 02:42
出来ました。ありがとう御座います(^^)
231名無しさん:2000/11/09(木) 03:02
ログを日付別に保存させたいので
Perl上で新規のファイルを作成した
いのですが、CGIのPerl上で新規のファイルを
作成して、そこにログを追記のみしていく
という処理の場合、どのようにすれば良いでしょうか?
232名無しさん:2000/11/09(木) 03:11
追加モード
open(FILE@` '>>'.$logfile);
print FILE $log;
close(FILE);
233名無しさん:2000/11/09(木) 03:27
「まだ無いファイルを新規に作成して」
追記する方法が分からないのですが、
新規にファイルを同じディレクトリに作成したいんです。
よろしくお願いします
234名無しさん:2000/11/09(木) 03:36
ディレクトリのパーミッションを
書き込み許可に設定してありますか?
235名無しさん:2000/11/09(木) 03:40
すいません。なってませんでした。
正しくしたら出来ました。
アドバイスありがとうございました。
236231とは別人の名無しさん:2000/11/09(木) 18:02
「ファイルがなかったら新規に作成」をしたくて、
なおかつファイル名に日付をいれたいんです。

$file="data3/$year-$mon-$mday-hoge.csv";

if (!-e $file )
{ open(FILE@`'>>'.$file);
flock(FILE@`2);
print FILE "$data";
flock(FILE@`8);
close(FILE);
}
else{
open(ANSERA@`">>$file");
flock(ANSERA@`2);
print ANSERA "$data";
flock(ANSERA@`8);
close(ANSERA);
}
237231とは別人の名無しさんの続き:2000/11/09(木) 18:03
234さんの言う通りディレクトリ(data3ディレクトリ)
のパーミッションも書き込み可にしてあるんですけど、
うまくいきません。どこか間違っているのでしょうか?
238>236:2000/11/09(木) 23:28
追加書き込みでもファイルがなければ新規作成してくれますよ。
それと、追加書き込みならflock()しなくてもいいと思います。
後、これは個人的な趣味かもしれないけど
ファイル名はtime()の戻り値そのままの方がいいのでは?
で、後でlocaltime()とか。。
239238:2000/11/09(木) 23:29
あ、それだと常に新規作成になるな(笑)
うーん、どういう処理をしたいのかわからないっす。
240名無しさん:2000/11/09(木) 23:56
$Date = time; # 必要なら + 9*60*60 を追加
$Date -= $Date%(60*60*24);

この$Dateをファイル名にしてみる。
241名無しさん:2000/11/10(金) 09:00
初心者です。
例えば、 'ABCDE'; という文字列で、
B→DとD→Bをしたいのですが、
$_ =~ s/B/D/g;
$_ =~ s/D/B/g;
とすると、Bが2つになっちゃいますよね。
両方同時に置換するいい方法ありますか?
242名無しさん:2000/11/10(金) 09:13
~tr/BD/DB/;
243名無しさん:2000/11/10(金) 10:06
>>242
ありがとう。助かりました。
244別の名無しさん:2000/11/10(金) 23:11
s/Bad/Good/g;
s/Good/Bad/g;
の場合はどうすればいいでしょうか?
245名無しさん:2000/11/10(金) 23:31
>>244
%conv=('Bad'=>'Good'@`'Good'=>'Bad');
s/Bad|Good/$conv{$&}/g;
かな?
246名無しさん:2000/11/11(土) 01:48
has-a で op overload の継承はどうしてる?
247minima@無職寸前:2000/11/11(土) 02:29
>>244-245さん
くだらんことかも知れませんが
s/Bad/\x00/g;
s/Good/Bad/g;
s/\x00/Good/g;
が若干速いようです。
コードの簡潔さを優先させるか,速度を優先させるかで
使い分ければいいのかな〜と思います。
248japu:2000/11/11(土) 02:29
s/(Bad|Good)/$conv{$1}/g; の方が良い。
249名無しさん:2000/11/11(土) 03:42
10-Nov-2000 09:11 みたいな文字列をtimeの戻り値に戻すのって
どうやるんですか? 分解して地道に計算するしかない?
250名無しさん:2000/11/11(土) 04:22
>>246
こうやった。
親クラスで
use overload '""' => \&_stringify;
sub _stringify {
my $self = shift;
$self->stringify(@_);
}

子クラスのオブジェクトのメソッドが呼ばれるよん。
251japu:2000/11/11(土) 04:36
252201@`203@`217@`224 :2000/11/11(土) 04:39
御礼が大変遅くなりました…
ありがとうございました!!解決してヨカッター!!
253名無しさん:2000/11/11(土) 04:44
>>251
どうもです。
レンタルサーバーなので依存性が複雑なモジュールはインストールしたくないのですが、
このくらいならカレントにおくだけで大丈夫ですよね?
使ってみます。
254[email protected]:2000/11/11(土) 05:04
非標準モジュール使いたくなければ自前でパースしてTime::Local使え。
つか、そういう前提条件あるなら最初から書こうよ。
255名無しさん:2000/11/11(土) 05:49
>>254
ごめんなさい。
でも、読んでみた感じでは標準モジュールにしか依存してないみたいですし、
カレントにおくだけで見本は動いたので大丈夫そうです。
256246>250:2000/11/11(土) 05:56
書きずらいタイミングだがAUTOLOADしたいのだ。
すまんのだ。
具体的にはPDLだ。
こいつはXSでCの構造体にアクセスしてる関係で
is-a 継承できんのだ。
つーことでhas-aになるんだが + とか関係演算子とか
全部PDLに丸投げしたい。
これらをすべて記述するのは阿呆らしいのだ。
objectに対する普通のサブルーチン記法
subroutine($obj)
とかPDLの普通のメソッド呼出
$obj->method
は親クラス、main 両方で sub AUTOLOAD を定義して完了。
あとはoperatorだけなのだ。
257246:2000/11/11(土) 06:09
いや。やっぱいいや。
自分で考えよう。
めんどくさがっちゃいかんね。
258名無しさん:2000/11/11(土) 23:04
localとmyの違いを簡単に教えてくださいー
あとhtmlの質問になっちゃいますけど
ページが更新されていればリロードしても再読込しないで更新されていればリロードしたばあい再読込ということは可能でしょうか?
259>258:2000/11/11(土) 23:26
両方ともスコープを限定できるってのは分かるよね?

localキーワードを使って宣言された変数は
レキシカルスコープ、
myキーワードを使って宣言された変数は
ダイナミックスコープを持ちます。
簡潔に言うと、localで宣言された変数は
そのスコープ内で呼ばれたサブルーチンからも見えますが
myは見えない、っていう事です。
完全にそのスコープに閉じこめたいなら
myを使う事をお勧めします。
まぁ、可読性は人それぞれだから時と場合によりけり、だけどね。

2つ目はUAの話だから俺はパス(笑)
っていうかそれってIEとかNNとか、デフォルトで(というのもおかしいか)
実装されてない?
260259:2000/11/11(土) 23:31
>完全にそのスコープに閉じこめたいなら
訂正。
完全に、ブロックやらeval文やらrequire@`useされたファイルなんかに閉じこめたいなら
261名無しさん:2000/11/12(日) 01:09
>>258
CGI 側で Last-modified ヘッダを出せ。ブラウザは
それに従って If-modified-since 付のリクエストを
送ってくれる。もし更新されていなければ www サーバが
簡略化したレスポンスを返し、ボディは送信されない。
262名無しさん:2000/11/12(日) 05:06
クッキーのon@`offはどうやって判断しますですか?
263japu:2000/11/12(日) 06:10
とりあえずこれ実行してみれば大体理解できるはず。

#! /usr/bin/perl
$moe = "Mami";
{ my $moe = "Emi"; moe() }
{ local $moe = "Pelsia"; moe() }
sub moe { print "$moe\n" }
__END__

my $_; とかはできないので local $_; とする必要あり。

264名無しさん:2000/11/12(日) 06:15
なんでjapuさんの変数名はいつもおもろいんですか?
おもろすぎてコードが頭にはいりません(笑)
265名無しさん:2000/11/12(日) 07:19
僕はスパスパ頭に入ります(笑)
266japu:2000/11/12(日) 07:19
アニオタだからです。(笑)

...とこれだけでは何なので。
上記の例だと読み出しだけなので実害はないでしょうけど、変数の値を書き換えるような場合にバグに悩まされることがあるので my 使っておいた方が良いです。

あと、ファイルハンドルは my CHOBITS; とかできないので、これも local *CHOBITS; のようにして宣言するか、use FileHandle; my $chi = new FileHandle; のようにすると良いです。ただし、local *CHOBITS; という宣言によって CHOBITS という名前を持つ全ての変数が local 宣言された扱いになりますから、@CHOBITS とかいう変数を使っていたりするとハマります。

use strict; を満足させるためには my を使うしかないです。
267名無しさん:2000/11/12(日) 12:34
(?:...)と(?=...)
の違いがいまいち理解できません。
今詳説正規表現を読んでいてちょうど
その項目のところにきたんですけど
最初は
(?:...)はマッチ全体にははいるけど$1などへは格納しない
(?=...)はマッチ全体にもはいらず$1などへも格納しない
と理解してました、、、
けど読み進めるとZipコードが絶え間なくならんでいる文字列があって
そこから44からはじまるZIPコードを抜き出すという正規表現のところで
@zip=~m/(?:\d\d\d\d\d)*?(44\d\d\d)/g;
となっていました。
これは不要なzipコードを(?:...)でいれていますが
これはマッチしないんですね
(?=...)との違いがよくわかりません、、、
268japu:2000/11/12(日) 12:57
(...) の変数に格納しない版が (?:...)
(?=...) はゼロ幅の肯定先読み言明。
/\w+(?= moe)/ は "Sakura moe"@` "Usada moe" にマッチするが、"Gendo nae" にmhaマッチしない。このとき、$& に入るのは "Sakura"@` "Usada" になる。($& を使うのはよろしくないが。)
# らくだ本 (or perldoc perlre) に書いてない?

$_ = "12345440001234544123"
のとき、前半部分 (?まで) は
12345
1234544000
123454400012345
12345440001234544123
にマッチするので、その後 (44\d\d\d) にマッチするか調べているだけ。
269名無しさん:2000/11/12(日) 14:46
BBSのログファイルをDBMで書き込んだら、どの位良くなりますか?
270名無しさん:2000/11/12(日) 22:01
>>258

http://www.cc.rim.or.jp/~midorin/mad-p/perl/benkyou/199909/mgp00011.html

このページにはlocalを「取っておいて戻す」って書いてあるけど、
実際には「上から透明シートをかぶせて新しい値を書き込む」の方が
いいかも。localをたくさん使うとシートの枚数が増える。
271名無しさん:2000/11/12(日) 22:11
>>256

nomethodを使えばいいのでは?
perldoc overload参照。
272259:2000/11/12(日) 23:12
> localキーワードを使って宣言された変数は
> レキシカルスコープ、
> myキーワードを使って宣言された変数は
> ダイナミックスコープを持ちます。
すいません。これ、反対です。(笑)
うーん、なんで間違えたんだ。。
273名無しさん:2000/11/13(月) 10:26
>>258

「localとmyの違い」を一番かんたんに言うと
「myはどんどん使いえ。localは、それが何をするのか
 理解するまでは使うな」となるのでわ?
tpjの昔の記事で「まずlocalのことは全部忘れろ」とか
書いてあるのもあったような。
274273:2000/11/13(月) 10:27
↑s/使いえ/使え/。自明typoスマソ。
275いちろう:2000/11/13(月) 13:21
>>269
何の意味もなし、お子茶間のおあそび、、、
276nanasisann:2000/11/13(月) 13:57
遊んだ方が速く覚えられるヨン。
っていうのは置いといて、2chばりにアクセスの多いところなら
もしくは重たいサ-バなら効果は期待できるんでは?
277ななし:2000/11/14(火) 00:26
こないだ本屋でTcl/Tkの本を読んでいたら
「PerlはGPL(GNUだっけ?)だから自分でソフトを
商用販売できない、ソースも公開しないといけない。
しかしTcl/Tkは、自分で作ったソフトを売っても大丈夫です」
みたいなことが書かれていたのですがこれってほんとですか??
278名無しさん:2000/11/14(火) 03:58
う-ん。それってPerl本体のことでは?
スクリプトとかコンパイルした奴にはかからないと思うけど。
実際Perlスクリプトを(商用サイトのCGIとかで)見せない状態で
使ってるところなんて腐る程あるわけだし。
279名無しさん:2000/11/14(火) 04:21
>278
ん?何か違わないか?
>実際Perlスクリプトを(商用サイトのCGIとかで)見せない状態で
>使ってるところなんて腐る程あるわけだし。
ってのは277の話と関係ないのでは?
277が言ってるのはPERLのシェアウェアはダメだって言いたいわけで、
商用利用がダメといってるわけではないと思うぞ。

ちなみに、売っても問題はないはず。
立ち読みした本が間違っているか。
読んだときに間違えて読んだとか。
277が勘違いして解釈したかのどれかだと思う。
280名無しさん:2000/11/14(火) 04:42
ちなみにPerlのライセンスはここ。
http://www.perl.com/pub/language/misc/Artistic.html
スクリプト関係は6番あたりじゃないか?
「スクリプトは作った人間が販売してもよい」みたいに読めるが、
自信ないので、英語に強い人たすけて。
281278:2000/11/14(火) 06:50
ふむ。そうだな。
俺も英語は強くないが、確かに問題ないようだ。
perl込で販売するもまたヨシ、と読める。
282278:2000/11/14(火) 06:59
補足
その場合 'Perl' の名前はつけられないようだ。

>you do not represent such an executable image as a Standard Version of this
>Package.
283ななし:2000/11/14(火) 09:41
シェアウェアにしても問題ないんですね
ありがとうございました
しかし あの本は何だったんだろう、、、
284yuka.s:2000/11/14(火) 11:42
掲示板などの書き込み系スクリプトで、定期的にログのバックアップを取るようにしております。

例)
bbs.log (使用ログファイル)
2000_10_log.bak (バックアップ)
2000_11_log.bak (バックアップ)

この時、バックアップファイルを作成時に、gzip などで圧縮をかけることは可能なのでしょうか?
ちなみにバックアップはログファイルが壊れたとか、特別な事情がない限り再利用しません。
285>284:2000/11/14(火) 11:51
/bin/gzip
を使いましょう。
gzipのパスは管理者に聞いてね。
286yuka.s:2000/11/14(火) 11:59
> /bin/gzip
> を使いましょう。
> gzipのパスは管理者に聞いてね。
それは分かっているのですが、ファイルを圧縮させる処理の記述方法が分からないのです。
申し訳ありません。
287>286:2000/11/14(火) 13:33
execでもforkでもsystemでも使えば?
288名無しさん:2000/11/14(火) 18:15
>>286
gzipの引数の書式などはシェルの"man gzip"こまんどで調べられます。
シェルがつかえない環境の人だったら、たとえば
http://www.jp.freebsd.org/man-jp/search.html
このへんが利用できるでしょう。
289名無しさん:2000/11/14(火) 23:55
以下の様にcgiでmkdirを使って777のフォルダを作って
その中に666のtxtファイルを作った場合
FTPから削除したりパーミッションの変更ができなくなってしまうのですが
FTPから削除できる様に作成する事は可能なのでしょうか?

mkdir "/home/homepage/public_html/$dirname"@`0777;

$file = "/home/homepage/public_html/$dirname/$filename.txt";
open(LOG@`">$file");
flock(LOG@`2);
print LOG $info;
flock(LOG@`8);
close(LOG);
chmod(0666@`$file);

290名無しさん:2000/11/15(水) 00:53
>>289
作ったディレクトリ(フォルダ)のパーミッションが
0777でなくて実際は0755とかになってるんじゃないですか。
そうだったら解決策はふたつあります。どっちでもいいです。
(1) mkdirする前に "umask 0"
(2) mkdirしてから "chmod 0777@`ディレクトリ名"
291名無しさん:2000/11/15(水) 01:03
ファイルのオーナーがnobodyになってるからじゃないですか?
外してたらすみません。
それと、flockの解除ですがcloseすると自動的に解除されるので
明示的にflock(FH@`8);をやると2回ロック解除することになって
変な事になる可能性があるというのが定説らしいです。
(最近聞いた話なんですけど)
292289:2000/11/15(水) 01:06
>>290
すいません 言われたとおり0755になっていて
chmodを使ったらうまく行きました
ありがとうございました
293289:2000/11/15(水) 01:10
>>291
>それと、flockの解除ですがcloseすると自動的に解除されるので
>明示的にflock(FH@`8);をやると2回ロック解除することになって
>変な事になる可能性があるというのが定説らしいです。

そうだったのですか
これから修正しておきます
294>291:2000/11/15(水) 01:32
>それと、flockの解除ですがcloseすると自動的に解除されるので
>明示的にflock(FH@`8);をやると2回ロック解除することになって

それじゃflock使ってない時もロック解除することになるじゃん
295名無しさん:2000/11/15(水) 03:40
掲示板にホームページの宣伝がやたら多く書かれるので
$value =~ s/http\:\/\/(.*)\.(.*)//g;
をつけたら一時的に収まりました。
ところが最近再び宣伝が書き込まれるようになりました。

どうやったのかはよくわからないのですが思い当たる節としては
他にも$value =~ s/\|//g;等を使っている為
h|ttp://tako.2ch.net/perl/の様に記入して抜け穴を攻めているようです
これを防ぐ方法を教えてください。

296名無しさん:2000/11/15(水) 03:45
$value =~ s/\|//g;
のほうを先に書く。
297名無しさん:2000/11/15(水) 03:46
>>295
"http://〜"のチェックが後になるように順番を変える
298>295:2000/11/15(水) 04:10
~ s/h(.*)t(.*)t(.*)p(.*)\:(.*)\/(.*)\/(.*)\.(.*)//g;
多分これが一番安全では
299名無しさん:2000/11/15(水) 07:45
消すのが | だけなら 296 のが誤認しなくていいかもな。
300291:2000/11/15(水) 08:44
>294
>それじゃflock使ってない時もロック解除することになるじゃん
そうも思うのですが、最近各所でflock(FH@`8);は使うなって
記述を見るんですよ。例えば、
http://www.interq.or.jp/www-user/somucho/perl/flock.html#00
http://wakusei.cplaza.ne.jp/twn/wwwperl2.htm#flock
(初心者向きのページは見るなっていう突っ込みは勘弁(^^;;
301>300:2000/11/15(水) 09:49
flock(FH@`LOCK_UN)を使わないのは、closeする(多くの場合、データが実際にファイルに書き込まれる)前に
ロックを解除するとマズいから。2回ロックが解除されるからじゃない。

そこのページには書いてないのかな。
302名無しさん:2000/11/15(水) 09:49
>> 291
明示的なロック解除が害をなすことはありません。

flock(FH@` 8)は使うな、という文章の前には
「(ファイルロックやバッファリングの仕組みが理解できない馬鹿は)」という
暗黙の前提条件が隠されています。
精進しませう。
303名無しさん:2000/11/15(水) 09:54
あと、perl 5.005_03のソース見たら、
flockもちゃんとフラッシュしてます。
flockがデータ書き込まないってのはperl4の頃の話ですかね?
304名無しさん:2000/11/15(水) 10:08
>>303
確認どーもです。いままで風説にだまされていたっす。
305名無しさん:2000/11/15(水) 10:21
Changes見たらperl5.003_94からのようです。 < flockでもflush
いまさら5.004より前のperl5使ってるサイトはないよな。
306名無しさん:2000/11/15(水) 10:32
なるほど、けっこう最近なんですね>flockでflush
じゃあ古い情報がそこらじゅうにあってもしかたないか。

versionのことに触れずに「flockはflushしないから云々」とか
言ってる奴がいたら、こんどからいじめてやろう。うひひ。
307名無しさん:2000/11/15(水) 11:04
でもまあ、配布すんならclose だけにしとけばバージョンの違いで面倒にはならんな。
308名無しさん:2000/11/15(水) 14:42
<img>タグでCGIを呼び出した時に、テキストを返すことは
絶対に不可能なんでしょうか?
もし出来るなら教えてください。
309名無しさん:2000/11/15(水) 15:14
>>308
<img>では不可能。
SSIなら同等のことができるけど、そもそもSSIが使えるなら
こんな質問してないだろうしね。

あるいは<iframe>とか<layer>を駆使すれば、画面の一部に
CGIの出力テキストをはめこむのも可能かもしれない。
(そのあたりはWEB制作板の住人のほうが詳しいと思う)
3107cgi:2000/11/15(水) 15:44
#!/usr/local/bin/perl

open COUNT@` "+<count.txt";
$count++ = <COUNT>;
seek COUNT@` 0@` 0;
print $count;
truncate COUNT@` tell(COUNT);
close COUNT;

print <<END;
Content-Type: text/javascript

&lt;!--
function pseudo_ssi( ){
document.write( $count );
}
//--&gt;
END

----------------

<html>
<head>
<script language="JavaScript" src="ssi.cgi"></script>
</head>
<body>
あなたは
<script language="JavaScript">
&lt;!--
pseudo_ssi( );
//--&gt;
</script>
人目のお客様です。
</body>
</html>
3117cgi:2000/11/15(水) 15:58
$count++ = <COUNT>; こんなことできないし、
print $count; これもおかしいね…スマソ。
312名無しさん:2000/11/15(水) 16:17
>>309
やっぱムリか。ありがと。

>>310
なんのコードですか??
313dou?:2000/11/15(水) 22:01
$countfile = "/hoge/hage/huga/giko.cgi";

open(COUNT@` "$countfile");
f
$number =<COUNT>;
flock(COUNT@`2);
close(COUNT);

$number = $number + 1;

open(COUNT2@`">$countfile");
flock(COUNT2@`2);
print COUNT2 $number;
close(COUNT2);
314310>312:2000/11/15(水) 22:07
疑似SSI。
自己満なので気にしないで〜 ( ´ー`)y~~
315むぎ茶:2000/11/15(水) 22:17


動きもしないコードで満足できるのですか?あなたは。


316313:2000/11/15(水) 22:24
flockのタイミングが掴めないんですよね
ヒントもらえないですか?
317名無しさん:2000/11/15(水) 23:40
並行プログラミングをまじめに勉強してください。
それが早道。
318名無しさん:2000/11/16(木) 00:48
>313
ロックになってません。
319名無しさん:2000/11/16(木) 00:58
>>310
どひー。JavaScriptのsrcでCGIを実行するとは。
いろんなことを考えつくねえ・・・。
320名無しさん:2000/11/16(木) 07:06
すいません。初書き込みです。
HTMLのフォームから呼び出して、内容をHTMLに書き加えるタイプの
掲示板を作ってるんですが、書き込んだ後、更新後のHTMLを表示させるやり方が
わからないのでどなたかヒント下さいませんか?
ちなみに今現在は、更新後に指定URLへジャンプする画面(JavaScript)を
表示させて何とかしています。バカ丸出し。
321名無しさん:2000/11/16(木) 07:28
print"Location: index.html\n\n";

index.htmlの部分を更新後のHTMLに変更すればOKです。
322>321は:2000/11/16(木) 23:21
フルパスで指定した方がいいよ。
323名無しさん:2000/11/17(金) 00:20
jcode.plについて教えてください。
「Perlの小技」を見てみると、日本語を扱うには
eucで書けと書いてあるのですが、自分の環境でフォームからの入力を
ローカルテストしてみたところ、eucでは文字化けしてsjisだと
正常に表示されます。eucの場合でもブラウザ設定でエンコードを日本語(euc)にすれば、
フォームからの入力も正常に表示されるんですが、今度はHTMLファイルが
文字化けします。

書籍の記述によると、
「Windowsでは漢字コードはシフトJIS(SJIS)でいいのですが、UNIXが多い
WWWサーバではEUCが主体になるので、その使い分けをします…」と書かれているのですが、
どう使い分ければ良いのか、ここの意味が理解出来ません。

Windows環境の人ならsjisで設定したCGIスクリプトも正常に実行出来るが
Linux環境の人ではきちんと実行されないという意味なのでしょうか?

それとも、CGIスクリプトをアップロードするサーバーによってsjisかeucかの
設定があって、サーバーの設定に合わせてスクリプトを書かないと
おかしくなるよ…という意味なのでしょうか?

それとも全く別の意味なんでしょうか?過去ログも見たんですがいまいち
良くわかりません。どなたか教えてください。
324むぎ茶:2000/11/17(金) 00:27



もっと簡潔にまとめて、再投稿してください。


┏━━━━━━━━━┓
┃('Д')y ─┛~~ ┃
┃むぎ茶      ┃
[email protected]  ┃
┗━━━━━━━━━┛
http://all.at/bit

325名無しさん:2000/11/17(金) 00:59
>>323
フォームのhtmlソースを、スクリプトの中に突っ込むっていうのは?
あとはエディタ使って、フォームをeucで保存するとか。
sjisで書かれたフォームから送られるパラメータは、sjisで送られる
んだよな多分。だから化けると思う。

ちなみにi-modeでも使いたいなら、eucで書くと面倒なので注意。
326名無しさん:2000/11/17(金) 01:31
>>323
つい弔泙蝓「HTMLも、.CGIも、EUCに統一するってこと。
秀丸とかつかえば、EUCで保存できる。
CGIは プロバイダから特に言われない限り、EUCで書くべき。
(OSがNTの場合は例外)
327[email protected]:2000/11/17(金) 01:46
OSは基本的に関係ない。
基本的に英語しか扱えないPerlで日本語を使うときにEUCだと問題が起きにくいので「EUCで書け」というのが定説になっているのです。

出力にEUCを使用すると文字化けしやすいので、ISO-2022-JP (所謂JIS) にして出力すると良いでしょう。
たとえば、先頭で
open STDOUT@` "| /usr/local/bin/nkf -E" or die;
としておくなどの工夫があります。

328名無しさん:2000/11/17(金) 01:49
条件がそろえばUnicodeで内部処理したほうが楽だけどね。
329名無しさん:2000/11/17(金) 11:09
perl5.6の話?
330名無しさん:2000/11/17(金) 15:01
質問です。
簡単にできると思うのですが、
Perlで2chのように特定文字数ごとに<BR>をいれるには
どうするのが一般的なのでしょうか?

Splitとかでできそうな気がするんですが…。
今、substrできる方法しか思いつかないんですが、
いい方法があったら教えてください。日本語混在の場合です。
331名無しさん:2000/11/17(金) 15:53
>>330
http://www.din.or.jp/~ohzaki/perl.htm#JP_Fold
↑まいどおなじみPerlメモの「特定の長さで折り返す」
"\n"のかわりに"<br>"にすればオーケーでしょう。
332323:2000/11/17(金) 17:14
325さん、326さん、japuさんありがとうございました。
EUCで統一の意味がやっと判りました。
CGIスクリプトでも表示・ソ等の特定の文字も正常に表示されるようになりました。

あともう一点判らないのですがCGIのほうは上手く動くのですが、
JPERLだと少し違うのでしょうか?

require "jcode.pl";
$moji="表示";
&jcode'convert(*moji@` "euc");
print "$moji\n";

こういうコードをMS-DOSプロンプトで実行しても正常に表示されません。
保存形式をSJIS・EUCでやってみましたが、どちらも文字化けしました。
そこで、Kconv.pmをダウンロードして使ってみたのですが、
エラーで動きません。書式が間違っているのでしょうか?

$moji="表示";
use Kconv;
&kconv($moji@` _AUTO@` _EUC)
print "$moji \n";
333名無しさん:2000/11/17(金) 18:48
質問です。
perl script内で
use constant pi => 3.1415
て風に定関数が使えますが、何度も使う定数の設定を
別ファイルにして呼び出して使おうと考えたところ、
requireやdoとかで読み込んでも動作しません。たとえば、
<main.pl>
require 'inc.pl';
use constant b => 2;
print a+b;
---
<inc.pl>
use constant a=> 1;
1;
---
だと、main.plの結果はbのみ展開されて2となります。
どうもスコープの問題のようですが、constantの定義を
別ファイルに持っていって、それを簡単に呼び出す(上記
の例で'3'と表示させる)ことって出来るんでしょうか?
そもそも、requireがまずいんでしょうか?
334名無しさん:2000/11/17(金) 19:39
>333

BEGIN { require 'inc.pl' };

で OK さ!
335名無しさん:2000/11/17(金) 19:47
>334さん
早速の回答どうも有り難うございました。助かりました。
336名無しさん:2000/11/17(金) 22:20
>>332
EUCコードで出力するとMS-DOSプロンプトでは読めないよ?
337名無しさん:2000/11/17(金) 22:48
336さん、ありがとうございます。
あ、MS-DOSプロンプトはWindowsだからSJISしか使えない…
というふうに考えればいいんでしょうか?
338336:2000/11/17(金) 23:01
>>337
WindowsだからSJISしか使えなくていいや〜、と割り切って
Win9x系のMS-DOSプロンプトは作られてるんでしょうね。

これがWin2000のコマンドプロンプトだと、SJIS以外に
Unicodeで出力しても読めるみたい。でもEUCはやっぱり化ける。
339336:2000/11/17(金) 23:05
338の後半ちがってた。Win2000のtypeコマンドが
Unicode→SJISを変換して出力してくれるだけでした。
340337:2000/11/17(金) 23:06
336さん、再度ありがとうございます。
漸くここ数日の疑問が全部解けた気がします。
本当にありがとうございました。
341名無しさん:2000/11/18(土) 06:29
>>331
Perlメモの存在をはじめて知りました。過去ログしっかり読めば
すんだことだったんですね…スミマセン。マジレスありがとう
ございました。
342名無しさん:2000/11/18(土) 21:39
my $coderef = \&hoge;

eval <<'END_OF_EVAL';
sub hoge{
print "hoge!\n";
}
END_OF_EVAL

&$coderef;

リファレンスはポインタのようなものをというイメージだったので、
$coderef = \&hoge;
で後で作られるサブルーチンのリファレンスが取れるのが不思議です。

曖昧な質問で申し訳ありませんが、なんで上のようなことが上手くいくんでしょうか?
343[email protected]:2000/11/18(土) 22:10
そのように作ってあるから。
344名無しさん:2000/11/18(土) 22:19
cgiを実行させてhtmlを吐き出しているのですが
SCALAR(0xb74cb0)
という文字列がくっついてきて困っています。
どなたか原因と対処法をご存知の方、おりませんでしょうか?
よろしくお願いします。
345名無しさん:2000/11/18(土) 22:24
>>344 $$_
346名無しさん:2000/11/18(土) 22:38
344です。
ダラダラってなんですか?
申し訳ありません。もう少し詳しく教えていただけないでしょうか。
おねがいします。
347名無しさん:2000/11/18(土) 22:47
変数$hogeが実際のデータへのリファレンス(参照)だった場合、
そのままprintすると344のような文字列になります。
${$hoge}または$$hogeと書いてデリファレンスすると、
参照先のデータが得られます。
リファレンスに関する詳細は、perldoc perlrefを読んでください。
348名無しさん:2000/11/18(土) 23:13
347さん、折角ですが初心者ゆえ、理解できません。
細かい処理は端折りますが、こんな感じでやっています。

$buffer = $ENV{'QUERY_STRING'};
@array = split(/&/@`$buffer);
print @array@` \n;

全くの初心者が書いたものですので、たぶんかなり変かもしれません。
やりたいことは、環境変数QUERY_STRINGを分断して配列に入れ
それぞれを分けて表示する、というものです。
本当はこれから先に、配列の要素によって処理を分けようと思っているのですが
その実験で書いたスクリプトなんです。
ですが、そこでつまづいてしまいました…
もしよろしければ、サンプルなど頂けないでしょうか。
重ね重ね、申し訳ありません。
349名無しさん:2000/11/18(土) 23:30
改行記号 \n はダブルクォート相当の引用符で囲んでね。
"\n"とかqq(\n)とか。
348だと「\n」=「\"n"」=「文字列"n"へのリファレンス」
とみなされます。
350名無しさん:2000/11/19(日) 00:10
>349
ダブルクォートでくくったところ
思った通りの動作をしました。
349さんをはじめ、みなさんありがとうございました。
本当に助かりました。
351名無しさん:2000/11/19(日) 00:17
http://cgi.room.ne.jp/~begin/

ここ結構詳しいよ。クイズとかあるし。
352名無しさん:2000/11/19(日) 00:47
>>351
宣伝uzeeee
353名無しさん:2000/11/20(月) 02:35
windows98にapache1.3.12でperl522を入れてます。
wwwからCGIは普通に動きますが、ファイル書き込みに差し掛かると必ず
Internal Server Errorになります。
結果カウンタ、掲示板などが動きません。
おみくじなどは動きます。
原因はなんなのか全くわかりません。
是非、教えて下さい。御願いします
354名無しさん:2000/11/20(月) 03:30
>>353
flockやsymlinkを使ってるからに一票
355名無しさん:2000/11/20(月) 03:39
>>353
flockやsymlinkみたいなWin98で実装されてない関数を
実行してるんではないか。
そのときPerlの吐くエラーメッセージはどうなってます?
スクリプトの先頭でこんなふうにSTDERRをSTDOUTにリダイレクトして、

open STDERR@`">&STDOUT";
$|=1;
print "Content-Type: text/plain\n\n";

これでCGIを実行するとブラウザでperlのエラーが読めると思う。
356353:2000/11/20(月) 04:24
確かにflockを使ってます。
355さんの言う先頭とは
#!usr/local/bin/perl
の前でしょうか、空白行後でしょうか?
どちらでも試しましたが
500 Internal Server Error
になってしまいます。
是非ともお力添え御願いします。
357名無しさん:2000/11/20(月) 06:23
>356
>確かにflockを使ってます。
flock(W@` 2);とか、flock(W@` 8);なんて書いてある所を
エディタで検索して #でコメントにしちゃえば動くよ。

# flock(W@` 2); ← んな感じに。
358名無しさん:2000/11/20(月) 19:18
すいません、超初心者です。
if ($n == 1 || $pre ==2 || $pre ==3 )
{$re = "hello";}
これを、スマートに書くとどうなるのでしょうか。
if ($n =~ /[123]/)
{$re = "hello";}
だと、$n=11のときもヒットしてしまいます。
こんな私はなにか大きな勘違いをしているのでしょうか。
359とりあえず:2000/11/20(月) 19:22
$n == 1 or $pre == 2 or $pre == 3 and $re = hello;
360358:2000/11/20(月) 19:38
何度もすいません。

ありがとうございます。

それで、更に、

$n == 1 or $n == 2 or $n == 3 or $n == 7 or $n == 8 or $n == 9 or $n == 10 or $n == 11 or $n == 12 or $n == 13 or $n == 14 or $n==15 and $re = hello;
print "$re\n";

なんていうのはさらに簡単になりますでしょうか。
やっぱり私の脳みそが腐っているのでしょうか。
1@`2@`3@`7@`8@`9@`10@`11@`12@`13@`14@`15
だけおこないたい処理があるのです。
361>360:2000/11/20(月) 19:41
アホだこいつ。
今からでも遅くないから人生リセットしろ。
362358:2000/11/20(月) 19:49
す、すいませんでした。
あ、358でまちがいがありました。

if ($n == 1 || $n ==2 || $n ==3 )
{$re = "hello";}
これを、スマートに書くとどうなるのでしょうか。
if ($n =~ /[123]/)
{$re = "hello";}
だと、$n=11のときもヒットしてしまいます。
こんな私はなにか大きな勘違いをしているのでしょうか。

・・ということだったんですけれども。ハイ。
363名無しさん:2000/11/20(月) 20:05
1は0より大きいよ。
364名無しさん:2000/11/20(月) 20:07
$n % 1 == 0 and $n >= 1 and $n <= 15
365358:2000/11/20(月) 20:16
・・・。なるほど。ハマっていたのでしょうか、わたしは。
人生リセットします。
ありがとうございました。
366名無しさん:2000/11/20(月) 20:16
363は不愛想だけど親切さんと見た
367358:2000/11/20(月) 20:30
できました。ありがとうございました。
こんなに親切なひとがおおいのは2ch広し
といえど、ここだけでは・・・。
正規表現で、123の文字いずれか一文字ってのは
だめなんですかねえ。
368教えてくん:2000/11/20(月) 20:34
>>364
$n % 1 == 0
って何? 常に真じゃないの?
369念のため:2000/11/20(月) 20:40
整数かどうかチェックしてんだろ。
370名無しさん:2000/11/20(月) 20:52
$n =~ /^[123]$/
371名無しさん:2000/11/20(月) 20:55
if(grep($n == $_@` (1@`2@`3@`7@`8@`9@`10@`11@`12@`13@`14@`15)){
372358:2000/11/20(月) 21:05
ふむふむ。なるほど。
373名無しさん:2000/11/20(月) 23:12
$n =~ /(1|2|3)/;
374名無しさん:2000/11/21(火) 01:07
サブルーチンの前方宣言は何に使うんですか?
375名無しさん:2000/11/21(火) 02:22
JISをRACEに変換したいのですが……。
何か良いモジュールはありませんでしょうか?
376名無しさん:2000/11/21(火) 07:53
$yomu = <R>; で一行だけ読み込めるようですが、
ファイルを全て読み込まずに、初めの一行だけ
書き換える(上書き)方法はありますでしょうか。
377名無しさん:2000/11/21(火) 10:45
>>376
行の長さが変わらなければできるけど、
一般には長さが変わるので難しい。
378376:2000/11/21(火) 11:20
>377
そうですか…。 行の長さはバラバラです。
大きなファイルを全て読み込まずに、
一行だけ書き換える事が出来れば便利なのに。
ありがとうございました。
379名無しさん:2000/11/21(火) 11:30
>376
一つのファイルを使用するっていうのをやめるとかは?
一行1ファイルとか:D
380名無しさん:2000/11/21(火) 12:48
全角「:D」カッコイイ
381名無しさん:2000/11/22(水) 01:01
全角?
382名無しさん:2000/11/22(水) 02:45
>>375
RACEのエンコーダは、すくなくともCPANにはないようですね。
でもUnicode処理にJcode.pmとか使えば、わりと簡単そうではある。
ライブラリ探して時間を取るより自作するほうが早いかも。
383PPP:2000/11/22(水) 10:57
evalって何をするんですか?
説明とか見てもperlのプログラムとみなして〜とか書いてあってさっぱり
わかりません。
具体的にはどんな動きするのか??とかevalってこんなもん!とか
教えていただけるとありがたいのですが、おねがいします。
384名無しさん:2000/11/22(水) 13:49
perlからUNIXアカウントを自動作成するスクリプトを
作りたいのですが。
普通にコマンドラインから打つとパスワード2回要求されると
おもうのですが、
そういう場合はどうすればいいのでしょうか。
パスワードファイルはshadowファイルを使っています。
385japu:2000/11/22(水) 15:37
$code = 'print "Creamy Mami\n"';
print "$code\n";
eval $code;

----
/usr/sbin/pw とかそのたぐいのものを使うとかね。直接いじって良いことはあまり無い。
386名無しさん:2000/11/22(水) 16:36
Socket 使ってファイルのダウンロードを行っています。
お聞きしたいのはダウンロード前に対象ファイルの容量を判断する方法はあるか?なのですが。

Content-length ヘッダを吐いてくれればいいのですが
必ず吐いてもらえるものでもないようで、困ってます。
387386:2000/11/22(水) 16:39
容量は細かな数値までわからなくても良いです。
基準(例えば100KByte)よりも多いか少ないかわかれば…
388名無しさん:2000/11/22(水) 17:29
アクセスカウンターについてお伺いします。

トップページにカウンターを付けているのですが、
他のページに付けた「トップに戻る」ボタンを
クリックすると、カウンターの数字が上がってし
まいます。
これでは正確な訪問者数を把握出来ないので何と
かしたいです。方法があればどなたかアドバイス
下さい。
ちなみにカウンターはベッコアメのものを使って
ます。
389名無しさん:2000/11/22(水) 20:11
>388
スレのタイトルよく見ろよ。
それはPerlの質問じゃないだろ。
ベッコアメに聞け。
390名無しさん:2000/11/22(水) 21:30
>389
アクセスカウンターもcgiだろうが。

>388
フレーム使え
391名無しさん:2000/11/22(水) 22:23
>390
ハァ?
このスレはPerlのスレだぞ?
CGI=Perlじゃねぇぞ、ボケ。
392名無し酸:2000/11/22(水) 23:04
390は夢を見ているのです
そっとしておいてあげましょう
393390:2000/11/22(水) 23:30
>391
>CGI=Perlじゃない

そんなことわかっとるわ(笑
ここはCGI,Perl,レンタルサーバの板だぞ。
スレとミスマッチなぐらいで吠えるなって意味だよボケ犬。
394名無しさん:2000/11/23(木) 00:05
(ノ・∀・)ノ マァマァ マターリシヨウヨ
395名無しさん:2000/11/23(木) 00:18
>390

うわぁ、電波君だよ(w
396名無しさん:2000/11/23(木) 00:40
どちらにしろ用意された物を使うだけだったり、レンタルCGIは板違いだろ。
397名無しさん:2000/11/23(木) 00:48
>396
390のような馬鹿に何を言っても無駄です。
398>390:2000/11/23(木) 01:15
>スレとミスマッチなぐらいで

へ〜、スレとミスマッチでいいんだ(過剰藁
399390@キンチョール:2000/11/24(金) 02:35
二週間に一回しか風呂に入らないチンカス童貞のオタさんたちこんばんは。

こないだわざわざスレ立てて「この板ってあまりいい人いないんですね」
って書いたやつがいるけど、俺もその通りだと思うよ。
俺は経済関係の板の常連だけど、俺の知る2ちゃんの板の中ではこの板が
一番荒れやすいなと前から思ってた。
パソコンオタクはネット上でしかマッチョになれなくて、しかも現実世界
のストレスを板にぶちまけるからウザくてしょうない。
筑紫哲也が「ネットは便所の落書き」って言ったことあるけど、ネットの
悪いイメージはお前らオタ馬鹿たちのせいだな。
さよなら便所に巣食う害虫たちよ。二度と来ないからゴミレス付けても無
駄だよ。(嘲藁

シューッ
400名無しさん:2000/11/24(金) 02:39
390 からここまでの発言まとめて便所の落書きだ。
煽りなんか一々気にする方が悪い。
だからそんなもんをわざわざあげないように。
401386:2000/11/24(金) 05:38
良い意見をいただけると信じて気長に待っています。
402名無しさん:2000/11/24(金) 06:30
>>386
Content-Length 吐かないのに予め容量を知るってのはできんだろう
403名無しさん:2000/11/24(金) 10:49
>>402
だよねえ。少なくともHTTPのレベルではできないと思う。
TCPとかIPとか、さらに下位のプロトコルまで降りたら
何かそういう合計サイズ関係のデータ取れるんですか?
404名無しさん:2000/11/24(金) 17:41
ファイルロックについてお聞きしたいのですが、
現在は下のコードようにカウンターのデータファイルを
書いていて、ファイルロックをしていません。
このような場合のファイルロックの方法を教えて下さい。
お願いします。

open(OUT@`"> count.dat");
print OUT "$count\n";
close(OUT);
405名無しさん:2000/11/24(金) 19:20
open(OUT@`"> count.dat");
flock(OUT@`2);
print OUT "$count\n";
close(OUT);
406名無しさん:2000/11/24(金) 19:25
ファイルロックについては、いろいろ面倒な話もあるんだけど
見たところまったく初めての人らしいので、とりあえず
「とほほのCGI入門」 http://wakusei.cplaza.ne.jp/twn/wwwcgi8.htm
あたりを読んで試すといいでしょう。

そして次に、この板の過去ログの「CGIの基礎知識」
http://tako.2ch.net/test/read.cgi?bbs=perl&key=963036704&st=33
を読んでください。ていうか必ず読むこと。
407名無しさん:2000/11/25(土) 00:36
Win32版のActivePerlを使っています。
Perlでキーの入力待ちをするにはどうすればいいのでしょうか?
408>407:2000/11/25(土) 02:06
<STDIN>;
409名無しさん:2000/11/25(土) 06:39
Perlを使ったCGIで画像の縦横のサイズって取得できますか?
410名無しさん:2000/11/25(土) 07:36
411名無しさん:2000/11/25(土) 08:26
>>409
画像フォーマットによって方法は異なるけど可能です。
それ以上はこの質問だけではなんとも。
412japu:2000/11/25(土) 10:09
Image::Size を使う。
http://search.cpan.org/
413409:2000/11/25(土) 23:18
検索した結果、該当するGifファイルが出力されるCGIなのですが、
<img src="*.gif" height="x" width="y">のxとyの部分を自動取得したかったのです
414名無しさん:2000/11/25(土) 23:26
perlでサーバーのload averageを取得して表示するようなものを
作りたいのですがload averageってどうやって取得したらいいの
でしょうか?
`uptime` で返って来た値を切り分けたらできそうなのですが、
スマートじゃないので一発で値を求められる方法があればうれしい
のですが・・・
やりたい事は、この板の上にあるようなサーバー負荷インジケーター
みたいなのを作りたいんです。よろしくお願いいたします。
415名無しさん:2000/11/26(日) 00:57
>>414
Sys::Cpuload ( http://search.cpan.org/search?dist=Sys-CpuLoad )
を見たら、/proc/loadavgが読み出せるなら、それを使う。
/proc/loadavgが使えないOSは、結局uptimeコマンドを実行さしてますね。
416414:2000/11/26(日) 01:51
>415
ありがとうございます。大変参考になりました。
これを使ってトライしてみようと思います。
417サーバー負荷インジケーター って、:2000/11/26(日) 02:02
混んでて、遅いよ!…が判ればいいだけ あるな。
逆に来る人は負荷が増えるのはイヤだな
418名無しさん:2000/11/29(水) 10:56
$msgに<BR>をいくつか含んだ文字列がはいっていて
<BR>が$point(数字)以上あったら
$point個目の<BR>以降の文字列を切り捨ててさらに他の処理をする
というコードをかきたいんですけれども
if($msg=~/^((?:.*?<BR>){$point})/){
$msg=$1;
その他の処理
}
このようにした場合一応はうまくいくんですが
なぜかたまーにこの部分でサーバーエラーを起こします。
普段はエラーおこさないのにエラーを起こすので
どういう条件で、なぜおこるかがまったくわかりません。
どうしてなんでしょう?
419名無しさん:2000/11/29(水) 11:39
>>418
まずエラーメッセージを確認しよう。
参考↓スクリプトエラーをブラウザで見る方法の例
http://tako.2ch.net/test/read.cgi?bbs=perl&key=971627428&st=202&to=202

でも出したいときに限って、そのたぐいのエラーっておきないんだな・・・。
420名無しさん:2000/11/29(水) 16:15
超初心者です。
今回、初めて無料メールフォームCGIを自分でカスタマイズしたのですが
送信結果のHTMLを書き込むところ(<<END_OF_DATA 〜 END_OF_DATA間です。)
で前もって作っていたHTMLタグをそのままコピペしたんですが・・・。
表示してくれません。単純に「ありがとうございました」程度なら、
表示されるんですけど・・。<img src//とか<table///のタグは
使っちゃダメなのかな・・。わかりにくい質問内容ですみません。
誰かご存知の方、教えてください。
421名無しさん:2000/11/29(水) 16:49
@aと@b
があって
@aには("0"@`"1"@`"2"@`"3"@`"4"@`"21")
がはいっていて
@bには("0"@`"1"@`"2")
とはいっているように@aには@bにはいっていない要素がいくつかあります
これをとりだすには(要するに3と4と21をとりだす)どうすればいいでしょうか?
422名無しさん:2000/11/29(水) 16:50
どのCGI?
>ご存知の方教えて
だと誰も教えてくれないよ。
一応ソース貼り付けてみな
423名無しさん:2000/11/29(水) 17:56
>>421
よくあるのは作業用ハッシュ%cを使うこんな方法。
$c{$_}++ for @b; ## @bの要素をカウントする
@d = grep {!$c{$_}} @a; ## @bに存在しない要素のみ抜き出す
424名無しさん:2000/11/30(木) 00:09
$gane[0] = 'ほにゃ';
$gane[1] = 'はにゃ';
$gane[2] = 'ふにゃ';
$gane[3] = 'ぐにゃ';

if ($nyan eq「$ganeのいずれか」){print"にょ";}
else{print"にょん〜";}

ってしたいときに、「$ganeのいずれか」の部分はどう書けばいいのか教えてください。
4257c:2000/11/30(木) 01:06
%gene = (
'ほにゃ' => 1@`
'はにゃ' => 1@`
'ふにゃ' => 1@`
'ぐにゃ' => 1@`
);

if( $gene{$nyan} ){ print "にょ" }
else{ print "にょん〜" }

あるいは

$gene[0] = ...;
はそのままで

if( {map { $_@` 1 } @gane}->{$nyan} )
とか。
4267c:2000/11/30(木) 01:09
失礼。ganeでした。
427424:2000/11/30(木) 03:00
7c様
うまくいきました〜!!ありがとうございます!!
ちなみに、
$gane[0] = 'ほにゃ';
$gane[1] = 'はにゃ';
$gane[2] = 'ふにゃ';
$gane[3] = 'ぐにゃ';
は他のとこで使うので下の方でやりました。
428名無しさん:2000/12/01(金) 02:31
新スレ立ててしまったんですけどこっちで改めて質問させてください。

初心者なんですがWINでCGIを動かすためにANHTTPD+ActivePerlをインストールしました。
KENTさんのところを見ながらやっているのですがとりあえず
http://localhost/~kent/でindex.htmlは表示できるようになったのですが
index.htmlと同じフォルダにhello.cgiを置いてもhttp://localhost/~kent/hello.cgi
がHTTP404未検出になってしまします。
CGI、Perlに関係ないミスのような気もするのですが・・・
ほかに適当なところも無いのでここに立てさせてもらいました。
よろしくお願いします。
429名無しさん:2000/12/01(金) 02:57
>>428
404エラーはファイルが見つからないってことです。
実際の構成がどうかわかりませんが、ホストがそう解釈してます。
ファイル名とURLが間違いないかもう一度確認してみてください。
また、CGIが利用可能に設定されているかも確認してください。
430名無しさん:2000/12/01(金) 02:59
>>428
おやくそくなので念のため聞いておきますけど、メモ帳で
ファイルを保存したため、ファイル名が"hello.cgi"じゃなく
実は"hello.cgi.txt"になってる、とかいうことはありませんか?
431名無しさん:2000/12/01(金) 03:44
frontpageでhtmlだけでページを作っていたんですが、
perlに手を出そうとして、Activeperlとapacheをダウンロードしたとたん。
電源が落ちてしまいました。その後、復帰したら
frontpageが動かなくなり。サーバーに対する要求ができなくなりました。
鯖側のextensionsがインストールされていないとか、
他のが実行されている可能性があるとでてしまいます。
助けてください。


432名無しさん:2000/12/01(金) 04:14
>>431
マルチするような奴にApacheは無理。
433名無しさん:2000/12/01(金) 04:26
新スレたてれば初心者スレッドで書け。

初心者スレッドで書けば、初心者板いけ
しまいにはマルチ扱いかよ。
最悪だなここは


434428:2000/12/01(金) 10:41
>>429
どうやらそのとおりだったみたいです。
掲示板ではうまくいきました。
初心者の自分でも恥ずかしいくらいの勘違いでした。
こんなくだらない質問に付き合ってくれてどうもありがとうございました。
435名無しさん:2000/12/02(土) 20:50
@dataという配列に入っているデータの最大番号(?)を
調べるにはどうしたらいいんでしょうか??

(例)
@data[0]には、"おはよう"
@data[1]には、""
@data[2]には、"こんにちは"
@data[3]には、"こんばんは"
@data[4]には、"ありがとう"

この場合には、4という数値が返ってくるようにしたいんですが。
お願いします。
436名無しさん:2000/12/02(土) 22:00
scalar(@data) - 1
437名無しさん:2000/12/02(土) 22:16
$#data + 1
438名無しさん:2000/12/02(土) 22:18
>>469
わるいこと言わんから、Perlマニュアルの「Perlのデータ構造」
http://www.att.or.jp/perl/man/perldata.1.html
をいちど読んどきなさい。

さらに時間があれば、
http://www.att.or.jp/perl/man/
から行けるすべてのマニュアルを読んでおくこと。
439名無しさん:2000/12/02(土) 22:19
違う。$#dataでいい。

ところで、なぜに配列スライスを使う?

440名無しさん:2000/12/02(土) 22:20
>違う。$#dataでいい

あ、>471ね。

441名無しさん:2000/12/03(日) 00:06
scalar(@data); #要素数
$#data; #最大索引番号

ちょっと違う。
全ての要素を見るためには後者が正しい。
別に foreach とかでもいいけど。
442475:2000/12/03(日) 00:13
あれ?469の言う有効な要素の数だけ見たいのか?
それなら scalar(@data) でいいが、最大索引なら $#data でいい。
"" じゃなくて undef にしといたほうがよさそうだけど。
443FU-MI:2000/12/05(火) 16:27
全然わかってない者ですが、
自分の持ってるコレクションのデータベースをサーバ上に置いて、
Iモードでどこからでも検索できるようなものを作りたいと思ってます。
ASPなら少しかじったことがあるんですが、perlでは
ASPみたいにSQL文を使えたりできるんでしょうか?
444名無しさん:2000/12/05(火) 19:14
なんか会話と番号がずれてるような気がするんですが、、、
気のせい?
445名無しさん:2000/12/05(火) 21:04
名前\tコメント\tメール\t日付
名前\tコメント\tメール\t日付
名前\tコメント\tメール\t日付


というログファイルがあるのですが、日付の形式が
1998年1月6日(火) 16時4分という形式になっています。
(漢字もそのまま)
199816164という形式にまではできたのですが、ここから
198801061604という形式(0を入れたい)にするにはどのように
すればよいのでしょうか?

ログファイルごと一括変換したいのですが、日付の行だけ
別ファイルに抜き出してから変換する方法でもよいです。
446>445:2000/12/05(火) 21:20
1998年1月6日(火) 16時4分を199816164に変換する時に
sprintfを使ってフォーマットすればいいのでは?
一旦199816164になってしまったものをフォーマットするのは
面倒・・・というか無理だと思います。
例:199816120は1998年1月6日1時20分なのか12時0分なのか
判断できません。
447名無しさん:2000/12/06(水) 02:20
すいません
一度発行したクッキーを削除するにはどうしたらよいのでしょうか?
448にゃんだー:2000/12/06(水) 02:33
ホームページを作っているのですが、クリックするとポータルサイト(最初のページ)を登録してある
ホームページに変更できるようにするにはどうしたらいいのですか?
探して見たのですが、うまいものがありませんでした
どなたかご存じの方教えて下さい
その例がありましたので下に載せます
http://www.excite.co.jp/more_excite/link/start_page.dcg
449名無しさん:2000/12/06(水) 02:37
>>448
そこからソースをパクればいい。
450名無しさん:2000/12/06(水) 03:06
>>447
Cookieは使ったこと無いから良く知らないけど、
期限の切れたCookieを再発行すれば良いと前どっかで聞いたよ。
間違っていたらごめん。
451名無しさん:2000/12/06(水) 03:14
>446
ありがとうございました。sprintf使いました。
結局、一度1998/1/6/1/6/4に変換してからやりました.
こんなに時間がかかるとは。
452くわとろ:2000/12/06(水) 15:47
$alist=<A HREF="○○.html">○○</a>/<A HREF="××.html">×</a>
<A HREF="○○.html">○○</a>と<A HREF="××.html">×</a>にsplitを
使ってリストにしたいのですが、途中の[/]にヒットさせるのにはどのように
やればいいかアドバイスお願いします。どうしても</a>の[/]にもヒットして
しまうのでわかりません。おねがいします。
453にゃんだー:2000/12/06(水) 17:56
449さんありがとうございます
でもソースをパクることができないのです(TT)
どなたかお願いします
454名無しさん:2000/12/06(水) 18:03
>>452
[>/<]で分割させてたらどう?
それで分割後に[<]と[>]を足すとか。
455[email protected]:2000/12/06(水) 18:27
$alist = q[<A HREF="○○.html">○○</a>/<A HREF="××.html">×</a>];
@foo = ($alist =~ m[(<A HREF=".*?">.*?</A>)]gi);
print "@foo\n";
456くわとろ:2000/12/07(木) 09:17
>454さん&455さん
おはようございます。アドバイスありがとうございます。
やっと解決いたしました。
457くわとろ:2000/12/07(木) 17:12
また質問させていただきます。
スカラー値にあるのソースがすべて入っていたとしてその中の
アンカータグ<a>ではじまり</a>で終わるすべてを検出したいとき
たとえば
$doc=<html>....<a href=○○.html>○○</a>〜〜〜<a href=××.html>××</a>
〜〜〜<a href=☆☆.html>☆☆</a>...</html>を
<a href=○○.html>○○</a>
<a href=××.html>××</a>
<a href=☆☆.html>☆☆</a>
とスカラーもしくはリストで取得したいんですが、途中に空白文字や
改行が入ってしまっていてうまくいかないのでアドバイスお願いします。
質問ばっかですみませんがよろしくお願いします。

458>457:2000/12/07(木) 17:55
@atags = $doc =~ /(<a .*?\/a>)/g;

こんなんで良い?
459458:2000/12/07(木) 18:01
捕捉。
配列に入れといたのは好きに取り出して使ってね。
460名無しさん:2000/12/07(木) 18:13
>>457
正規表現のマニュアルは読みましたか?
http://www.att.or.jp/perl/man/perlre.1.html
458さんの回答の意味は「最短一致」のとこを見れば理解できるでしょう。
そのほか「/s 修飾子」なども参考に。
461名無しさん:2000/12/07(木) 19:00
>>460
紹介するならこっちでしょ。
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlre.html

最長一致とか最短一致とかいう誤解しやすい表現はやめようよ。
462460:2000/12/07(木) 19:42
>>461
あ、どうもー。そこ知りませんでした。
「最小マッチング」なのね>minimal matching
463くわとろ:2000/12/08(金) 09:12
みなさん。おはようございます。ありがとうございます。できました。
>460さん
マニュアルは一応読んだのですが、さっぱりな正規表現は状態で、
とっつきにくい部分でまいってます。実践あるのみかなぁ〜と思ってる
のですが、なかなかうまく行かなくって何度も読んでがんばります
>461さん
参考にさせていただきます。
464名無しさん:2000/12/08(金) 13:53
readpipeってあるじゃないですか。
あれであるコマンドを実行したとします。
で、そのコマンドがコマンド実行後に
ユーザーからの入力を求められるものだった場合、
その入力もプログラム上から自動で入力することは可能ですか?
(たとえばFDISKとか)
何か意味が分かりづらいかもしれませんが、
もし分かる方がいらっしゃったら教えて欲しいです。
お願いします。
465名無しさん:2000/12/08(金) 16:28
perlで書かれたCGIのHTMLタグを書き込むところにSSIコマンドを挿入させることって
無理なんでしょうか?入れて実行しても反映されませんよね。
466名無しさん:2000/12/08(金) 16:32
>>465
そんなことしようとしなくても、
そのCGIで処理させればいいのでは?
467名無しさん:2000/12/08(金) 18:29
>>466
それが、わからんのです。
そのCGIに入れ込んじゃうってことですかね。
468466じゃないけど:2000/12/08(金) 19:11
>そのCGIに入れ込んじゃうってことですかね。
そういう事です。何を入れたいのかわからないですが、例えば
掲示板にカウンタを入れたいなら、極端に言えばその掲示板
スクリプトの中にカウンタのスクリプトをぶち込んでしまうのです。
多少の改造は必要ですが、案外簡単にできますよ。
469sage:2000/12/09(土) 07:04
それじゃなきゃ
`hoge.pl`

楽だし
470469:2000/12/09(土) 07:06
471名無しさん:2000/12/11(月) 01:21
aaaaaaaaaaaa
bbbbbbb
--
ccccccc
dddd
--
eeeeeeeee
ffff
という内容のファイルを標準入力から読みこんで--で切って
それぞれ2行の3つの要素からなる配列にするには
どう書けばいいでしょうか?splitしたのですが
上手く行きません~b--c~みたいにかくといけますが
なんとなく書き方が気持ち悪いです
あと何故か行の先頭に数字の1が付いたりします
なぜつくのか解りません誰か教えてください
472名無しさん:2000/12/11(月) 01:50
$/="--\n";
でどうよ?
473名無しさん:2000/12/11(月) 01:57
>>471
@a = split /--\n/@` $filetext;
てなぐあいに「--」+「改行」でsplitするだけでいいと思うけど。
そんな単純な問題じゃなのかな。改行コードが"\r\n"だとか?

>あと何故か行の先頭に数字の1が付いたりします
これはソース見せてくれないと、おれにはわからんです。
474472:2000/12/11(月) 01:59
>>473
あ、そっちのがいいすね。
475473>472:2000/12/11(月) 02:00
>>474 番号逆でした。スンマソ
476471:2000/12/11(月) 03:40
>472、473
できました!
split /--/でやってました
ありがとうです
で、1の方はよくわからなかったけど直りました
最初join野仕方がヘンなのか?とか
おもったけど???です
(改行コードが\r\nだったのもあったので
これが原因なのかも???)
とにかくありがとうございました
477名無しさん:2000/12/11(月) 14:43
file管理に関して勉強したいのですが
お勧めの日本語のサイトってありますでしょうか?


478くわとろ:2000/12/11(月) 15:38
毎度お世話になっております。くわとろです。また質問させてください。
use LWP::Simple;
$doc = get "http://○○.html"であるHPを持ってきたときに、
普通のHPであればみなさんのおかげで<a>タグを取得できるようになりました。
ただフレーム分割されてる場合、
<FRAMESET>
<FRAME NAME="×" SRC="××.html">
<FRAME NAME="☆" SRC="☆☆.html">
</FRAMESET>の時に「××.html」と「☆☆.html」を取り出して、
○○.html/××.htmlや○○.html/☆☆.htmlにしてgetでそれぞれの
HPを取得したい場合にどうやってやればよいのかアドバイスをください。
よろしくお願いいたします。

479>478:2000/12/11(月) 19:04
今まで聞いた事で考えて出来ない?

#! /usr/local/bin/perl
use LWP::Simple;
$doc = get "http://〜";
if(index($doc@` '<frame') > -1){
@fremas = $doc =~ /<frame.*?src="(.*?)"/ig;
foreach $tmp (@fremas){
$tmp = get "http://〜$tmp";
#ここでサブルーチンに飛ばすなりして処理しても良い。
#その場合は戻ってきた時に$tmp = '';とかすれば
#メモリ節約出来る…かな?
}
}
#空にしてなければ@framesに全部入ってるからあとで処理しても良い。


これで良いんじゃないかな?
動作未確認だけど。
480479:2000/12/11(月) 19:08
ごめん、訂正。
4行目は
if(index($doc@` '<frame') > -1 || index($doc@` '<FRAME') > -1){
にして。もしくは
if($doc =~ /<frame/i){
に。
481くわとろ:2000/12/12(火) 09:44
>479さん
おはようございます。できました。ありがとうございます。
479さんはどんな風にperlを学んだんですか?
正規表現とか本読んでもマニュアル読んでも今一つピンとこないんですが
やっぱりソース書いて慣れるしかないんですかね?
いい勉強方法とかありましたら、教えていただけますか?479さん&みなさん
482名無しさん:2000/12/12(火) 18:24
>>481
俺もまだ初心者の域だからあまり大きな事は言えないが。

俺はまずCGIの改造からはじめて、とほほさんのところで勉強をして、
それでPerlの基礎を覚えた。
本とかマニュアルは全然読んでない。
ただ「自分の持ってる知識でどこまでできるか」を色々考えてる。
足し算と引き算と掛け算と割り算しか覚えてなくても、アイディア次第で
複雑な方程式をも解明する事ができる。
わからないことがあった時、必死になって調べた。
無駄は多いけどそういうやり方を繰り返すうちに色々と覚えていった。

どんな事でも同じ。
無駄を繰り返せ。
教えられたものは身につかない。
勉強に近道はない。
マニュアル読んでピンとこないなら、それを使ったスクリプト
組んでみろ。
当然ローカルでな。

いい勉強方法=安易に他人に甘えない
だと思うぞ。

偉そうな事言ってすまない。
483名無しさん:2000/12/12(火) 19:02
>>482
激しく同意。わしもおんなじ境遇だ。
とほほでなくレスキューで覚えたが。
484479:2000/12/12(火) 20:01
>>481
俺も改造から入ったですね。
ソース見て、なんとなくこの辺変えたらこうなりそう…
てのをとにかく試してみて、どうしてもわからない所は
本を買いに行って、知りたい事触ってそうな奴をとりあえず買って
読みながら色々試して出来る事を増やしていったです。

482さんも行ってるけど、基本的な事しか出来なくても
やり方次第では大抵の事は出来ますよ。
あとは、人のソース見たり、ここみたいに情報があつまる所を見て、
より効率的なやり方覚えたりしてますね。

あと、自分でスクリプト書いて配布するようになってからは
かなり知識増えましたよ。
やっぱ、書く数が違うし、人に使ってもらうプレッシャーからか
真剣に勉強しながら書くようになりましたし。

とにかく書く事だと思います。
試行錯誤の経験を沢山する事が、なにより多くのものを
獲られると思いますです。

勉強って、答えを知る事では無く
答えの出し方を理解する事だと思います。

長文&偉そうで失礼しました。
485名無しさん:2000/12/12(火) 23:54
無駄を繰り返せ、ってところに激しく同意。
無駄の繰り返しが大事なのだよねー意外に。
486名無しさん:2000/12/12(火) 23:57
無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄
無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄
無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄
無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄
無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄
487名無しさん:2000/12/13(水) 00:08
しかし要領の悪い奴は、486みたいにいつまで〜も無駄を
繰り返すんだよな・・・。
488KENT:2000/12/13(水) 01:55
俺の事か?
489名無しさん:2000/12/13(水) 02:32
いきなり全部できるようになろうと思わないこと。
今なにをすればいいかではなく今なにができるかを考えること。
(つまり今必要な技術を身につけていくってこと)

これはPerlに限らずに言えることだと思います。
490くわとろ:2000/12/13(水) 11:02
おはようございます。みなさんアドバイスありがとうございます。
やっぱり無駄でもいいからたくさん書いたほうがいいんですね。
くわとろもがんばってみます。
また何かわからんことあったらよろしくお願いします。
491 :2000/12/13(水) 11:33
i-mode test
492名無しさん:2000/12/13(水) 15:08
本読んでてわからないところがあるんですが、「$|」の意味ってなんですか?
それとバッファをフラッシュするってなんですか?
教えてくださぁい。
493むぎ茶:2000/12/13(水) 16:26
書きこむちゅうことは OSに頼むのね(システムコール)
毎回読んだら重たいから ある程度書くこと(読むこと)がたまったら
頼みます.
その貯めるところがバッファ。
フラッシュするってのは、バッファにたまってる分を書きこむこと。
$|をセットしとくと print のたびに フラッシュが実行されると
思っとけばいい。
Pelr5 なら FileHandle 使って autoflush って書け
494むぎ茶:2000/12/13(水) 16:26
毎回読んだら => 毎回呼んだら
495名無しさん:2000/12/13(水) 17:05
その説明でわかるか?具体的には
#!/usr/local/bin/perl
print "Content-type: text/html\n\n<html><body>";
print "おまえウザイ<br>\n";
system "itteyoshi.sh"; # 逝ってよし表示
print "オマエモナー<br>\n";
exit;

何も考えずにこのcgi実行すると「逝ってよし」から表示し始めて
しまって失敗に終わる。perlが出力をバッファリングしてるからだ。
exit が来るまで表示しないのが問題。それを回避するのが "$|=1" だ。
2行目に書いておけば完了。
496掲恥板で:2000/12/14(木) 22:13
うんこ  土人  等  。。。を規制することは可能?
497名無しさん:2000/12/14(木) 22:37
>>496
if($FROM{'value'} =~ /うんこ|土人|omaegana/i) {&error(word)}
498掲恥板で:2000/12/14(木) 23:11
その他、いろいろNGワードを別ファイルで記述して
読みに逝かせる方法はございますですか?
499japu:2000/12/15(金) 00:35
>>498
あります。
500名無しさん:2000/12/15(金) 00:40
>495
めちゃくちゃよく分かった。さんきゅ。
501497:2000/12/15(金) 01:27
×FROM
○FORM

別にどっちでもいいけど、、、逝ってきます。
502厨房です。:2000/12/15(金) 01:54
PerlでXML::DOMを使ってファイルをパースするときは、

my $doc = $parser->parsefile ("sample.xml");

でいいんだけど、CGIで同様のことをやる場合どうすればいいのでしょうか?
(ちなみにsample.xmlはスクリプトと同じディレクトリにあるとします。)
503名無しさん:2000/12/15(金) 02:28
>>502
XML::DOMは知らないんだけど。
CGI用のプログラムとしてPerlが使えないのであれば、
CGI用のプログラムが内部的にPerlを呼び出すようにしてみては如何?
504名無しさん:2000/12/15(金) 04:19
ていうか、502の意味がマジでわからんぞ・・・
Perl以外のプログラミング言語でXMLをパースしたいってことか?
505名無しさん:2000/12/15(金) 08:01
win2000のサーバーでcgiを使うとして
open(FILEHANDLE@`"filename");
っていうのを使うときfilenameのところは
ファイルの相対パスを指定すればいいの?

506むぎ茶:2000/12/15(金) 12:20
CWDがどこになってるかはWWWサーバーによって違ったりするけど
たいていはCGIの場所になってるので相対パスでもOK.
環境変数 PATH_INFO SCRIPT_NAME 見て判定すると汎用度高し
507名無しさん:2000/12/16(土) 11:08
ファイルハンドルを動的に(?)作るにはどうすればいいんでしょうか。

たとえば、@file = ( '0' .. '9' ); などというのがあったら、
FILE0@` FILE1@` ...@` FILE9
というファイルハンドルを作りたいのです。

できれば、$fp = \*FILE0; と同じように、変数に入ってればもっと
嬉しいのですが…。
508名無しさん:2000/12/16(土) 12:06
>>507
IO::Fileではどうすか?
509名無しさん:2000/12/16(土) 12:35
use Symbol;

$sym = gensym;
open($sym@` "filename");
$_ = <$sym>;
510むぎ茶:2000/12/16(土) 15:39
use FileHandle;

my $fh = new FileHandle();
$fh->open("filename"@` "r") or die "Can't open file[filename]:[$!]";
while(my $buf = $fh->getline()){
# hoge
}
$fh->close();
511教えて下さい:2000/12/16(土) 18:35
自動登録型の検索エンジンのCGIを使っているのですが、
他サイトからの登録をできないようにするにはどうしたらいいのでしょうか。
どうやら登録フォーム(html)を他のサイトに設置されちゃったみたいなんで…(汗)
512 :2000/12/16(土) 18:48
$ref='http://www.511.com/'; # 君のドメインを設定(´ー`)y-~~
if ($ENV{'HTTP_REFERER'} !~ /^$ref/ ) {
  print ("sine");
  exit;
}

Perlってこんなだっけ。書いてないから忘れちゃった。
513>:2000/12/16(土) 19:11
↑正解。ついでに中に。
open(OUT@` ">> $file");
flock(OUT@`2);
print(OUT $ref@`"\n");
close(OUT);

追加なんてどう?
514507:2000/12/16(土) 19:13
ライブラリはなるべく使いたくないので、509さんに紹介して頂いた
Symbolを参考に、

foreach( @files ){
 $handles{$_} = \*{'FILE'.$_};
}

のようにやったら、どうやら上手くいったようです。
その他の方々もお答えいただいてありがとうございました。
515むぎ茶:2000/12/16(土) 20:00
標準ライブラリも使いたくないの(?_?)
516とりあえず、:2000/12/16(土) 21:13
IO::系(の仕様)が標準になるようだ。
Symbolをプッシュしたのはぷれーんな書き方に近く
応用が効くからだ。(ソケットとか)

517511:2000/12/16(土) 22:05
>>512、513
ありがとうございます。さっそく試してみます。
518名無しさん:2000/12/17(日) 03:31
PerlでFTPするにはどうすればいいですか。
具体的に教えてください。
519名無しさん:2000/12/17(日) 03:43
>>518
Net::FTP を使え。
つ−か、スレがあるじゃないか。

http://tako.2ch.net/test/read.cgi?bbs=perl&key=976901276
520名無しさん:2000/12/17(日) 03:58
>>518
もしかしてperldocの使い方を知らんとか?
perldoc Net::FTP
を実行すればいいのよー。
521名無しさん:2000/12/18(月) 01:37
あげ
522名無しさん:2000/12/18(月) 11:34
ご質問があります。配列をハッシュにする方法なんですが、
@doko=("a"@`"1"@`"b"@`"2"@`"c"@`"3");みたいな配列があったとしてそれを
%doko=(a=>1@`b=>2@`c=>3);の用なハッシュに変換するにはどのように
すればいいのでしょうか?
%doko = @doko;ってやっても上手くいってないんで、助けてください。
523名無しさん:2000/12/18(月) 11:38
%doko=("a"@`"1"@`"b"@`"2"@`"c"@`"3");
(ワラ
524むぎ茶:2000/12/18(月) 12:38
>522
それであってるよ。
うまく言ってないのはほかの原因だと思う。
# => は @` のシンタックスシュガーです。
525名無しさん:2000/12/19(火) 05:13
CGIで
print <<EOF;
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01
 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">;
<META http-equiv=\"Content-Type\" content=\"text/html; charset=shift_jis\">
<HTML>


</HTML>
EOF

として、表示されたページには文書型宣言とMETAは無くなってしまいますよね。
これは文書型宣言やcharsetは無視されていると言う事なのでしょうか?
526名無しさん:2000/12/19(火) 07:42
>525
えっ、無くなるの? 無くならないと思うよ。
何でエスケープしてるの?
何でセミコロンがあるの?
何でMETAがそこに居るの?
527名無しさん:2000/12/19(火) 14:08
$comment から 10文字だけとりだしたいのですが
どうしたら、いいでしょうか? 
528むぎ茶:2000/12/19(火) 14:52
substring
529名無しさん:2000/12/19(火) 14:53
>527
substr($comment@`0@`10);
530名無しさん:2000/12/19(火) 15:51
>528 >529
さんきゅー
531名無しさん:2000/12/19(火) 17:25
perlのNet::SMTPモジュールを使用してメールを送信する時に
色々とヘッダーを付けたいのですがうまく付きません。
具体的にはX-MailerとReturn-Passです。
$smtp->datasend("Return-Path: $ret_adres\n");
$smtp->datasend("X-Mailer: $mailer\n");
と指定してるのですが・・・。
532むぎ茶:2000/12/19(火) 17:44
どう うまく逝かないのか書け
533名無しさん:2000/12/19(火) 17:46
X-Moe いれろ。
534名無しさん:2000/12/19(火) 17:46
ヘッダーに表示されないんです。
535名無しさん:2000/12/19(火) 17:47
無料でPerl -wcコマンドが使えるサーバーってしりません?
536むぎ茶:2000/12/19(火) 18:36
メールのボディに表示されてるってこと?
それともどっかに行っちゃってる?

$smtp->data();
$smtp->datasend("X-Moe: sakura-tan\n");
$smtp->datasend("\n"); # separator
$smpt->datasend("haxa haxa\n");

みたいにしてる?
537名無しさん:2000/12/19(火) 18:43
>>535
ローカルマシンにPerlを入れることを強く推奨します。
538名無しさん:2000/12/19(火) 18:48
人のサーバで実験する馬鹿は死ね。
539531:2000/12/19(火) 19:28
>むぎ茶
いえ、全く表示されないんです。
その部分のソースを書いときますんでおかしいところが
あったら教えて下さい。
ちなみにsendmailではしっかりと指定したヘッダーが付加
されるんでメールサーバの設定では無いかと・・・。
$smtp = Net::SMTP->new('サーバ名');
$smtp->mail($from);
$smtp->to($to);
$smtp->data();
$smtp->datasend("To: $to\n");
$smtp->datasend("From: $from\n");
$smtp->datasend("Reply-To: $from\n");
$smtp->datasend("Return-Path: $ret_adres\n");
$smtp->datasend("X-Mailer: ほにゃらら\n");
$smtp->datasend("Subject: $sub1\n");
$smtp->datasend("Content-Type: text/plain; charset=iso-2022-jp\n");
$smtp->datasend("Content-Transfer-Encoding: 7bit\n");
$smtp->datasend("Mime-Version: 1.0\n\n");
$smtp->datasend($msg1);
$smtp->dataend();
$smtp->quit;
540むぎ茶:2000/12/19(火) 19:38
X-Mail@` Return-Pathだけ無視されてるってことか
んじゃ 該当する datasend() でエラーが起こってるのかも
$smtp->datasend("X-moe: japu tan\n") or die $smtp->message();
してみる?
なんかエラーでてそう。
541531:2000/12/19(火) 20:04
メールサーバの設定を変えて貰ったらヘッダーに
指定したものが付加されるようになりました。
どうやらPGの問題じゃ無かった様です。
でもひとつ不思議なのはReturn-Pathの指定をPGでしてるんですが
メールサーバ側が勝手に付けているものもあるらしく
Return-Pathが二つ付加されているんです。
?がいっぱいですがお手数かけました。
ありがとうございました。
542名無しさん:2000/12/19(火) 21:00
>>541
Return-Path は自分で付けるものではなかった気が……。
543japu:2000/12/19(火) 23:06
RFC 822:
| 4.3.1. RETURN-PATH
| This field is added by the final transport system that delivers the message to its recipient.

ということで、自分で付けるものではないですね。
# メール関係のプログラムを作るときは、RFC 822 を斜め読み程度に読んでおいて損はありません。

蛇足ながら付け加えておくと、エラーメールの送付先の指定に Errors-To: をつかうのは正しくありません。
正しくは、envelope-from を指定することによって指定します。
レイ: sendmail -f [email protected]
544名無しさん:2000/12/20(水) 07:17
すいません 今カウンターを作っているのですが
下の様にすると動くのですが長いので小さくまとめたいのです
でにそうすると動かなくなってしまいました
どこに問題があるのか教えてください

#--これを
open(LOG@`"$log");
flock(LOG@`2);
$NO = <LOG>;
flock(LOG@`8);
close(LOG);
$NO = $NO + 1;
open(LOG@`">$log");
flock(LOG@`2);
print LOG $NO;
flock(LOG@`8);
close(LOG);
#--こうしたい
open(LOG@`"+>$log");
flock(LOG@`2);
$NO = <LOG>;
$NO = $NO + 1;
print LOG $NO;
flock(LOG@`8);
close(LOG);
545名無しさん:2000/12/20(水) 07:31
seekが無いだろ。あとflockが間違っとる。
546ほういち:2000/12/20(水) 07:47
>544
こんな感じかな?

open(LOG@`"+>$log");
flock(LOG@`2);
$NO = <LOG>;
$NO = $NO + 1;
truncate(LOG@`0);
seek(LOG@`0@`0);
print LOG $NO;
close(LOG);

#flockの間違いという指摘についてはよくわからないので・・・
とりあえずcloseを外してみました。
547ほういち:2000/12/20(水) 07:49
日本語間違った・・・
closeを外したんじゃなくて、明示的なロック解除を外しました。
548544:2000/12/20(水) 08:03
すいません教えてもらったとおりにやってみたんですけど
やっぱり1からカウンターが増えません

1が増えないところを見ると
+>を使った場合$NO = <LOG>;で$NOにログファイルにある数字が
代入できて無いように思えます
誰か教えてください
549名無しさん:2000/12/20(水) 11:48
カウントファイルのパーミッションは大丈夫なのか?
550むぎ茶:2000/12/20(水) 11:49
エラーチェックいれとけ、ぼけ。
551名無しさん:2000/12/20(水) 13:34
>>548
"+>"は最初にファイル内容を消す。"+<"に変えれば消えない。
552名無しさん:2000/12/20(水) 18:06
この前Perlの本を買いました。それで、読んでて疑問に思った事が
あるのですが、真をゼロ、偽をゼロ以外、orを足し算、andを掛け算と考えた時に、

if ((条件A) and (条件B) or (条件C)) {
  命令;
}

でAが偽、Bが真、Cが偽とすると、
・まずandを先に考えて「ゼロ以外」*「ゼロ」なので
「(条件A)and (条件B)」はゼロ(偽)

・そのゼロと条件Cの論理和は「ゼロ」+「ゼロ」なのでゼロ

ということでこの命令は実行されません。
というのがあるのですが、これっておかしくないでしょうか?

それとこの考え方って、Perlでは、0以外を真、0の場合は偽と見なすのに、
ここでは逆に扱っているので混乱しませんか?
553むぎ茶:2000/12/20(水) 18:27
>真をゼロ、偽をゼロ以外、orを足し算、andを掛け算と考えた時に
勝手にこんな風に考えておいて混乱しませんかもないもんだ。
結論がおかしいってことは仮定がおかしいってことだ。
554名無しさん:2000/12/20(水) 18:35
今の場所の and は条件Aが偽だと実行されないよん。
つまり、条件Aが偽の時点でおわりなの。
555554:2000/12/20(水) 18:44
一行目の「and」は「条件B」だな。
スマソ
556554:2000/12/20(水) 18:54
どっちにしても、その本は捨てたほうがいい。
若しくはちゃんと読め。
557初心者A:2000/12/20(水) 19:05
すんません、Perl(てかCGI)でサーバーにファイル上げる方法教えてください。
どっかで配ってるソフトのここみりゃわかる、ってのでも構いません。
558初心者A:2000/12/20(水) 19:12
すんません。どう考えても自分で検索した方が早いです。
ってか、もう見つけました。駄カキコして鬱です。
でも未来があるので逝きはしません。
あぼーん。
559552:2000/12/20(水) 19:25
>553
>真をゼロ、偽をゼロ以外、orを足し算、andを掛け算と考えた時に
普通はあまりこういう考え方はしないのでしょうか?
なんか、本には、この考え方は論理演算(又はブール演算)と書いているのですが・・・・。
もうわけがわかりません。

>554
ん〜、なんかこの本おかしいような気がします。
1つだけ質問よろしいでしょうか?
インクメント演算子の前置式、後置式のところに、

++$aは$aを1足し、計算した後と同じ値を持ちます。

$a++は$aを1足しますが、計算する前と同じ値を持ちます。

と書いてあるのですが、$aを1足すってどういうことでしょうか?
誠に恐縮ですが、どうか教えて下さい。

560名無しさん:2000/12/20(水) 20:03
>>559
もし、そのとおりに書いてあるなら捨てたほうがいいな。

my $a = 1;
my $b = ++$a;
my $c = $a++;

print "$a@`$b@`$c";

やってみれ。
561名無しさん:2000/12/20(水) 20:07
ちなみに、なんて本?>559
562mu:2000/12/20(水) 20:10
┏━━━━━━━━━┓
┃('Д')y ─┛~~ ┃
┃落ちてマッセ   ┃
┃10cc     ┃
┗━━━━━━━━━┛
http://all.at/bit
563552(559):2000/12/20(水) 20:15
>560
やっぱりおかしいですよね。ちなみにその通りに書いてます。
買ったその日におかしいと思ったんです。返品なんて絶対無理だろうな〜・・・・。
とにかく、他のプログラミング未経験者用の参考書でも探しに行ってみます。
あ、それからありがとうございました。
564名無しさん:2000/12/20(水) 20:18
>>562
ズレてまっせ
565552:2000/12/20(水) 20:22
>561

すぐわかる Perl 深沢 千尋/著

です。自分はプログラミングとか未経験で、ざっと見た中で、
一番わかりやすそうに書いてあったんですが・・・・・。
566名無しさん:2000/12/20(水) 23:37
webで修正とかされていないのかしら。
ほんの名前で検索すると...
Perlポケットリファレンスなんて腐るほど間違ってたよ。
567544:2000/12/21(木) 00:07
>>551
+<を546さんのに加えたら動作しました
ありがとうございました
568名無しさん:2000/12/21(木) 00:14
ログデータファイルを別のログデータファイルにコピーしたいのですが、
その際、カウント数の多い順に並べ替えたいのですがどうしたらいいでしょうか?
569名無しさん:2000/12/21(木) 00:16
>カウント数の多い順に並べ替えたいのですがどうしたらいいでしょうか?
ソートしましょう。
570568:2000/12/21(木) 00:32
>569 ども。
書籍でソートの使い方は簡単なモノしか載ってなく・・・。
どうやって、カウントの要素を見つけて判定するのかが判らないのです。
571名無しさん@ミドリ電気:2000/12/21(木) 00:53
今オリジナルの掲示板作ってるんだけど、いろいろ質問があります。
t-cup風の書き連ね式掲示板です。

1) ロックは今までflockしか使ったことのないヘタレなんだけど、flockでいいの?
勉強してまでももっと別の方法使うべきですか?
2) 文字コードはeucにするべき?
3) KENT風に、コンフィグをテキストに構成させていちいちcgi読み込むごとにロードさせるのってやめるべき?
メインページはhtmlにしようと思っているのでそこまで無理はないとは思うんですが。

ちなみにsakuranet内です。(ワラ
572japu:2000/12/21(木) 01:30
>>568
で、そのデータはどんな形式で格納されているの?
嬉しい回答は良い質問から。

>>571
1. 正しく使えば、通常の使用では問題ない。
2. EUC-JP にしたほうが無用のトラブルを避けられる。分からなければ、EUC-JP にしておけ。
3. fork-exec のオーバーへッドんと比較したら大したものではない。よほど変なことをやらない限りは、どちらでも良い。

> sakuranet内です。

http://www.sakuranet.or.jp/ ですか?

-- japu%冬コミで会いましょう
573名無しさん@ミドリ電気:2000/12/21(木) 01:58
>>572氏(japuさん)
どもです。参考になります。
とりあえずflockは大丈夫ということでしたが、これを機会に別のやり方についてもちょっと勉強してみようと思います。

> http://www.sakuranet.or.jp/ ですか?
いや、独自ドメインの「さくらインターネット」のほうですね。失礼しました。
574名無しさん:2000/12/21(木) 02:48
勉強するなら(1にも書いてあるけど)Perlメモでしょう。
排他処理(ロック)ものってるしね。
言うまでもないのでさげ
575568:2000/12/21(木) 12:01
>572 japuさん、どもです。
↓こんなデータから
1<>date<>name<>mail<>sname<>url<>count3<>imag<>
2<>date<>name<>mail<>sname<>url<>count7<>imag<>
3<>date<>name<>mail<>sname<>url<>count2<>imag<>
4<>date<>name<>mail<>sname<>url<>count4<>imag<>
5<>date<>name<>mail<>sname<>url<>count9<>imag<>
↓こんなデータへ並び替えたい。
5<>date<>name<>mail<>sname<>url<>count9<>imag<>
2<>date<>name<>mail<>sname<>url<>count7<>imag<>
4<>date<>name<>mail<>sname<>url<>count4<>imag<>
1<>date<>name<>mail<>sname<>url<>count3<>imag<>
3<>date<>name<>mail<>sname<>url<>count2<>imag<>

例えばこんな感じで、count数の多い順に並び替えしたものを
別ファイルに保存したいのです。
ソートを調べたのですが良い答えが見つからず・・・。
どうか教えてください。
576むぎ茶:2000/12/21(木) 13:43
count の部分がUNIQUEであるならば
while(my $line = <>){
my($data@` $name@` $mail@`$sname@`$url@`$count@`$imag) = split(/<>/@` $line);
$arrayForSort[$count] = $line;
}
for(my $idx = @arrayForSort-1;0 <=$idx;$idx --){
next if(! defined($arrayForSort[$idx]));
print $arrayForSort[$idx];
}
で どうかな
577japu:2000/12/21(木) 14:17
#! /usr/bin/perl -w

@ordered = map { $_->[0] }
sort { $b->[1] cmp $a->[1] }
map { [$_ => (split /<>/)[6]] } <>;

print @ordered;

__END__

* countX のところには実際の数字が入っているんだよね? ("286" みたいな)

* これは、Schwartzian Transform と呼ばれる方法です。分かりやすく書くと、
@mami = map { [$_ => (split /<>/)[6]] } <>;
@emi = sort { $b->[1] cmp $a->[1] } @mami;
@ordered = map { $_->[0] } @emi;
となります。

>>576
* だめ。効率が悪すぎ。(たとえば100000カウントがあれば、それだけの要素をもった配列が出来てしまう) 疎な配列を取り扱う場合は、ハッシュを使用する作戦もあり。
578むぎ茶:2000/12/21(木) 14:28
カウントちゅうことだったんで UNIQで密だと仮定してました と。
579むぎ茶:2000/12/21(木) 14:52
むぎ茶がいいわけしてら (藁
580568:2000/12/21(木) 16:31
むぎ茶さん、japuさん、どもです。
下の方法で、試行錯誤してたのですが うまくいきません。(:_;)
whileとか使うのでしょうか? もう少し教えてください。
countX の ところは、数字が入ります。

@ordered = map { $_->[0] }
sort { $b->[1] cmp $a->[1] }
map { [$_ => (split /<>/)[6]] } <>;
581むぎ茶:2000/12/21(木) 16:56
んじゃ cmp じゃなくて <=> にしてみそ
582japu:2000/12/21(木) 17:07
あ、すまん。数字比較は <=> だね。
583568:2000/12/21(木) 18:37
むぎ茶さん、japuさん、どもです。
いろいろ試したのですが、やっぱり、できないです。(:_;)
多い順に並び替えしたものを
別ファイルに保存したいのです。教えてください。
584むぎ茶:2000/12/21(木) 18:47
なにが どう できない?
585むぎ茶:2000/12/21(木) 18:47
>568
むぎ茶に さん つけんな
586japu:2000/12/21(木) 19:11
まずはperlの勉強から。(1点)
587568:2000/12/22(金) 01:19
japuさん、どもです。
う〜ん、初心者ですので、ココで質問させてもらいました。
ネバったのですが、うまくいかないです。データ格納されない。
ヒントだけでもお願いします。(:_;)
open(DATA@`"$log"); 以下にそのままで置くだけで判定してくれる?
それともwhileで、一行づつ判定させるのでしょうか?
そではなく、まったく別の方法なのでしょうか?
588加藤茶:2000/12/22(金) 10:13
加藤茶
589むぎ茶:2000/12/22(金) 10:51
<> のところを <DATA>
590R-R:2000/12/22(金) 13:24
某サイトのCGI コーナーからDLさせていただいたものを
カスタマイズしていて、どうしても解決出来ないので、
どなたか、助けてください。以下の URLに
「カスタマイズ中のCGI のココが問題!誰か助けてください!」
というHPをわざわざ作ってみました。
http://hammer.prohosting.com/~usechat/teachchat/
です。どうか、どなたかよろしくお願いいたします。
591むぎ茶:2000/12/22(金) 13:56
<FORM name="cmode"
が消えてる。
んだもんで
function autoclear()

if (self.document.cmode && self.document.cmode.autoclear) {
if (self.document.cmode.autoclear.checked) {
で self.document.cmode が見つからないってことになってる。
以上
592568:2000/12/22(金) 16:08
むぎ茶さん、japuさん、どもです。
589<>で あっさりできました。ありがとうございました。
593むぎ茶:2000/12/22(金) 16:18
だから むぎ茶に“さん”つけんなって。
594R-R:2000/12/23(土) 08:06
591 >> むぎ茶‥‥様

<SCRIPT LANGUAGE="JavaScript">
&lt;!--
function autoclear() {
if (self.document.iform) {
if (self.document.cmode && self.document.cmode.autoclear) {
if (self.document.cmode.autoclear.checked) {

〜中略〜

if ( $icon_use eq 'yes' ) {
print "&nbsp;&nbsp;<font size=2>アイコン表\示</font>";
if ($FORM{'idsp'} eq 'on' ) { $dmy = "checked"; } else { $dmy = ""; }
print "<input type=checkbox name=idsp $dmy>\n";
}
print "&nbsp;<font size=2>発言自動消去</font>";
print "<form name=\"cmode\"><input type=\"checkbox\" name=\"autoclear\" checked>\n";
print "</form>";
}

です。ちゃんと<form name=\"cmode\">あります‥‥。
595むぎ茶:2000/12/23(土) 10:46
むぎ茶に“様”つけんな
596名無しさん:2000/12/23(土) 11:04
>むぎ茶

うれしいくせに(藁

597名無しさん:2000/12/23(土) 14:41
これ前にスレたてた人?
前スレで言われたことはきちんとやったのかな…?
598Dest:2000/12/23(土) 15:39
新スレにもコピペでやっときます

AnHTTPD を使ってるんすけど, AnHTTPD から CGI を実行させても CGI 内
に記述した SSI を実行してくれないんですよね.

.htaccess ファイルもダメで,どうにかならないものですか.
レジストリもいろいろやってみましたがダメでちた
599名無しさん:2000/12/23(土) 17:25
598はマルチ野郎。
相手にする必要なし。
どうしてもってやつは、下のスレでやってくれ。

http://tako.2ch.net/test/read.cgi?bbs=perl&key=977553926
600名無しさんだよもん:2000/12/23(土) 22:29
マ、マルチぃぃぃ………。
601R-R:2000/12/24(日) 14:24

595 >> むぎ茶‥‥殿

590のCGI カスタマイズの件ですが、解決しました。
どのような過程で解決に至ったかを
http://hammer.prohosting.com/~usechat/teachchat/
こちら(↑)の中の掲示板に書いてあります‥‥。
一応、レスってくれたので、ご報告です。
 
602.烝・(>_<)ミ潺。:2000/12/24(日) 17:48
$no@`$m_no@`$title@`$comment@`$date@`$justtime@`$master@`$mail@`$url@`$PW
とあって、ログに格納されてて、それを
@logs=<FILE>;
みたいに全部の行を一気に読み込んで各行を要素として配列@logsに格納します。
で、そっからはじめのところの$nameの値をもとに、行をソートさせたいのですが、
どうしたらいいのでしょう。よろしくお願いいたします。
603japu:2000/12/24(日) 18:46
@ordered = map { $_->[0] }
sort { $a->[1] cmp $b->[1] }
map { [$_@` (split /@`/)[???]] } @logs;

$name ってのが何か良く分からないので、??? には該当する添字を入れてくれ。

何をやっているかは、
http://www.effectiveperl.com/EP.03.pdf
の item 14. Learn the myriad ways of sorting を見て。
604602:2000/12/24(日) 22:17
ごめんなさい。
ミスタイプしていました。
$no@`$m_no@`$title@`$comment@`$date@`$justtime@`$name@`$mail@`$url@`$PW
でした。$masterは$nameのまちがいでした。
605ななそ:2000/12/25(月) 00:42
すいません。そもそもPerlって何なんですか?
Perlへのパスが必要って書いてあったんですが、
何のことなのかわかりません。
お願いします。
606名無しさん:2000/12/25(月) 01:14
ohh!
607japu:2000/12/25(月) 01:17
http://www.google.com/ で perl を検索。
608名無しさん:2000/12/25(月) 05:13
www.bokekasu.com/にアクセスさせて
www.111.com/aho.txt を返したい

www.111.com のアドレスはばれないようにお願いします
socket は使いたくありません

アタマノ良い人 お願いします。刺し違えたくないのです。


609japu:2000/12/25(月) 07:38
607:
無理。
610japu:2000/12/25(月) 08:46
番号間違い。608ね。
611602:2000/12/25(月) 09:31
602です。速攻の返事ありがとうございます。
ところで、あれから四苦八苦し、
@logs=<FILE>;
%key=map { $_@` (split /@`/)[6] } @logs;
@byname = sort { $key{$a} <=> $key{$b} } @logs;
と、自分なりに書きましたが、やはり (笑)ソートしてくれませんでした。
何かが足りないのでしょうか。
612名無しさん:2000/12/25(月) 10:03
質問させて下さい。
最近Perlを始めた者なのですが、shtmlファイルからcmdで呼びだしたスクリプトがうまく動作してくれません。
そのスクリプトを、Telnetでサーバーに接続して、
#perl hoge.pl
とすると希望したとおりの動作をしております。
よって、Apacheの設定(httpd.conf)が悪いのだと思うのですが、どこが怪しいのかさっぱりわかりません。
怪しい項目を教えて頂けませんでしょうか?
お手数ですが、よろしくお願いします。
613( д):2000/12/25(月) 10:13
うまく動作しないってどんな風に?
ブラウザでどんなエラー出る?
Apacheの設定が悪いって専鯖使ってるの?
614612:2000/12/25(月) 10:37
すいません。説明不足だったようですね。
ブラウザではエラーは出ていませんが、例えばカウンターだったら、
『あなたは人目の訪問者です』
のような感じで、データファイルから値を取ってきません。
しかし、コマンドラインから実行すると、
#perl hoge.pl
1
、という風に値を表示します。
サーバーはLinuxをインストールしたマシンを、ローカルで使用しています(テストの為に)。
615( д):2000/12/25(月) 11:05
その hoge.cgiのパーミッションは合っているか?
hoge.cgiはどこのフォルダに入っているか?
Apacheのエラーログは何を出してるか?
ApacheのScriptAlias(でよかったかな…)は設定してるか?
こんなもんかなあ…
616612:2000/12/25(月) 11:55
hoge.cgiのパーミッションは755です。これで大丈夫のはず(と本に書いてありましたので・・・)
hoge.cgiは "/home/httpd/cgi-bin/user/hoge/" に置いてあります。
ログの見方がわかりません・・・
ScriptAliasは、 "ScriptAlias /cgi-bin/ /home/httpd/cgi-bin/" としています。
まずいですか?
617名無しさん:2000/12/25(月) 12:09
>>616
shtmlからの相対パスはあってる?
あとhoge.pl内の相対パスはあってる?

例えば
cgi-bin/hoge/hoge.pl
cgi-bin/hoge/count.txt
cgi-bin/index.shtml
で、index.shtmlからhoge.plをSSIで呼び出した場合、データファイルは
$file = "./hoge/count.txt";
にしなければいけなかったと思う。
$file = "./count.txt";
じゃダメだったと思うんだ。

俺はSSIを使った時にこれで失敗したから、これかと思うんだけど
どうだろう?
618612:2000/12/25(月) 13:04
データファイルはhoge.plと同じディレクトリに置いてあります。
コマンドプロンプトで実行すると正常に値を返しますので、ファイルの位置は間違えていないと
思うのですが・・・どうなんでしょう?
ファイルの位置は、
hoge.pl、hoge.shtml、hoge.dat、全て同じディレクトリに置いてあります。
619名無しさん:2000/12/25(月) 13:15
半角やめれば、レスつくかもね、 >618
620私はバカなのだろう:2000/12/25(月) 14:53
バックスラッシュが出ない。
バックスラッシュの変わりに \ でもいいのでしょうか?
621名無しさん:2000/12/25(月) 16:41
>620
その調子だ。イイゾ
622名無しさん:2000/12/25(月) 16:44
>>612
ローカルのテストの時にSSIを許可してないってオチはないよね?
623612:2000/12/25(月) 18:28
>>622さん
ローカルの時にはSSIを許可しない設定項目ってあるのでしょうか?
もし、あるのでしたらその項目名を教えて下さい。お願いします。
624名無しさん:2000/12/25(月) 19:19
>>623
ローカルLinuxにApache入れてんですよね?(>>614より)
ならやっぱしエラーログ見るのがはやいです。
ログファイルのパスはhttpd.confのErrorLog設定を見るか、
httpd -V を実行するとわかります。
いったんindex.shtmlをアクセスしてエラーを発生させてから
ログファイルの最後の行を見てください。
625むぎ茶:2000/12/25(月) 22:24
別コンソールで tail -f はお約束
626私はバカなのだろう:2000/12/26(火) 08:00
>>620さんありがとうございます。
現在オライリーの「初めてのPerl」で勉強中です。
他の人の質問より更に初心者なんですが、またお世話になるかと思いますが
よろしくお願いします。
627612:2000/12/26(火) 09:46
ログ、見ました。
すると、No Such File or Directory とありました。
ファイルが無い?あるぞ!何がいけないのだ〜!?
628( д):2000/12/26(火) 10:07
SHTMLの記述がおかしいんじゃない。
どこのファイルがないってエラーが出た?
629612:2000/12/26(火) 10:48
>>628さん
hoge.plが無いと言われてました。

ところが、正常に動作し始めました!
変更したのは、今までアドレスをブラウザで、
http://linux/cgi-bin/hoge/hoge.shtml
、としていたのですが、
http://192.168.1.1/cgi-bin/hoge/hoge.shtml
、とIPアドレスで入力した点です。
何故かはわかりませんが、正常動作しています。
でも、何故なのでしょうか?
腑に落ちない点がありますが、とにもかくにも動作しました。
( д)さん、617さん、622さん、624さん、むぎ茶さん、
本当にどうもありがとうございました!
630612:2000/12/26(火) 10:50
でも、何故動いたのか知りたいので、「教えてもいいよ」という方、教えて下さい・・・
631( д):2000/12/26(火) 11:37
httpd.confのServerName見てごらん。
632( д):2000/12/26(火) 11:46
でも何でDNがローカルで通るんだ…(鬱
633612:2000/12/26(火) 12:03
httpd.confのServerNameは、"linux.hoge.co.jp" ってなってます。
でも、これでサーバーを指定しようとすると、ダメでした。
CGIじゃなく、ただのhtmlファイルも表示できませんでした。
DNが通った訳は、NTServerのWINSサーバーに登録しているからだと思います。
634( д):2000/12/26(火) 13:15
なんていうか…
♪ア・ ヒャ・ ヒャヒャヒャ〜 ♪
  (゚∀゚ )  (゚∀゚ )  (゚∀゚ )  (゚∀゚ )
 メ(   )> メ(   )> メ(   )> メ(   )>
   |(     |(    |(    |(
  ( ゚∀゚)  ( ゚∀゚)  ( ゚∀゚)   ( ゚∀゚)
  <(   )メ <(   )メ <(   )メ <(   )メ
    )|    )|    )|    )|

こんな感じ
635612:2000/12/26(火) 13:33
>>634さん
その感じだと、かなりひどい構成って事ですか?
636( д):2000/12/26(火) 15:12
今度からはIPでサーバ指定してね。
WINSはNetBIOS名から
IPを引いてくるモノだったはずだから(壊れモード
637612:2000/12/26(火) 15:26
>>636さん
すいません。今度からそうします。DNSサーバーもあるので、名前で指定していましたが、
WINSの方に負けてしまっているのだろうか?
( д)さんには本当に御世話になりました。ありがとうございました!
638名無しさん:2000/12/26(火) 17:32
perlで <img src="hoge/0.gif"> という文字列を吐かせ、画像を表示させたいのですが、
表示されません。何が原因なのでしょう?
hogeディレクトリのパーミッションは755、
画像のパーミッションは644です。
Apacheは、"file permissions deny server execution" とエラーを吐きますが、
パーミッションは間違っていません。はたしてなにが原因なのでしょうか・・・?
639( д):2000/12/26(火) 17:39
ゴルァ…そのCGI自体のパーミッションが
かいてねえぞい>638
盲目的になったらイカン
640( д):2000/12/26(火) 17:40
>638
おーいCGI自体のパーミッションは?
641638:2000/12/26(火) 17:44
ややや、すいません!
hoge.plのパーミッションは 755 、
呼び出す、hoge.shtmlのパーミッションは 644 、
データを保存する、hoge.datのパーミッションは 666 です。
これで全部です。すいません。
642( д):2000/12/26(火) 18:41
とりあえず
>>612-629
のやり取りを参照してちょうだい。
SSIとCGIのディレクトリ構成に対するパス指定はあってる?
Telnetでテストしてエラーはない?
643名無しさん:2000/12/27(水) 01:31
ところでPerlで作ったコンパイル済みのCGIって
CGIを許可したサーバーで使えますか?
Cはよくコンパイルして設置ってきくけど、
Perlもコンパイルしちゃえばそれなりに速くなるような気がするのですが…
644名無しさん:2000/12/27(水) 05:05
どうやってコンパイルする気ですか。
645japu:2000/12/27(水) 05:08
perlccだろ。
646名無しさん:2000/12/27(水) 05:10
perlccって全然まともに使えなかったと思うが。
647638:2000/12/27(水) 08:59
>>642さん
telnetでテストしても、エラーがでません。
きちんと意図した値が表示されます。
648my appeal:2000/12/27(水) 09:38
#!/usr/bin/perl

listen(please@` please);
open yourself@` wide;
join(you@` me);
connect(us@` together)@` tell me
do something if distressed;
@dawn@` dance;
@evening@` sing;
read(books@` $poems@` stories) until peaceful;
study if able; write me if-you-please;
sort your feelings@` reset goals@` seek(friends@` family@` anyone);
do*not*die(like this)
if sin abounds;
keys(hidden)@` open(locks@` doors)@` tell secrets;
do not@` I-beg-you@` close them@` yet.
accept(yourself@` changes)@` bind(grief@`despair);
require truth@` goodness if-you-will@` each moment;
select(always)@` length(of-days)
649638:2000/12/27(水) 11:29
試しに画像のパーミッションを777にしてみました。すると、違うエラーが帰ってきました。
(8)Exec format error: exec of /home/httpd/cgi-bin/hoge/images/5.gif failed
Premature end of script headers: /home/httpd/cgi-bin/hoge/images/5.gif
以上、2つのエラーです。
650私って役立たず:2000/12/27(水) 12:11
>>649
確信がないのでsage

/home/httpd/cgi-bin/hoge/images/5.gif
を「実行」しようとしてエラーを食らっているような気がする。
(多分>>638では実行しようとして実行権がない言われた)

多分「表示」しようとしているんだよね
perlでgifを表示する関数を呼べばいいと思う。(そんなのあるのか)

# 役に立てずにスマン、perlはよくわからないのだ...
651638:2000/12/27(水) 13:28
>>650さん
私がやりたい処理はhoge.shtmlから、hoge.plを呼びだして、
<img src="hoge/images/0.gif">
、という文字列を返そうとしているのです。しかし、ブラウザには画像が表示されません。
ソースを見たら、きちんと上記の値があります。よって、ディレクトリか画像のパーミッションがまずいのではないか、
と思っています。
コマンドラインから、
perl hoge.pl
、と実行するときちんと上記の値を吐きます。
652むぎ茶:2000/12/27(水) 14:24
画像が表示されませんってなってるが壊れたアイコンかなんかになってるん?
そこで右クリックとかして画像を表示してもやっぱり壊れたままでしょ?
CGI関係なくて hoge/images/0.gif とかをサーバーがなぜかCGIだと
思ってるのが問題。
653638:2000/12/27(水) 14:47
>>麦茶さん
そのとおりです。ばってんマークの画像が出ています。右クリックして、
「画像を表示」としても、何も変わりません。
麦茶さんがおっしゃる通り、サーバーがgifファイルをCGIだと思っているのでしょうか?
という事は*.confが悪いのだろうか・・・?
654名無しさん:2000/12/27(水) 17:19
gifファイルの置く場所を
DocumentRoot側に変えてみたら?
655名無しさん@自動巡回:2000/12/27(水) 17:41
WEBを自動巡回して、「HTML」や「CGIの出力した」ページの
HTMLデータを取得するようなCGIを作りたいのですが、
どうしたらいいのか分かりません。
まずはWEB上を自動巡回させるにはどうしたらいいのでしょうか?
分かる方がいましたら教えて下さい。
656638:2000/12/27(水) 17:43
>>654さん
なるほど〜早速試してみます!
657638:2000/12/27(水) 17:54
結果報告です。できました!変更した内容は、
1.imagesディレクトリをDocumentRoot側に移動
2.hoge.pl内の出力する"<img src=" に続く文字列をDocumentRoot側で通るパスに変更
以上です。
画像ファイルはScriptAlias側に置いてはいけないのですね。苦しみましたが勉強になりました。
それとも、shtmlファイルをScriptAlias側に置いていたのがまずかったのだろうか・・・
疑問はまだ多々ありますが、動作確認取れました。
( д)さん、私って役立たずさん、むぎ茶さん、654さん、プログラム板の方、
みなさんどうもありがとうございました!
658638:2000/12/27(水) 17:58
蒸し返すようですいませんが、私の問題はhttpd.confの問題でしょうか?
659名無しさん:2000/12/27(水) 18:35
>>655
専用鯖ですか?
違うなら、やめて下さいね。
660名無しさん:2000/12/27(水) 18:50
ローカルでのテスト用に、Win2000上でIIS 5.0による環境を構築したのですが、
Perlにカレントディレクトリが正しく伝わりません。

例えば、
単純にカレントディレクトリのファイル一覧を表示するスクリプトを
/localhost/aaa/bbb/test.cgiとして実行しても、
/localhost/aaa/のファイル一覧が出てきてしまいます。

なにか、この問題を解決する手がかりになる情報はないでしょうか?
661名無しさん:2000/12/27(水) 18:58
>>660
> カレントディレクトリのファイル一覧を表示するスクリプト

がぁゃιぃとか?
662名無しさん@自動巡回:2000/12/27(水) 19:05
>>659
もちろん専用鯖です。
663名無しさん:2000/12/27(水) 19:23
>>660
当然パス指定はあっているんですよね?
664名無しさん:2000/12/27(水) 19:48
>>655
.crontabを使って一定間隔でSocketを叩けばいいのでは?
665664:2000/12/27(水) 19:50
スマン。655が言語書いてないからパス……。
666名無しさん@自動巡回:2000/12/27(水) 19:51
>>664
すみません、もう少し分かりやすく書いてくれませんか?
ちょっと難しいのでお願いします。
サンプルなど書いていただけると嬉しいです。
667名無しさん@自動巡回:2000/12/27(水) 19:52
>>664
すんません。書き忘れました。
Perlです。ごめんなさい。
668名無しさん:2000/12/27(水) 20:00
>>667
どこから説明すればいいのか。。。
LWPモジュールあたりを使って、URLを指定したページを
ひとつだけ取ってくるスクリプトは書けるの?
669名無しさん@自動巡回:2000/12/27(水) 20:04
書けないです。
どこから学べばいいのやら・・・。
670名無しさん:2000/12/27(水) 20:16
LWPは↓でどうぞ。。。

member.nifty.ne.jp/hippo2000/perltips/LWP.html
671名無しさん@自動巡回:2000/12/27(水) 20:19
>>668

>LWPモジュールあたりを使って、URLを指定したページを
>ひとつだけ取ってくるスクリプトは書けるの?

書けるようになったら、また来ます。


>>670(=↑?)
ありがとうございます。
勉強してきます。
672Dest:2000/12/27(水) 23:13
673660:2000/12/27(水) 23:49

>>660の質問をした者です。661さん663さん、レスありがとうございます。
-----------------------------------------------
>>661さん
以下がそのスクリプトです。

#!/usr/local/bin/perl
print "Content-type: text/plain\n\n";
opendir (IN@` ".");
while ($_ = readdir(IN)) {
print "$_\n";
}
closedir(IN);

-----------------------------------------------
>>663さん
Perlのパス指定でしょうか?
だったら、Perl自体は動くのであってます。
674名無しさん:2000/12/28(木) 00:14
>>673
スクリプトは大丈夫だと思う。
俺の環境ではちゃんと表示された。
675660:2000/12/28(木) 02:18
660です。あれから散々いじくったんですが、どうも不可避な問題の
ような気がしてきました。
これからおとなしくAnHTTPをダウンしてこようと思います。
661さん663さん674さん、どうもです。
676名無しさん:2000/12/28(木) 08:03
Destが壊れたようだ。

/****************************************

33 名前: Dest 投稿日: 2000/12/28(木) 07:03

アドバイスしろ。

34 名前: Dest 投稿日: 2000/12/28(木) 07:11

血尿が出た

35 名前: Dest 投稿日: 2000/12/28(木) 07:42

跳べ!優しいうんこ達よ!

36 名前: Dest 投稿日: 2000/12/28(木) 07:43

尻だ! 尻を狙え!!

37 名前: Dest 投稿日: 2000/12/28(木) 07:47

所詮俺も忘れ去られていく運命なのか?

38 名前: Dest 投稿日: 2000/12/28(木) 07:49

リカちゃんきらいですぅ

39 名前: Dest 投稿日: 2000/12/28(木) 07:52

オルブライト萌え〜

**********************************/
677Dest:2000/12/28(木) 08:40
(・∀・) なんやとこら
678Dest:2000/12/28(木) 08:56
質問に答えんかぃヴォケ

AnHFFDP を使ってるんすけど, AnHFFDP から GCl を終了させても
GCl 内 に記述した SSl を終了してくれないんですよね.

.htpasswd ファイルもダメで,どうにかならないものですか.
レジストリもいろいろやってみましたがダメでちた.

679Dest:2000/12/28(木) 09:30
俺の家だぼけぇ
http://tako.2ch.net/test/read.cgi?bbs=perl&key=977553926

ちゃんと挨拶しろよな。土足禁止
680Dest:2000/12/28(木) 11:23
俺の名前を使うなコラ
681名無しさん:2000/12/28(木) 14:38
>>676-679
偽Destの馬鹿もん無駄なコピペすんな。
お前に比べれば、同じヴァカでも場所をわきまえてるDestは10倍マシ。

>>Dest
CGIで吐くページ中のSSIが実行されないのは、現在のApacheの仕様ね。
ApacheのFAQに書いてあるから読んでみ。
原文 http://httpd.apache.org/docs/misc/FAQ.html#ssi-part-iii
日本語訳 http://japache.infoscience.co.jp/japanese_1_3/manual/misc/FAQ.html#ssi-part-iii

ANHTTPDもこれに合わせているんでしょう。
682Dest:2000/12/28(木) 15:32
読みました.はい.
仕様っつーわけですな
683名無しさん:2000/12/28(木) 18:37
>Dest
お前これだけこの板汚してるんだから、
答えてくれた皆様に詫びの言葉と感謝の気持ちくらい
述べたらどうだ。
684名無しさん:2000/12/28(木) 19:47
ところでDestって一人か?
685名無しさん:2000/12/28(木) 20:43
一人だろ
どう見ても
686名無しさん:2000/12/28(木) 20:47
いや、本当に本人がやってるのか? ってこと。
687名無しさん:2000/12/28(木) 20:54
このスレ、たてた奴偽者だろ。
http://tako.2ch.net/test/read.cgi?bbs=perl&key=977553926
狂ってるな
688名無しさん:2000/12/28(木) 22:43
>>686
わかっとるよ
>>687
ネタのつもりが失敗して煽られたから存在しない偽物のせいにした
どちらにしろ最初から気に入らないんだけど
689Dest:2000/12/28(木) 22:56
たてたのは俺,本物だ.
690名無しさん:2000/12/28(木) 23:06
>>689
そうか?それにしては変なタイトルだな。

>(・∀・) なんやとこら
これ、気に入ったぞ (w
691google なんですけどね:2000/12/28(木) 23:25
intel inside! なPCで繋ぐと
 google.com/intl/ja
とかってなりますよね。ja はわかるとして、なんで
CPU の種類までわかるんでしょか。
環境変数にそんなのありましたっけ?
Java とか ActiveX は当然オフにしてるから関係無いし。。
692名無しさん:2000/12/28(木) 23:34
>>691
全く関係ないが、JavaScriptではnavigatorクラスの中に
cpuClassとかいうプロパティがある。(x86とか)
693名無しさん:2000/12/28(木) 23:41

    Λ#Λ!   / ̄ ̄ ̄ ̄ ̄ ̄ ̄
__( ;・∀・)__< ネ、ネタかっ…!
|  〃( つ つ   |  \_______
|\ ⌒⌒⌒⌒⌒⌒\
|  \           \
\  |⌒⌒⌒⌒⌒⌒|
  \ |______| スコシモラシチャッタ・・・
694名無しさん:2000/12/29(金) 08:49
ネタでしょう。
695691:2000/12/29(金) 10:13
すんません、マジっす
ずっと前から疑問で
696名無しさん:2000/12/29(金) 11:42
ほんっとーにマジ?「略語」+「intl」で調べてみれ。
697691:2000/12/29(金) 21:24
ほんっとーにマジ、、というかハジというか

ありがとうございました。。。
698hoge:2000/12/31(日) 11:33
perlは最高ッス!!
699名無しさん:2001/01/01(月) 06:09
16進法の数値を10進法にするには「hex()」の関数を使えば
10進法に置換してくれますが、その逆である、
10進法の数値をを16進法に置換してくれる関数ってありますか?

あるいは、置換するためのプログラムの例などがあれば教えてください。
700名無しさん:2001/01/01(月) 06:39
>>699
$hexadecimal = sprintf("%1x"@` $decimal);
701699:2001/01/01(月) 06:58
>700
レスどうもです。

まだperl初心者なんでちょっとわからないんですが、
たとえば「20」という数値を16進法で表示したい場合、
どうすれば良いでしょう?
702700:2001/01/01(月) 08:01
>>701
英語大丈夫?

--
#!/usr/bin/perl

$decimal = '20';
$hexadecimal = sprintf("%1x"@` $decimal);

print "Content-type: text/html\n\n";
print $hexadecimal;
exit;
703699:2001/01/01(月) 09:44
                 _                         _
      へ.         /" "ヽ                      /" "ヽ  @`へ
   / /         ヽ@`_@`/    @`-ヽ           /ー.@`   ヽ@`_@`/    \\
  / /                  ヽ ヽ           /  /            ヽ ヽ
 / /                    ヽ `―――――‐'  /             ヽ ヽ
 l l                     ヽ  ――――‐;  /                l l
||                      ヽ ヽ    / /                | |
||                        ヽ ヽ  @`/ /                    | |
 | |                        ヽ ヽ / /                   | |
 ヽ ヽ                        ヽ ' @`/                  / /
  ヽ.ヽ                        ヽ /                 ノ ノ
   \\                       `'                 //
     `"                                         `'
あーーーーーーーーーーーー
ひゃひゃひゃひゃひゃひゃひゃひゃひゃひゃひゃひゃひゃひゃ
ひゃひゃひゃごめんひゃひゃひゃひゃみんなひゃひゃひゃひゃひゃひゃひゃひゃ
ひゃ思いひゃひゃひゃついひゃひゃひゃと思うけどひゃ
ひゃひゃやっひゃーーーーーーーーひゃひゃひゃひゃ
704699:2001/01/01(月) 14:44
ありがとっす
705名無しさん:2001/01/02(火) 16:31
すみません。これがどうしても分りません。
$in2{$zip} = ['red'@` 'blue'];
$val = $in2{$zip}->[1];
print $val;
以上を実行して本当は画面にただ"blue"と表示させたいのに、
なぜか"HASH(0x80cdcac)blue"となってしまいます。
なんででしょうか?
706名無しさん:2001/01/02(火) 18:44
ちゃんと"blue"となるが?
707名無しさん:2001/01/02(火) 21:33
ホントに?
708名無しさん:2001/01/02(火) 22:31
ホント。
709名無しさん:2001/01/02(火) 23:35
うつだ。。。
710名無しさん:2001/01/03(水) 12:59
検索系のCGIでInternal Server Errorが出るので、
ActivePerl522で構文チェックすると、下記のエラーがでます。
’Unrecognized character \272 at01 search.cgi line7’
のメッセージがでますが解読できなく困っています。
素人の質問で恐縮ですがご回答よろしお願いします。
711名無しさん:2001/01/03(水) 19:23
>>710
辞書引け。
712私はバカなのだろう:2001/01/04(木) 15:55
>>620 >>626 の「私はバカなのだろう 」です。
「初めてのPerl」が進まないです…今26ページ。ページをめくると

-------------------------------------------------------------------------
else {
open MAIL@`"|mail YOUR_ADDRESS_HERE";
print MAIL "bad news: $somename guessed $someguess\n";
close MAIL;
}

説明文
「最初の文はopenで、第2引数の先頭にはパイプを表す文字(|)が置かれています」
-------------------------------------------------------------------------

とあるのですが…??パイプってPerl用語?それとも深く考えずに【繋げる】という
意味で使っているのでしょうか?
他の本を見ると「pipe」という関数があるんですが、それとは関係無しなんでしょうか

呆れてます?でも本当に分かりません。うひゃぁ〜
713名無しさん:2001/01/04(木) 16:36
>>712
別にその文は | = つなげるという意味で使っているワケじゃないんじゃない?

「最初の文はopenで、
第2引数の先頭には |(パイプを表す文字)が置かれています」
のほうがいいのかな。
714名無しさん:2001/01/04(木) 16:52
>>712
それはべつに呆れないよ。パイプというのはUNIX用語。
知らないからって、別に思考能力が無いわけじゃないから。
googleとかで「パイプ UNIX」とかで検索してみれ。

しかし、初めてのPerlでもUNIXは知らなきゃいけないのか。
715私はバカなのだろう:2001/01/04(木) 16:57
(゚д゚) あ… (TдT)
「書き込み用コマンド(ここではmailだと思うのですが)をオープンするのに必要なのだ〜!」
ってな意味にとって、

MAIL をオープンし送信先アドレス(YOUR_ADDRESS_HERE)を入れ、
次の行で  "bad news:変数〜" を書き込み、close で送信。

これでいいのでしょうか。
716名無しさん:2001/01/04(木) 18:18
>>715
それでいいのさ。
717私はバカなのだろう:2001/01/04(木) 18:30
>>713-714 >>715 さん
ありがとうございました。また頑張ります。
718名無しさん:2001/01/04(木) 21:47
コマンドライン引数を解析するのにどうやってますか。
モジュールがあったはずなんだけど名前忘れた・・・。
719名無しさん:2001/01/04(木) 22:17
use Getopt::Std;
または
use Getopt::Long;
詳しくはマニュアルを読め
perldoc Getopt::Std
perldoc Getopt::Long
720名無しさん:2001/01/04(木) 23:52
>>719

アリガト。
721名無しさん:2001/01/05(金) 09:52
ディレクトリを参照したときに
index.cgiがあればそれを、
index.htmlがあればそれを
表示&実行させたいんですが
httpd.conf??のどのあたりを
変えればよいです?
3回ぐらい httpd.conf 壊しちゃいました;;
722japu:2001/01/05(金) 10:18
DirectoryIndex
でも、ご自分では変更されないことをおすすめします。
723jaqu:2001/01/05(金) 10:48
>721
.htaccessで設定すれば?
724名無しさん:2001/01/05(金) 11:25
はじめまして。よろしくお願いします。
別サーバーにあるログファイルを読みこむにはどうやったらいいのでしょうか?
725名無しさん:2001/01/05(金) 12:23
http://www.tsukaeru.net/default_ie.html
2〜3日前からcgiが動かなくなりました(T-T)
726名無しさん:2001/01/05(金) 12:25
>>724
Socket叩くとか。
727名無しさん:2001/01/05(金) 12:27
>725
自分でスクリプト書き換えてからそうなったのか?
それなら元に戻せ。
それ以外なら業者に聞け。
728721:2001/01/05(金) 13:59
>japuさん、723さん
ありがとうございました
どこが悪かったのかわからないのですが(汗
できました
http.confが壊れてたのかもしれません。
.htaccessは試して見なかったです。
729名無しさん:2001/01/05(金) 20:34
所謂、パッチゃーと呼ばれるものを作りたいんですが、上手くいきません。
例えば、
test.exe
00000FD0: 45 78

としたいとき、

open ( EXE@` "+<text.exe" ) or die "cannot open file";
$addr = hex( "00000FD0" );
seek( EXE@` $addr@` 0 );
print EXE "78";
では上手く書き換えられないです。
分かる人が居たら、これをどのようにすれば良いのか教えてください。
730マジレス:2001/01/05(金) 20:48
>728
/your/path/apache/bin/apachectl configtest
731729:2001/01/05(金) 20:49
訂正:
seek( EXE@` $addr@` 0 );
$wbit = pack ('H*'@`"78");
print EXE "$wbit";
732名無しさん:2001/01/05(金) 22:42
窓を使っているなら、もしかしたらbinmodeがないからかも。
733名無しさん:2001/01/06(土) 09:57
socketを使って
http://search.yahoo.co.jp/bin/search?p=%A4%A6%A4%EA%A4%CA%A4%EA
の位置にあるファイルはどうやって読み取るのでしょうか?
734名無しさん:2001/01/06(土) 10:03
LWPの方が簡単だよ。
735733:2001/01/06(土) 10:12
LWPってどういうものなんでしょうか?
初心者な者で…
736734:2001/01/06(土) 10:33
とりあえず、こんなコードを実行してみたらどう?

#!/usr/bin/perl -w
use LWP::Simple;
open(F@`">urinari.html") or die "Can't open!"; #出力先
print F get("http://search.yahoo.co.jp/bin/search?p=%A4%A6%A4%EA%A4%CA%A4%EA"); #欲しいURL
close F;


#俺はSocket使う方が好きだな。それにこの場合WWW::Searchのほうがいいかも.....
737733:2001/01/06(土) 10:48
をを!ご回答ありがとうございます。早速試してみます。
738lallywall:2001/01/06(土) 13:59
Perl6はいつ頃でるのでしょうか?
それとProgramming Perl 3edが去年出ましたが何か新しいことが
載っているのでしょうか?
(Perl6が出たらそれも古い版になるのかな?)
739名無しさん:2001/01/06(土) 16:40
よくkyviewなんかでファイルが自動作成されますよね?あれはどうやるのでしょうか?
740名無しさん:2001/01/06(土) 17:50
今日から1府12省庁体制が始まるから
カール板はデフォルトで
http://www.mext.go.jp/
に飛ばさないといけないのか。。。ぼそっ
741名無しさん:2001/01/07(日) 11:04
>>733
Socket使うならこれで良いと思うよ。(動作未確認)

$kusi = 'test.com:8080';
$FORM{'url'} = 'hosii.com'
($proxy@`$port) = split(/:/@`$kusi);
if ($proxy eq "") {&error("串がセットされていません。");}
$FORM{'url'} =~ s/http:\/\///g;
if ($FORM{'url'} eq "") {&error("何も入力されてません。君はなに?");}
use Socket;
$port = getservbyname('http'@`'tcp');

$iaddr = inet_aton("$FORM{'url'}")
or die &error("$FORM{'url'}は存在しないホストです。");

$sock_addr = pack_sockaddr_in($port@`$iaddr);

socket(SOCKET@`PF_INET@`SOCK_STREAM@`0) #ソケット生成
or die &error("ソケットを生成できません。");

connect(SOCKET@`$sock_addr)
or die &error("$FORM{'url'}のポート$portに接続できません。");

select(SOCKET); $|=1; select(STDOUT);

print SOCKET "POST $FORM{'url'} HTTP/1.0\r\n";
print SOCKET "User-Agent: httplink/1.00 (HTTP client test)\r\n";
print SOCKET "\r\n";

while (<SOCKET>) {
m/^\r\n$/ and last;
}

while (<SOCKET>) {
print $_; #表示
}
742名無しさん:2001/01/08(月) 03:53
RFC全文読んだ方、何日で読みきりましたか?
743名無しさん:2001/01/08(月) 05:31
>>742
現在のインドの人口を10億人として、10秒に1回のはやさで握手する。
すべてのインド人と握手し終わるのに何年かかるか。
という問題に似てるねえ。
おれの英語力では永久に無理っぽい。増加速度が消化速度より大。
744名無しさん:2001/01/08(月) 15:41
宣伝スレ&駄質問スレにsageられてウザイので
age age age age
745※使用上の注意 :2001/01/08(月) 23:50
この板は744のために生まれ、744のために運営されています
746モンド:2001/01/09(火) 00:35
質問です。DBMって何KBまでいけるんでしょうか?
入門書には1KBまでって書いてあったんですが。。
747名無しさん:2001/01/09(火) 00:54
>744、745
しょうもないことかくな!
748名無しさん:2001/01/09(火) 01:05
>>746
ひとつのデータが1KBという制限だったとおもう。
SDBMが4KBだったかな。
749名無しさん:2001/01/09(火) 01:48
***が含まれていたら、プリントしない。。。
ってどう書くの?
750名無しさん:2001/01/09(火) 02:08
>>749
場合にもよるけど普通は、
***が含まれてなければ、プリントする。
てな感じのロジックにすればよいはず。
751名無しさん:2001/01/09(火) 02:19
print unless /ほげ/ for <>;
752モンド:2001/01/09(火) 02:23
>748
SDBMって何ですか??
初歩すぎる質問ですみません。。
753名無しさん:2001/01/09(火) 03:41
今オリジナルのチャット作ってるんですが、

ttp://www.mahoroba.ne.jp/~yuugeki/

の、decoder.plってマルチライブラリ使おうと思ってるんですけど、
体感的にも感じれるほど処理時間が変わってしまうライブラリって使うべきではありませんかね?

自動リンクとタグ処理、クッキー関係を使う程度なんですが。
754名無しさん:2001/01/09(火) 03:43
あとね、ロックの質問なんだけど、
ファイルをロックする前に別のダミーファイルにロックをかける方法ってどうなんでしょ?
やっぱりヘタレ処理ですか?
755753:2001/01/09(火) 03:48
ttp://www3.mahoroba.ne.jp/~yuugeki/cgi_lab/index.html

上、間違ってます。
あと、アクセスログ採られてるのであえてリンクさせてません。
756名無しさん:2001/01/09(火) 05:05
>>753
ライブラリ読み込みはトンでもなく遅いよ。
自動リンクとタグ処理程度なら数行では?
あと、軽くしたいならクッキーはJavaScriptでやったほうがいい。
757名無しさん:2001/01/09(火) 06:11
>>756
どもです。

ところで、ぶっちゃげた話、jcode.plってどうなんでしょ?
クエリ送信時のIEのバグをフォローするだけなんでしょ?
完全にSJISで構成すれば必要性無しってことですか〜?
それともやっぱりOS、マシンで不都合がでてくるものなのでしょうか?
758757:2001/01/09(火) 06:11
age
759名無しさん:2001/01/09(火) 06:48
上のPerlメモのロック方法なんだけど、とりあえずルーチンをコピペして
ロックが必要なときに

# ロックする
$lfh = my_flock() or die 'error!';

open(UNCHI@`"unchi.txt");
@Unchi = <UNCHI>;
close(UNCHI);

# アンロックする
my_funlock($lfh);

でいいの?
どうも動かないんだけど・・・
760名無しさん:2001/01/09(火) 15:44
>>759
lockdirと、ダミーのlockfileを作っておく必要がある。

Perlメモから引用
| スクリプトの注意点としては,あらかじめロック用のディレクトリとファイルを
| 用意しておくこと,ディレクトリに書き込み属性をつけておくこと,
761名無しさん:2001/01/09(火) 16:30
悩んでいる事があるので、お聞きしたいのですが、
自分のテスト用にLinuxでwebサーバーを立てているのですが、
拡張子が.htmlや.jpgのファイルをScriptAliasのディレクトリに置いた場合、
クライアントPCから見ることができません。
パーミッションがありません、というエラーを吐かれてしまいます。
仕方がないので、DocumentRootの下に、それらのファイルを設置すると動きます。
よって今は、
.html、.jpg等のファイルは "/home/httpd/html" の下に、
.CGI、.shtml、.plといったファイルは "/home/httpd/cgi-bin" の下に置いています。
"/home/httpd/cgi-bin" の下でも.html等のファイルをクライアントから見るように設定するには
どうすればよろしいのでしょうか?
御存知の方、ご教授よろしくお願いします。
762むぎ茶:2001/01/09(火) 16:46
なぜそういうことをしたいの?
ScriptAlias ってのはそこ以下へのアクセスは全部 Script だよって
指示だから Webサーバーが指示された .html や .jpg をScriptとして
起動しようとして失敗して(実行フラグがたってないので)
パーミッションがありませんってエラーになってる
/home/httpd/html の下に置きたくない理由がわかると
他の解決策を提示できるかも。
763761:2001/01/09(火) 17:08
>>むぎ茶さん
レス、どうもありがとうございます。
ApacheはScriptAliasの下に設置したファイルを全てScriptとして見るんですか!
知らなかったです。その教えだけでも、私にはとてもありがたいです。
私は最近Perlを始めた者でして、1つの簡単なスクリプトを多数作っている毎日であります。
そうやってたくさんファイルを作成していると、ファイルを別々のディレクトリに置いてしまうと、
以前作ったファイルがどこにあるのか、把握が大変なのです。
私が勉強の為に購入した本では、htmlファイルとcgiファイルを同じディレクトリに置くよう、書かれていましたので、
私がApacheの設定を間違えて、このような事態に陥っているのでは?と思い質問させて頂きました。
できれば、その本のようにhtmlファイルとcgiファイルを同じディレクトリに置きたいのですが、
良い方法はありませんでしょうか?
ScriptAliasでは、できないのですね。非常に勉強になりました。
764むぎ茶:2001/01/09(火) 17:30
ディレクトリ単位の指定ではなく ファイルの拡張子に対する指定を
行うべし

PS
むぎ茶に さん付けんな ごるぁ
呼び捨てろ
765名無しさん:2001/01/09(火) 17:32
>>764
さすがむぎ茶さん、男だねぇ〜
766( д):2001/01/09(火) 17:38
>765
ネタ?言うdのに〜
767761:2001/01/09(火) 17:54
>>(呼び捨ては、はばかりますので)むぎ茶氏
ありがとうございます。ファイルの拡張子に対する指定を行えばできるのですね。
具体的にはどうやってよいか、まだわかりませんが、webを検索して情報を少しづつ集めてみます。
本当にありがとうございました!
768名無しさん:2001/01/09(火) 18:24
>>767
>webを検索して情報を少しづつ集めてみます。
心構えは宜しい。
769名無しさん:2001/01/10(水) 01:27
すいません。ちょっと質問です。
外部から指定のURLのHTMLソースを読み込んでcgiに書き込む事は可能でしょうか?
770japu:2001/01/10(水) 02:07
LWP::Simple とか、LWP::UserAgent 使おう。
(Socketでガリガリ書いても良いけど。)
http://search.cpan.org/

> cgiに書き込む
ってのがとっても意味不明だけど。
771名無しさん:2001/01/10(水) 03:37
>>760
どもです。
772名無しさん:2001/01/10(水) 07:51
検索後、$1や$2で後方参照出来ますが、
この、$番号 が幾つまで行っているのか
調べる方法はありますか?
配列における$#arrayみたいに…。
773名無しさん:2001/01/10(水) 08:52
初心者で、どのスレで聞いていいかもわからないのですが、
CGI設置した時、datファイルのみがどうしても開けません・・・
これは何が原因なのでしょうか??
774名無しさん:2001/01/10(水) 08:53
どう開けないの?
666にしてる?
775名無しさん:2001/01/10(水) 09:01
>>774
即レス感謝!
666にしています・・・
cgiファイルなどは開けるのですが
datのみオープンエラーになってしまいます・・
776名無しさん:2001/01/10(水) 09:05
だから、どう開けないの?
http://hoge.com/hoge.dat とアクセスすると開けないとか?
777名無しさん:2001/01/10(水) 09:10
掲示板にアクセスして、エディットモードで編集作業を
しようとするとopen error http://-------------
と画面に表示されてしまいます。

またbbs.datファイルもダメで、掲示板画面上に
open error http://----------------/bbs.dat
とでてしまいます。

上のように直接datファイルを呼び込むと
真っ白な画面になります
778名無しさん:2001/01/10(水) 09:21
>>777
もしかして
open DATA@` 'http://----------------/bbs.dat';
とかやってるんじゃないだろうな???
779名無しさん:2001/01/10(水) 09:23
datファイルのパスが違うんじゃないの?
因みに、誰のどのスクリプト?
780779:2001/01/10(水) 09:24
>>778
うん、多分それ。
781名無しさん:2001/01/10(水) 09:26
bbs.datが別ディレクトリにあるなら、
ディレクトリを777にしないといけないかも。
782datが開けない者:2001/01/10(水) 09:35
スクリプトの説明通りにパーミッションは設定してあるのですが・・
ディレクトリは全部一緒です。設定以下の通りですが
これが根本的に違ってるのでしょうか???

# ▼▼▼▼▼▼▼▼各種設定▼▼▼▼▼▼▼▼ #

# ---------------------- FILE PASS ---------------------- #
$cgiurl = 'http://www.----------/cgi-bin/nb/nbs.cgi'; # nbs.cgiのパス
$editurl = 'http://www.----------/cgi-bin/nb/nbe.cgi'; # nbe.cgiのパス
$nardata = 'http://www.----------/cgi-bin/nb/nar.dat'; # nar.datのパス
$bbsdata = 'http://www.----------/cgi-bin/nb/bbs.dat'; # bbs.datのパス
$usrdata = 'http://www.----------/cgi-bin/nb/usr.dat'; # usr.datのパス
783名無しさん:2001/01/10(水) 09:56
$nardata = 'nar.dat';
$bbsdata = 'bbs.dat';
$usrdata = 'usr.dat';

で良いかも。
784769:2001/01/10(水) 10:00
>>770 japu氏
助言、どうもありがとうございます。
早速頑張ってみます。
785名無しさん:2001/01/10(水) 10:01
さぽ掲の答えを待ちなよ・・・。
http://www.fayreal.com/cgi-bin/missinglink/support/support.cgi
786名無しさん:2001/01/10(水) 10:37
マルチか。
鬱氏。。。
787名無しさん:2001/01/10(水) 10:40
例えばHPのAタグを正規表現を使って
@html=$html=~/<a href=(.*?)>(.*?)<\/a>/gi;
と書いてhref=部の後ろとコメント部を取得してるんですが、
これをhref=部の配列とコメント部の配列の2つに分けて取得する方法って
ありますか??その時に正しく対になってないと困るし、ハッシュを使ったほうが
いいのでしょうか?その方法って%html=@htmlでいいのかなぁ?
788むぎ茶:2001/01/10(水) 11:55
my($link@` $comment) = ($html =~ /snip/);
$linkHash{$link} = $comment;
789名無しさん:2001/01/10(水) 12:46
クラスBと、それから派生するクラスDがあり、クラスBには
foo()というメソッドがあり、クラスDでそれをオーバーライド
するようなコードは、Perlではどのように書くのですか?

ちなみに、Rubyではこう。
class B
def foo
puts "B::foo"
end
end

class D < B
def foo
puts "D::foo"
end
end

f = D.new()
790むぎ茶:2001/01/10(水) 13:05
package B;
sub foo{ print "B::foo"; }
package D;
@ISA = qw(B);
sub foo{ print "D::foo"; }

Perl5はOOPもどきだから単に自パッケージ内を探してなければ
@ISAを順に探すだけ。

ちなみに親クラスのメソッドを呼ぶには
package D;
sub foo{
my($self) = @_;
$self->SUPER::foo();
}
791名無しさん:2001/01/10(水) 13:11
>>790
むぎ茶さん、すごいです。どうもありがとうございます。
でも、予想通り、見ても良く分かりませんね。私はPerl4
のころはちょっと使ってたんですけどね。

RubyのプログラムをPerlに書き換えなきゃならないんで
すが、道のりはけわしそうです。憂鬱・・・。
792名無しさん:2001/01/10(水) 13:14
>>791
あ、前の方をよく読んでなくて、敬称をつけちゃいました。
すみません>むぎ茶
793761:2001/01/10(水) 13:25
結果報告です。
httpd.confの
ScriptAliasをコメントアウトして、access.confに
<Directory "/home/httpd/cgi-bin">ディレクティブを作成したら、
htmlとcgiを同じディレクトリにしても動くようになりました。
このやり方で間違いないでしょうか?
794むぎ茶:2001/01/10(水) 14:20
動けばそれでよし

それだけ自分で調べられるなら、もしその設定がおかしいとしても
すぐ対処できるから問題なし。

うちで仕事しない?:D
795名無しさん:2001/01/10(水) 14:26
perlで多次元配列初期化をいっぺんにする方法
って ありますか?
c言語で例えると 以下(3次元配列)見たいな事。

int smp[2][3][4]={
{1@`2@`3@`4}@`
{5@`6@`7@`8}@`
{9@`10@`11@`12}@`

{13@`14@`15@`16}@`
{17@`18@`19@`20}@`
{21@`22@`23@`24}
};

配列の配列は 一応 調べてわかったんですけど……
@smp = (
[1@`2@`3@`4]@`
[5@`6@`7@`8]@`
[9@`10@`11@`12]@`
[13@`14@`15@`16]@`
[17@`18@`19@`20]@`
[21@`22@`23@`24]@`
);

perlで3次元配列 を 静的に簡単に作成する方法ってあるんですかね?
ご教授願いたいです。
796むぎ茶:2001/01/10(水) 14:35
@smp = (
[ [1@`2@`3]@` [4@`5@`6]@` [7@`8@`9]@` ]@`
[ [9@`8@`7]@` [6@`5@`4]@` [3@`2@`1]@` ]@`
);
797名無しさん:2001/01/10(水) 14:39
NTserver+IIS4.0で動くグラフィックアクセスカウンターのソースが
載っているHP知りませんか?
色々試してみたんですけど動きません。
798761:2001/01/10(水) 14:53
>>むぎ茶氏
どうもありがとうございます。そう言っていただけると、気の持ちようが違います。
私も早くむぎ茶氏のように、このスレッドでレスが付けられる力を身につけるよう、精進します。
799むぎ茶:2001/01/10(水) 14:56
氏 もつけんな ゴルァ
800:2001/01/10(水) 15:00
IP scan mode
801名無しさん:2001/01/10(水) 15:21
ところで素朴な疑問なのですがよろしいでしょうか?
みなさん、CGIをPerlで組むときにヒアドキュメントを用いて
処理とHTMLを混在させて書いていらっしゃるのでしょうか?
自分としてはPerlスクリプトとHTMLを切り分けた方が保守しやすくて
いいと思うのですが、どうでしょうか?
いい方法をお持ちの方がいらっしゃれば教えて下さい。
802795:2001/01/10(水) 16:10
>>むぎ茶

なるほど、なるほど。
勉強なりました、感謝です。
803名無しさん:2001/01/10(水) 16:25
>801
Perlだけでは綺麗には行かない。保守のことを考えるなら
アプリケーションサーバーの導入を検討したほうがいいよ。
804japu:2001/01/10(水) 16:45
HTML::Template 使うとか...
805名無しさん:2001/01/10(水) 16:52
Perlで、使ったメモリ量を調べる方法ってありますか?
806名無しさん:2001/01/10(水) 17:14
perlでCtrl+D、Ctrl+Cを送っても死なないと言うなんともタフな
コンソールプログラムをつくってしまったのですが、
どうにかして途中で終了させる方法はないでしょうか。
プログラム自体はforでループ回してます。

因みに今はCtrl+Zでストップさせ殺してます。
807806:2001/01/10(水) 17:20
優しくCtrl+C打ったら解決しました。
アホUNIXめ。
808むぎ茶:2001/01/10(水) 17:22
おまえがアホ。いやほんとに。
809川平:2001/01/10(水) 17:24
戯彭芦
810( д):2001/01/10(水) 17:28
ひぃOperaで打ったら化けた。
>戯彭芦
オコラナーイ ネ
811名無しさん:2001/01/10(水) 18:42
812名無しさん:2001/01/11(木) 12:43
数値を50単位で切り上げしたいんですけど
なんかスキリーしたロジックないですか。
初心者なんで、こんなんできたんですけど。

$wk = int($x / 100) * 100;
if(($x - $wk) <= 50){
$y = $wk + 50;
}else{
$y = $wk + 100;
}
813名無しさん:2001/01/11(木) 13:07
>>812
切り捨てに比べると、切り上げのロジックは面倒すね。
こんなんどうですか。
$y = (int($x / 50) + ($x % 50 != 0)) * 50;

または、POSIXモジュールを使ってもよい、つーことなら
use POSIX;
$y = ceil($x / 50) * 50;
814812:2001/01/11(木) 13:58
おおお。値を代入していかないとわかんなかった。
文理系(地元高校にあった中途半端な学科)だったとはいえ頭悪いなー俺。
ありがとうございます〜>>813
815むぎ茶:2001/01/11(木) 14:18
そのロジックだと
x = 100 のとき y = 150
になんない?
$y = (int(($x-1)/50)+1)*50
とかでいいんじゃない?
816にとり:2001/01/11(木) 16:09
初心者perl勉強中のにとりって言います。
あるCGIで「srand」って関数がありまして、なんじゃ?と思って
調べてみても[randが使用する乱数の種を設定する」って書かれてる
ですが、さっぱり意味がわかりません。「srand」って簡単に言うと
なんなんでしょう?教えてください。
817名無しさん:2001/01/11(木) 16:21
>>にわとりさん
とほほのperl入門より抜粋です。
randの種を与える。 randは乱数を返すとは言っているが、プログラム起動後は常に同じパターンの値を返す。
このパターンの始まりを変更するために、プログラムの先頭でsrandを呼び出して無意味な値を指定してやる。

参考になりましたでしょうか?
818名無しさん:2001/01/11(木) 17:20
入力チェックにおいて半角全角を取り除くにはどうすればいいのでしょうか?
819名無しさん:2001/01/11(木) 17:21
すみません。半角全角とはスペースのことです
820[email protected](japu):2001/01/11(木) 17:27
Perlのバージョンが5.004以降であれば最初のrand呼び出し時に自動的にsrandが実行されるので、不要と言えば不要。

ちなみに、切り上げはこんなのどうでしょ: int($x/50 + !!($x%50))*50
821[email protected](japu):2001/01/11(木) 17:35
#! /usr/bin/perl

$_ = "うぐぅ uguu あははー ahaha すー";

# EUC-JP 限定
# 必要なら、
# require "jcode.pl";
# $_ = jcode::euc($_);
# してくれ。

tr/ //d;
s{\G([\x00-\x7f] | # ASCII or JIS X0201 Roman
\x8e[\xa0-\xdf] | # JIS X 0201 Katakana
\x8f[\xa1-\xfe]{2} | # JIS X 0212
[\xa1-\xfe]{2}) # JIS X 0208
}{($1 eq "\xA1\xA1")? "": $1}egx;

print "$_\n";

__END__
822名無しさん:2001/01/11(木) 18:22
>821
ありがとうございます。
なんだか難しいものを頂いて消化不良を起こしそうですが、
がんばります。
823名無しさん:2001/01/11(木) 23:48
$d_name ="<a href=\"mailto:$e_mail\">$d_name</a> " if $e_mail;
$d_url ="<br>  [ <b><A HREF=\"$d_url\">$d_url</a></b> ]" if $d_url ;
$res=0;
print<<HTML;
<hr size=1>◆<b><font color="$COLOR"> $d_title </font></b><blockquote>
<tt>$d_comment</tt></blockquote><tt><font size="2">(No.$d_count $d_date)</font>名前:$d_name$d_url</tt><blockquote>
HTML
}else{
print "<tt><hr size=1>[$d_date : $d_count ] $d_name<br>$d_comment</tt>";

これを下のように変えるとCGIがエラーで動かなくなります
$d_name ="<a href=\"mailto:$e_mail\">$d_name</a> " if $e_mail;
$d_url ="[ <b><A HREF=\"$d_url\">$d_url</a></b> ]" if $d_url ;
$res=0;
print<<HTML;
<hr size=1>◆<b><font size=+1 color="$COLOR"> $d_title </font></b><br>
$d_count 名前: <font color="forestgreen"><b>$d_name</d></font>$d_url 投稿日:$d_date<br>
<blockquote>
$d_comment
</blockquote>
HTML
}else{
print "<hr size=1>$d_count 名前: <font color="forestgreen"><b>$d_name</b></font> 投稿日:$d_date<br>$d_comment";

一応部分消したりしたりしていろいろ試してみましたが動きません
どなたか原因が分かる方お願いします。
824japu([email protected]):2001/01/12(金) 00:04
> print "<hr size=1>$d_count 名前: <font color="forestgreen"><b>$d_name</b></font> 投稿日:$d_date<br>$d_comment";
これを、
print "<hr size=1>$d_count 名前: <font color=\"forestgreen\"><b>$d_name</b></font> 投稿日:$d_date<br>$d_comment";
または
print qq[<hr size=1>$d_count 名前: <font color="forestgreen"><b>$d_name</b></font> 投稿日:$d_date<br>$d_comment];
にすれば良いのでは?

とりあえず、先頭で
use CGI::Carp qw[fatalsToBrowser];
としておくと、500 Internal Error じゃなくて、分かりやすい説明がでるぞ。
825823:2001/01/12(金) 00:16
>>824
おおっ、動きました。ありがとうございます。
こういうのは#F5F5F5みたいにコードで指定した方がいいんでしょうか?
あとすみませんが
>use CGI::Carp qw[fatalsToBrowser];
は#!/usr/bin/perlの上に書けばいいですかね?
826japu([email protected]):2001/01/12(金) 00:31
いや、その直下に書いてください。
先頭行はOSにperlで実行させることを教えるために必要なので。

色は、HTMLで規定される色以外は#xxxxxxの形式で指定するのが望ましい。
でも、出来ればスタイルシートでね。
827全然部外者:2001/01/12(金) 02:06
>>826
>でも、出来ればスタイルシートでね。
どゆこと?BODYだと不都合あるの?
828japu([email protected]):2001/01/12(金) 03:23
HTMLの理念から言えば、本文に視覚的な要素を記述することは好ましくないから。だから、可能であればそれらの要素はスタイルシートとして別に記述するのが望ましい。

でも、これはあくまでも理想の話。今は過渡期にあるから、難しいのは事実。
829名無しさん:2001/01/12(金) 08:22
テキストファイル(DBの代わり)に重要なデータを保存するときは、
どんなモジュール使ってます?自前?それ下さい!(藁

定石としてはどんなものを使うのでしょうか?
830名無しさん:2001/01/12(金) 08:25
829です。
DB_Fileで決定なんですか?
831名無しさん:2001/01/12(金) 08:33
簡単なSQLが通じちゃったりするモジュールなんてあったりするの
かな、うひ
832にとり:2001/01/12(金) 10:19
>817さん&japuさんアドバイスありがとうございました。
レスおくれてすみません。
説明よくわかりました。
ありがとうございました。
833名無しさん:2001/01/12(金) 10:59
初心者の質問です。どうかよろしくお願いします。
exitなんですが、いろいろなサンプルコードを見ていると
exit(0)やexit(1)とか括弧に囲まれた数字が出てくるんですけど
これって何の意味なんですか?
らくだ本にはステータスコードとして返す。って書いてあるんですけど
ちょっと意味がわからないので、教えてください。
834名無しさん:2001/01/12(金) 11:19
>>833
呼び出し元のプロセスに値が返るのかな?
その辺はよく判りませんけど、
CGIであれば exit; で良いと思います。
835名無しさん:2001/01/12(金) 15:46
HTMLでボタンを作成し、そのボタンを押されたら、"hoge.cgi"を実行するようにしています。
ボタンを押されたら、"hoge.cgi"を実行してほしいのですが、何故か、ダウンロードを始めようとします。
一体どうしてなのでしょう?御存知の方、教えて下さい。
836ffffffffff:2001/01/12(金) 15:57
>>835
.htaccessで設定
837835:2001/01/12(金) 16:18
>>835さん
現在の設定で、動くはずなのですが、動かないんですよ。
Apacheで.htaccessの使用を許可する項目ってないですか?
現在の設定は、
AddType application/x-httpd-cgi .cgi
AddType application/x-httpd-cgi .cgi/
AddType application/x-httpd-cgi .pl
AddType application/x-httpd-cgi .pl/
AddType text/x-server-parsed-html .shtml
AddType text/x-server-parsed-html .shtml/
AddHandler cgi-script .cgi .pl
AddHandler server-parsed .shtml .sht
です。
838835:2001/01/12(金) 16:27
access.confのAlowoverrideが "None" ってなっていました!
これが原因か、試してみます。結果をお楽しみに!
839835:2001/01/12(金) 16:28
・・・ダメでした(鬱)
840835:2001/01/12(金) 18:47
とりあえず、ファイルをダウンロードして、ブラウザで開いてみました。
すると結果は自分が望んでいる結果でした。
なぜ、ブラウザで表示されないのでしょう?
.htaccessのどこを直せばいいのでしょうか・・・?
841名無しさん:2001/01/12(金) 19:00
>>835
とりあえず、>>837 に書いてある「AddType 〜」の行は全部消す。
あと、ネスケならどうよ?
IEは独断と偏見でファイルの種類を決めるぞ?
そんなときはHTMLじゃなくても「text/html」だ!

直らないなら、あぱっちのばーじょん、ブラウザの種類とばーじょんを書くのだ。
842名無しさん:2001/01/12(金) 19:04
>>840
ヘッダちゃんと吐いてる?
843名無しさん:2001/01/12(金) 20:25
Perlが入ってないとか
844名無しさん:2001/01/12(金) 20:33
>>843
それはないだろ。(w
845名無しさん:2001/01/12(金) 20:47
初心者です。sendmailで困っています。

sendmailのインストールされているNTサーバで、
CGIからメールを送ろうとしているのですがうまくいきません。

サーバ管理者からsendmailは
C:\sendmail\sendmail.exeにインストールされていると聞いたのですが、

$mail = [email protected]
$to = [email protected]
open (MAIL@`"| C:\sendmail\sendmail -t -f $mail") || die("エラー");
print MAIL "From: $to\n";
print MAIL "Subject: test\n";
print MAIL "Content-Type: text/Plain;\n\n";
print MAIL "本文\n";
close(MAIL);

というのではエラーは出ないのですが、送信も出来ませんでした。
よく分からないので教えて頂けないでしょうか?
846名無しさん:2001/01/12(金) 20:54
>>845
とりあえず、「\」は「\\」じゃないか?

open (MAIL@`"| C:\\sendmail\\sendmail -t -f $mail") || die("エラー");
847846:2001/01/12(金) 20:59
つーか、よく見たら「To」がないぞ?

あと、Content-Typeはいらんと思うが・・・?
書くとしても「text/Plain;」じゃなく「text/plain」だろ?
848名無しさん:2001/01/12(金) 21:04
NTサーバー+IIS4.0環境で
グラフィックアクセスカウンターを載せようと
SSIを使うと「CMD のオプションは
#EXEC の呼び出しに対して使用可能になっていません」
と表示されて困っています。どうしたらいいのでしょう?
849845:2001/01/12(金) 21:15
>846さん

ご指摘ありがとうございます。
指摘された所を直して試してみます。
850845:2001/01/12(金) 21:57
$mail = [email protected]
$from = [email protected]
open (MAIL@`"| C:\\sendmail\\sendmail -t -f $mail") || die(エラー);
print MAIL "From: $from\n";
print MAIL "To: $mail\n";
print MAIL "Subject: test\n";
print MAIL "Content-Type: text/plain;\n\n";
print MAIL "test\n";
close(MAIL);

このような感じで試してみましたが、cgiの読み込みに失敗してしまいました。
同時にフォームから書き込んだログをとっていたのですが、
そちらにはデータが入っていたのでプログラム自体は動いているようです。

sendmailのパスの部分だけを書き換えてunixサーバで試したら問題なく動きました。
そこのサーバ管理者も初心者のようなんですが、
sendmailの設定ミスとかも考えられるのでしょうか?
851名無しさん:2001/01/12(金) 23:53
> sendmailのパスの部分だけを書き換えてunixサーバで試したら問題なく動きました。

sendmailのパスが違うに300ガブス。
852ayumoe-japu:2001/01/13(土) 00:13
Last regrets が入ったCD売りきれ。しくしく。

* MIME typesはcase-insensitiveなので、text/plain@` text/Plainどちらも可。でも、RFC 2045的には ";" で終わるのはダメ。(*)
* そもそも、MIME-Version: 1.0 が無い時点で、Content-Type: は無意味。
* charset省略時はus-asciiが既定値なので注意。
* っていうか、$mail = [email protected] って何よ。文字列になっていないし、セミコロン抜けている。
* die (エラー) もね。

(*)... content := "Content-Type" ":" type "/" subtype *(";" parameter)
853168:2001/01/13(土) 00:19
SSI counterで訪問者とSEXフレンドになる方法。

ちょっぱり、アゲ
854_gunzip:2001/01/13(土) 12:27
    。    _ 。 ┌────────────────
      / ̄\\ < さがってるよ.. 単発スレたてないで..........
  。  / ミ.   \| └────────────────
     > l≪ ###\/|   〜
     \_____/\|  〜

855名無しさん:2001/01/13(土) 12:59
そろそろPart3かな?
856名無し:2001/01/13(土) 21:20
Kconv.pmってどこで手に入れられんの?
857名無しさん:2001/01/13(土) 21:23
ここの板の他板表、あまりに古すぎるのどーにかなりませんか?
ほとんど飛べないんですが・・
858名無しさん:2001/01/13(土) 21:25
>>856
日本語化?
jcode.plじゃダメなの?
859名無しさん:2001/01/13(土) 21:48
>>856
もしかして、『CGIのための実践入門Perl』を読んだとか?
860856:2001/01/13(土) 22:17
>>859
ビンゴ
っていうかどこで手にはいんの
861名無しさん:2001/01/13(土) 22:19
>>860
オレも知りたい。
862名無しさん:2001/01/13(土) 22:27
Kconvもその本もみたことないけど、
ftp://ftp.intec.co.jp/pub/utils/Kconv-1.1.tar.gz
じゃだめなのか?

#Jperl用のjcode.pmか? これ
863_gunzip:2001/01/13(土) 22:27
    。    _ 。 ┌────────────────
      / ̄\\ < (859ではないが)やっぱり.... >>860
  。  / ミ.   \| └────────────────
     > l≪ ###\/|   〜
     \_____/\|  〜

僕も見つけられなくて往生したよ.....

僕は此処で見つけたけど、
ftp://ftp.intec.co.jp/pub/utils/

でも、Jcode.pmの方がいいよ
http://openlab.ring.gr.jp/Jcode/index-j.html

>>860
ちなみに、
『CGIのための実践入門Perl』追補
http://www.att.or.jp/books/perlbook/follow-up.html
864_gunzip:2001/01/13(土) 22:28
    。    _ 。 ┌────────────────
      / ̄\\ < かぶったよ...... 鬱だよ.....
  。  / ミ.   \| └────────────────
     > l≪ ###\/|   〜
     \_____/\|  〜

865名無しさん:2001/01/13(土) 22:42
>>862-863
ども。
866860:2001/01/14(日) 11:24
皆様有り難う御座います
例のKconv.pmは使うときは
use Kconv.pm;
でいいんですか?
867名無しさん:2001/01/14(日) 13:20
>>866
use Kconv; では?
868"七資産"@onyx:2001/01/14(日) 19:01
jcode.plが使えないんですけど↓はあってますか
#!/usr/bin/perl
$|=1;
print "Content-type:text/html\n\n";
require 'jcode.pl';
read (STDIN@`$str@`$ENV{"CONTENT_LENGTH"});
($your@`$hyo)=split(/=/@`$str);
&jcode::convert(*hyo@` 'sjis');
print "$hyoさん、来てくれて有り難う。<br>";

ってやっても文字化けした文字がでてくるだけ。
どうしたらいいのでしょうか?
869名無しさん:2001/01/14(日) 19:02
jcode.plの使用方法教えてください。
870868:2001/01/14(日) 19:04
jcode.plはちゃんとcgiが入ってるディレクトリに入れました
871japu(AyuMoe):2001/01/14(日) 19:41
URIアンエスケープしないとだめ。
"%1B%24B%24%26%240%24%25%1B%28B" => "うぐぅ"
って感じで。
----
$hyo =~ tr/+/ /;
$hyo =~ s/%(..)/pack "C"@` hex $1/eg;
----
872835:2001/01/15(月) 10:11
"Content-type"が、"Contenttypeってなっていただけでした・・・。
みなさん、つまらない間違いに多大な知恵を貸していただいて、
どうもすみませんでした。
873名無しさん:2001/01/15(月) 10:26
HPの<a>タグをすべて取り出すって言う処理を作ってるんですが、
use LWP::Simple;
{
$url="http://〜〜";
$html = get "$url"
@atags = $html =~<a href="(.*?)">
}
で<a>タグを取ってきたとして、取ってきた<a>の下層部を取得する場合の
処理がわかりません。アドバイスしていただきたいです。
LWPにこだわっているわけではないので、ほかのやり方でできる!
この方が簡単!って言う人がいたら教えてください!おねがいします。
874g:2001/01/15(月) 11:04
HTML中のリンク先(<a>タグ)取得と解釈して宜しいでしょうか?
正規表現ならこんな感じで使ってますが。
while( $html =~ m|href *= *['" ]*(http[s]?://.*?)['" ].*?[>](.*?)</a>|iog ) {
push(@atags@`$1);
push(@titles@`$2);

そんなに追求していないので、もっと綺麗な書き方あるかも。
875名無しさん:2001/01/15(月) 11:45
shで設定されている環境変数を使いたいんですが
どうすればいいんでしょう?

ENV.shに
MY_DIR=$HOME/my; export MY_DIR
って書いてあって、perlからMY_DIRを参照したいんです。

shでいうところの
. ENV.sh
みたいに呼び出したいんですけど・・
876名無しさん:2001/01/15(月) 11:53
>gさんさっそくのレスありがとうございます。
たしかに<a>タグの取得もあるんですが、取得した<a>を使ってまた「get」する
HPのツリー構造の下層部を徐々に取得していき、最終的にはリンク先(<a>タグが無くなるまで)
探し出すって処理なんです。要は$urlで取得したHPをどんな構造になってるか?って事なんですよ。
初心者なもんで、上手く質問できなくってすいません。
877g:2001/01/15(月) 14:51
>876
流石にそれは長くなりますね。
また”4階層迄”とか指定しないと、永遠に外部リンクを辿って終わらないので、
同じホストだけとか、相対パスで指定してあるリンクに限ってとかしないとね。

$host = 'http://japu.org/';
先頭のHTMLをゲットしてくる
while( $html =~ m|href *= *['" ]*(http[s]?://.*?)['" ].*?[>](.*?)</a>|iog ) {
if( $1 =~ /^$host/ || $1 != /^http/){
push(@atags@`$1);
push(@titles@`$2);
}
}
foreach (0..@atags){
$atags[$_]に入ってるアドレスからHTMLをゲットする。
while( $html =~ m|href *= *['" ]*(http[s]?://.*?)['" ].*?[>](.*?)</a>|iog ) {
if( $1 =~ /^$host/ || $1 !~ /^http/){
push(@atags@`$1);
push(@titles@`$2);
}
}
}

と、まあ、合理的に繰り返してください。
878g:2001/01/15(月) 14:53
上の!=は!~の間違い
879japu([email protected]):2001/01/15(月) 15:48
HTML::Parser 使用例。
根刮ぎ調べるのであれば、再帰的に呼び出すのが良いかも。
相対URIあたりもきちんと処理する必要あるね。(URI.pm あたり?)

#! /usr/bin/perl -w

use LWP::Simple;
use HTML::Parser;
use Jcode;

%URI_Elem_Attr = (a => "href"@`
link => "href");

$html = jcode(get "http://www.japu.org/")->euc;;
$parser = new HTML::Parser(api_version => 3@`
start_h => [\&stag@` "tagname@` attr"]);
$parser->parse($html);
$parser->eof;

sub stag
{
my $ename = shift;
my $attrs = shift;
if(exists $URI_Elem_Attr{$ename} and
exists $attrs->{$URI_Elem_Attr{$ename}}) {
print "$ename: $attrs->{href}\n";
}
}
880868:2001/01/15(月) 16:02
>>871
ご指摘有り難う御座います。つまり

#!/usr/bin/perl
$|=1;
print "Content-type:text/html\n\n";
require 'jcode.pl';
read (STDIN@`$str@`$ENV{"CONTENT_LENGTH"});
($your@`$hyo)=split(/=/@`$str);
&jcode::convert(*hyo@` 'sjis');
$hyo =~ tr/+/ /;
$hyo =~ s/%(..)/pack "C"@` hex $1/eg;
print "$hyoさん、来てくれて有り難う。<br>";

こうすればいいんですか?
881名無しさん:2001/01/15(月) 19:26
POSTされて処理しているさいちゅうに
ブラウザの中止ボタンを押される(TCP切断される?)と
スクリプト終了でしょうか?
絶妙なタイミングでやられるとこまるんですけど
SIGNALを考慮する必要ってあります?
882名無しさん:2001/01/15(月) 19:58
Teacupの掲示板はどうやってcookieを取っているのでしょうか。

※ 2chはJavaScriptです
883japu(AyuMoe):2001/01/15(月) 21:57
>>880
jcodeで変換する前に入れる。

>>881
SIGTERMとかSIGKILLが飛んでくるはず。

停止されると致命的な処理は、
$SIG{TERM} = $SIG{KILL} = $SIG{HUP} = $SIG{USR1} = "IGNORE";
uguu();
$SIG{TERM} = $SIG{KILL} = $SIG{HUP} = $SIG{USR1} = "DEFAULT";
とすれば良いのでは。
884名無しさん:2001/01/15(月) 23:38
>>881@`883
ローカル環境(FreeBSD 3.3+Apache1.3.9)で実験したっす。
ブラウザから中断させたCGIプロセスにはSIGPIPEが来てました。
885名無しさん:2001/01/16(火) 00:43
アクセス解析の配布スクリプトを使いたいんですが、
どこのがいいですか?
SSI使えます。
886873:2001/01/16(火) 11:00
>gさん、japuさん
レスおそくなってすみません。アドバイスありがとうございます。
まだモジュールがよく理解できていないで、HTML::Parserあたりを
調べてきます。
お二人の言われてる通り、相対パスの問題とか、リンク先が永遠になって
しまう問題とかありすぎて、どこから手をつけていいやら・・・・
リンク先の限定ってことで、最初に指定したURL「yahooだったらwww.yahoo.co.jp」
の付くアドレスだけどか考えてみたりもするんですけど・・・・なかなか
難しくって・・・また何か分からないことありましたらよろしくお願いいたします。
887名無しさん:2001/01/16(火) 14:42
ダブルコーテーションとシングルコーテーションの使い分けはどうすればいいんですか?
888名無しさん:2001/01/16(火) 14:43
>>887 中の変数を展開するかどうかで。
889サゲ茶漬け:2001/01/16(火) 18:08
>>887 気分で使い分けよう
890名無しさん:2001/01/16(火) 18:29
つまり、
$hoge = "unko";
$hage = '$hoge';

みたいな感じ?
891名無しさん:2001/01/16(火) 18:52
Perl初めて2ヶ月の初心者です。
テストサーバーがNT4+Apache+ActivePerl(最新)+DBI+Access97
で、DBに検索を書けるCGIを書きました。初歩的なエラーがたくさん
出て、途中でタイムアウトしました。まずはローカル(Win95+Active
Perl+DBI+Access97、Copal利用)で最低限のテストをと思い、Copal
で動かしてみました。ほとんど同じエラーメッセージで、

Variable "%form" is not imported at
D:\COPAL\copal.tmp line255
Global symbol "$hDb" requires explicit package name at
D:\COPAL\copal.tmp line239

の2つのパターンが表示されます。これはどういう意味なのでしょうか。
変数がおかしいのは分かるのですが、これってサブルーチンじゃなくて
メイン(というのかな)なので、
My $i = 3;
と宣言をせずに、いきなり
for($i=0 ; $i++ ;$i<9)
と書いてもいいはずなんですが・・・・?教えて下さい。
(そもそも、POSTメソッドで渡される値を%formに入れる処理が
あるので、まともに動くはずがないのは分かるのですが、$hDbの
ような変数までエラー表示されるのが分からないのです)
892名無しさん:2001/01/16(火) 18:56
↑追加します。
ローカル環境にApacheを入れていないので、実行はCopalで行って
います。さらに、簡単なテスト用CGIは成功しています。下に書いて
おきます。(成功したもの)Copalで動かしてOKでした。

#!/usr/local/bin/perl

use DBI;#接続
use strict;

my $hDb = DBI->connect("dbi:ODBC:webAccess") or die "接続エラー $DBI::errstr";# SELECTの場合
my $hSt = $hDb->prepare($strSQL);

#実行
my $nRes = $hSt->execute;
#データの取得
while(my @aRes = $hSt->fetchrow_array) {
print join("\t"@` @aRes)@` "\n"; #タブ区切りで出力

}

$hSt->finish;
$hDb->disconnect;


#----------選択
my $hSt = $hDb->prepare('SELECT * FROM T_TRN_TEST ');
my $strSQL = "SELECT * FROM T_TRN_TEST ";
893名無しさん:2001/01/16(火) 19:11
>>891-892
use strict vars
しているからじゃないか?(はずしている可能性大)
894名無しさん:2001/01/16(火) 19:16
海外の共用サーバをレンタルしているので、
Jcode.pmがインストールされていません。
UTFを扱うのでJcode.pmを利用したいのですが、
自分のホームディレクトリ以下にインストールして
利用するにはどうすればよいでしょうか?
Telnetは利用できます。
宜しくお願い致します。
895_gunzip:2001/01/16(火) 19:26
>>894
use lib 'Jcode.pmの有るところ';
896891-892:2001/01/16(火) 19:33
>>893
うおーその通りでした!!
あんなにあったエラーが激減しました!!\(^-^)/
一日中はまっていたのです〜食事でもおごりたいぐらい感謝しています!
ところで、use strictの部分はDBIのサンプルそのまま書いていたの
ですが、これはどういう意味なのでしょうか?
ラクダ本を見てみると、パッケージとライブラリとモジュールがあり、
いずれもCのincludeのようなものに見えます。ライブラリとモジュールの
使い分けってあるのでしょうか?
よろしければ教えて下さい。
897894:2001/01/16(火) 19:36
>>895
早速ありがとうございます。


> use lib 'Jcode.pmの有るところ';

と言うことは、任意の場所にJcode.pmを置いて
パス指定をすればよいだけなのでしょうか?
898893=895=_gunzip:2001/01/16(火) 21:53
893=895です。

>>891-892
それはよかったですね。
ですが、.....本当に良いのかなあ?

http://www.harukaze.net/~mishima/perl/man/strict.3pm.html
これを読めば分かりますが、strict は安全でない
(ややもすれば誤作動する可能性がある)構文をはねる為にあるわけですから、
それをはずして、動いた(エラーが減った)からといって、それは
(他の言語で)コンパイラの警告オプションのチェックをはずしていって
「やった。エラーが消えた」と言うようなもので、本質的な解決にはならないかと。

>Variable "%form" is not imported at *
「変数%formがインポートされとらんぞゴルァ」
これは、変数%formが他のモジュールからインポートされていないにもかかわらず
アクセスしようとした、ということだと思います。
(って、そのままやな。これ、見たこと無いし.....俺)

>Global symbol "$hDb" requires explicit package name at *
「グローバルシンボル$hDbのパッケージ名をちゃんと指定せんかゴルァ」
これは、変数$hDbがuse strict vars を指定しているにもかかわらず、myで宣言されていないか、
パッケージ名をきちんと指定していないためにエラーを報告しているわけですから、
(少々くどいですが)
○きちんとその変数をmyで宣言して、レキシカルスコープにしているか
○パッケージ名をちゃんと指定しているか($main::hDb とか $a::b::cとか)
をそれぞれについて確認してみることをお勧めします。

それが面倒なら、use strict はやめときまひょ

899893=895=_gunzip:2001/01/16(火) 21:54

>ライブラリとモジュールの使い分けってあるのでしょうか
うーん、といいますか....
モジュールは、ライブラリに加えて、
自動的に(暗黙のうちに)それを使用するシンボルテーブルにシンボルをエクスポート
する働きをもった(...実際にやるのはuseディレクティブだからimportメソッドを実装して、
そのような決まりを守った、といった方が正しいか)もの、と考えて良いと思います。
んと...まあ、5になって久しいですし、今ではよほど古いものでも使うのではない限り、
使い分け等はあまり考えなくても良いと思います。

>食事でもおごりたいぐらい感謝しています!
夕食未だ食べてないです......鍋焼きうどんがいいなあ。(寒いし)

>>897
良いと思います。
(済みません。CGIはあまりさわってないので.....ハイ)

-----
なんか間違ったことを書いていそうなので、あまり信用せず、
よくよく確認してくださいです。ハイ(ラクダ本買いましょう)

長すぎるのかなあ....
900名無しさん:2001/01/16(火) 21:57
一個の変数に100メガのファイル入れても平気っすか?
正規表現でチョロチョロっとやりたいんですが
901名無しさん:2001/01/16(火) 22:41
メモリが許せば
902名無しさん:2001/01/17(水) 00:53
初めまして。
この度「検索システムの種類とそれぞれの作り方」について発表させられる羽目になってしまいました。
当方検索システムの作り方なんて見た事も聞いた事も食った事もありません。どのような言語を用いるのか、どのように作るかなどを詳細かつ親切に解説しているHP、或いは書籍をご存知でしたら何卒お願い致します。
903japu([email protected]):2001/01/17(水) 01:20
904名無しさん:2001/01/17(水) 01:48
>>903
板違いかもしれないような質問に答えて下さって有難うございます。
何とか形になるような発表をしたいと思います。
905名無しさん:2001/01/17(水) 03:44
>>902
がんばってね。
無事おわったら、資料あぷ きぼ〜ん。
906名無しさん:2001/01/17(水) 04:51
すみません。どなたかよろしくお願いします。

ふつうレンタルサーバーにおいてメール送信するときは
どのメールクライアントを使うのがいいのでしょうか?
sendmailでもOKでしょうか?

自分はドキュソなのでモジュールがないことをいいことに
socketで作ってしまいました。これはあまりやらないん
ですよね?
907サゲ茶漬け:2001/01/17(水) 05:11
>>906
相手のメールサーバの応答が遅くて
こちらがタイムアウトしそうになったときの
処理はどうやったのですか?
908名無しさん:2001/01/17(水) 06:00
エラー処理まで考えていませんでした。だめだめですね。
ところで既存のメーラーなんかはどうなっているのでしょうか?

ちなみに自分は繋がるまで15秒、HELO完了までを3秒として処理
してました。
909名無しさん:2001/01/17(水) 09:12
改行が 0D (\r) だけのファイルを1行ずつ読み込んで処理したいんですけど、
$/ = "\r" とかやっても while (<FILEHANDLE>) とかやるとファイルの内容を全部
読み込んでしまうのですが、他にする事あるのでしょうか?
わかる方ご教示よろしくお願いします。
910891-892:2001/01/17(水) 10:53
>>899
丁寧なご説明ありがとうです!
実は私、昨年11月からWebアプリを作るために、HTML、JavaScript、
PerlにDBIを独学で(涙)勉強し、あちこちのプログラムを参考に
どうにか作り、初CGI起動!だったのです。
そのために買った本が「初めてのPerl Win32システム(ラクダ本)」、
「Perlで作るCGI入門(応用編)」、「Effective Perl」でした。
最後の本は読む時間がなく、今回のuse strict〜が詳しく載って
いました・・・・・でも、それを読んだだけじゃ全然分からなかった
と思います。
そもそも、ライブラリとモジュールの部分は、ラクダ本でもろくに
読まなかった・・・本当にお恥ずかしい限りです。

use strictはVBの「Option Explicit」に相当するものなのですね。
(私はVBとAccess専門です)これは使う習慣をつけた方がよさそうですね。
急がば回れで、Effective Perlを読んでみます。パッケージも書いて
あったし。その上で、$main::hDb〜に修正します。
晩ご飯だけでなく、一日分おごらせて下さい!ぐらいに感謝しています。
911むぎ茶:2001/01/17(水) 12:46
>909
それであってるはず
912困った:2001/01/17(水) 13:42
画像アップロードするのに、
open(OUT@`"> $ImgFile") || &error("画像のアップロードに失敗しました"@`"lock");
binmode(OUT);
binmode(STDOUT);
print OUT $upfile1;
close(OUT);

open(OUT@`"> $ImgFile") || &error("画像のアップロードに失敗しました"@`"lock");
binmode(OUT);
binmode(STDOUT);
print OUT $upfile1;
print OUT $upfile2;
print OUT $upfile3;
print OUT $upfile4;
close(OUT);
みたいなことはできるのでしょうか。初心者ですいません。

913名無しさん:2001/01/17(水) 14:29
本当に初心者的ですまないのですが、
myとlocalとはどういう違いがあるのですか?
914名無しさん:2001/01/17(水) 15:11
簡易データベースを作りたいと思っています
WindowsのActivePerlで作成したデータファイル(DBM)を
レンタルサーバ(UNIX)にアップロードしても使えますか?
915むぎ茶:2001/01/17(水) 15:15
>914
使用しているDBMライブラリの種類による。
ヘッダ部分に作成時のエンディアンを保持するDBMライブラリ同士なら
読み書き可能。
そうでない場合はエンディアンなどがあえば可能
DBMをCSVみたいな形式にダンプしてもってくのがいいと思うよ
916あってるかな?:2001/01/17(水) 15:33
>>913
・my は本当に全く新しい変数を作る
・local は既存の変数を、ここでは俺が使うと宣言する
という感じかなぁ。

有効範囲については下のようなものを…。

sub parent{
local $lv = 'LOCAL';
my $mv = 'MY';

&child();
}

sub child{
print "\$lv=$lv\n";
print "\$mv=$mv\n";
}
917名無しさん:2001/01/17(水) 15:55
ありがとうございます。

本当の意味でのローカル変数とはmyのことなのですね。
localはそのブロック内から呼び出された関数すべてに
おいて有効ということなんですね。

ありがとうございました。
918名無しさん:2001/01/17(水) 16:03
>>996
うまい!!
Effective PerlでもMyが推奨されている。
これを読んだ時、今一つピンとこなかったけれど、996さんの
説明で「これだったんだ!」。ありがとう。
919名無しさん:2001/01/17(水) 17:14
VBなど、共通に使う関数を別ファイルにして置いていますよね。
(他の関数から自由に呼び出せる。汎用関数)
Perlでこういうのはできるのでしょうか。初心者向けのCGIを
見ていると、汎用関数も含めて1ファイルになっているものばかりで
よく分からないのです。またその宣言の方法などがあれば教えて
下さい。
920名無しさん:2001/01/17(水) 17:17
やってみて
それでもだめなら
きいてみる
921名無しさん:2001/01/17(水) 17:33
>>919
「他の関数から自由に呼び出せる」という意味はよくわからないが…。
requireじゃダメなの?
922名無しさん:2001/01/17(水) 17:56
現在実行しているCGIスクリプトのファイル名を取得するには
どうしたらいいのでしょうか。

>919
Perlはmy@`localと宣言しないと勝手にグローバルスコープになるから
気をつけてね!
923japuzeeeeee:2001/01/17(水) 18:21
924名無しさん:2001/01/17(水) 18:31
>923
その後自分調べて$^Xというものもあるらしいことが分りました。
ありがとうございました。
925名無しさん:2001/01/17(水) 18:47
>>919
cgi-lib.plとか、jcode.plがそうだよ。外部ファイルから、関数を呼出たいんだろ?
そのファイルを921さんが言うように、
require '../lib/cgi-lib.pl';
、で呼び出せばOKだ。
試しに簡単な関数作って、hoge.plってファイルに保存してやってみなさい、すぐわかるから。
926914:2001/01/17(水) 20:26
>>915
ありがとう
とりあえず試行錯誤してみます

DBMで100万件規模のデータベースは難しいかな
キーは英数字のみ、値は2桁の数字のみ
バイナリファイルで管理したほうが楽かな・・・
927名無しさん:2001/01/17(水) 20:32
すみません。メールのことなんですが、
パイプを使ってメール送信をすることができるんですが、
それが異様に遅いのです。どこが悪いのか教えて下さい。

$from = "From: junya\@coms.ne.jp\n";
$to = "To: junya\@coms.ne.jp\n";
$subject = "Subject: Hello world\n";
open(OUT@` "| nkf -j | /usr/lib/sendmail -t");
print OUT $from;
print OUT $to;
print OUT $subject;
print OUT "watashihaikimasu\n";
print OUT "\.\n";
close OUT;
exit 0;
928名無しさん:2001/01/17(水) 20:35
あ、やば!
メルアド丸出しだ!
子房
929名無しさん:2001/01/18(木) 09:24
>>921@`>>925
ありがとうございます。
おっしゃる通り、
require 'jcode.pl';
を書いて、呼び出しています。そこまではいいのですが、汎用関数
を/usr/local/lib以外のディレクトリ(サーバーはWinNT4.0、
ActivePerl最新)に置いて指定する方法が分からないのです。
そこに突っ込んでもいいのですが、できれば自分用に割り当てられた
ディレクトリ(例えば・・・cgi-bin/hogehoge/)に置いて使いたい
のです。そのためには、どうすればいいでしょうか?@INCに登録され
ていないと出てくるのですが・・・。
930名無しさん:2001/01/18(木) 09:34
use lib '/home/hoge/lib';

みたいにパスを@INCに登録
931名無しさん:2001/01/18(木) 11:18
htmlソースを解析して、リンクを抽出して
どんどんたどるプログラムを書きたいのですが、
htmlソースを開くにはどうしたらよいんでしょうか?
932名無しさん:2001/01/18(木) 11:20
>>930
うぎゃーこう書くのですか!
試してみると、@INCに登録成功しましたー。ただ他のエラーが
出てきました(涙)。頑張ります。みなさんありがとう!
933名無しさん:2001/01/18(木) 13:42
初心者の人達、これを使ったらどうだい?フリーウェアだし。
http://www.k-collect.net/pe/index.htm
俺は結構気に入ったぞ。
934909:2001/01/18(木) 14:49
解決しました。$/="\r" は効きます。
単にバージョンが古かっただけでした
(version 4.036 + 1.4/3で失敗)
935にとり:2001/01/18(木) 17:18
毎度みなさんにお世話になってます、にとりです。
またわからない関数がでてきたので教えてほしいのですが
glob関数です。perlで言うグロブ(*)とは関係ないんですか?
glob関数ってどんな働きをするのでしょうか?おしえてください。
936名無しさん:2001/01/18(木) 18:51
>>にとりさん
前回は私、名前を間違って書いてしまいましたね。すいません。
質問のglob関数ですが、説明しずらいので例を書きます。
@hoge = glob(*.txt);
と書きますよね?すると、カレントディレクトリのファイルから、".txt"という名前を
含むファイルの文字列を作成します。それを配列@hogeに代入する、というわけです。
もしかしたら、間違っているかもしれません。識者の方、フォローお願いします。
937にとり:2001/01/19(金) 09:11
>936さん
レス遅れてすみません。
名前のこと言われて気がつきました(^^;;
ぜんぜん気にしてませんよ。似てますし(笑)

説明ありがとうございます。ちょこっと簡単なプログラムを作って
試してみます。いろいろガリガリ書き中なので(笑)
また分からないことありましたらよろしくおねがいします。
938名無しさん:2001/01/19(金) 09:56
DBMモジュールの種類を調べる方法を教えてください
939:2001/01/19(金) 09:58
#!/usr/local/bin/perl
use Config;
print "Content-type: text/plain\n\n";
print "Result = "@` $Config{extensions}@` "\n";
exit;

↑これ実行すればわかるよ
SDBM_FileとかSocketとかね
940938:2001/01/19(金) 10:00
ごわっ!
速レスありがとうございます
941名無しさん:2001/01/19(金) 10:50
sub tes{
$a=10;
}

こんなのってperlでもローカル変数になるの?

sub tes{
local($a);
$a=10;
}

宣言しなきゃ駄目??
942名無しさん:2001/01/19(金) 11:00
宣言しなくても問題ないスクリプトなら、それでいいんじゃない?
perl5ならmy使えよ
943941:2001/01/19(金) 11:58
myってCで言うとこのstaticじゃないの??汗
使い捨ての変数ならlocalだと思ってた・・・。
メモリの節約と、変数名がかぶらない為なんだけど・・。

>宣言しなくても問題ないスクリプトなら、それでいいんじゃない?
perlだとそんなもんなのか??(謎)
944nyori:2001/01/19(金) 12:08
はじめまして CGIを自分でくみたくて勉強始めました。
nyoriです。
フォームから渡された変数から、CGIのなかにある変数のついた文章を
選んで表示させるというたぶんごく簡単なプログラムを書きたい
のですが、変数を変数に代入するところがうまくいきません。
フォームからの変数の受け取りのプログラムも

%form = &read_input('euc');

を使うとエラーがでてしまうので
パラメーターを使ってます。

#!/usr/local/bin/perl5
require './cgi-lib.pl';
use CGI qw(:standard);
$01 = "あなたの性格は●です。";
$02 = "あなたの性格は×です。";
$03 = "あなたの性格は△です。";
$04 = "あなたの性格は■です。";
$f1 = param("q1");
$f2 = param("q2");
$f3 = param("q3");
$f4 = param("q4");
$first = "$f1";
$second  = "$f2";
$third = "$f3";
$forth = "$f4";
print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD><TITLE>Perlテスト</TITLE></HEAD>\n";
print "<BODY>\n";
print "1本目は$first<BR>\n";
print "2本目は$second<BR>\n";
print "3本目は$third<BR>\n";
print "4本目は$forth<BR>\n";
print "</BODY>\n";
print "</HTML>\n";

これだとq1にフォームから01と入れると「一本目は01」とそのまま変数が表示されてしまいます。
$01 = "あなたの性格は●です。";
と01を定義しているつもりなのですが
どうしたらよろしいのでしょうか
いろいろ調べたのですが、どれも複雑でよく分からなかったので
質問しました。どうか教えてください。
よろしくお願いします。
945名無しさん:2001/01/19(金) 12:10
Cがわかるくらいなら、自分で勉強しろや。
946むぎ茶:2001/01/19(金) 12:14
my %seikakuMessageHash = (
'01' => 'あなたの性格は●です。'@`
'02' => '...'@`
'03' => '...'@`
'04' => '...'@`
);
$first = $seikakuMessageHash{$f1};

$f1 = param("p1");
よりも
$p1 = param("p1");
のが混乱少ないと思うがどうか
947nyori:2001/01/19(金) 12:25
むぎ茶さんありがとうございます!!
できました・・これを3日ぐらい調べてたんです。
感動です

またお願いします。
948>943:2001/01/19(金) 12:25
Perl5ならlocalではなくmyを使う方が高速かつ安全
949941:2001/01/19(金) 12:27
>>945
それ俺に言ってるの??汗
別にCも使えるけどperlの方が楽だからperl使ってるのに・・
Cの後にperl勉強したっていいじゃんかぁ。。
950nyori:2001/01/19(金) 12:28
ちなみに
%form = &read_input('euc');
をつかってフォームから変数を受け取ろうとしたとき
必ずエラーがでるのはなぜですか。

ある解説サイトではフォームから受けるときはこれで
大丈夫と書いてあったのですが・・
951むぎ茶:2001/01/19(金) 12:32
だから “さん”つけんなって(TT
952むぎ茶:2001/01/19(金) 12:34
どんなエラーかもわからんのに答えられません
953nyori:2001/01/19(金) 12:42
すみません、唐突でしたね

%form = &read_input('euc');
$f1 = $form('q1');
$f2 = $form('q2');
$f3 = $form('q3');
$f4 = $form('q4');

とやると
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
ってでます。

今後の参考のために教えてください。
954941:2001/01/19(金) 12:47
>>948
サンクス!

>>953
&read_inputって何?
この関数の中で何やってるか分からないから答えられないですよ。
955むぎ茶:2001/01/19(金) 12:51
それは WWWサーバーが出してるエラーです。
コマンドラインから実行できる環境は無い?

eval(q|%form = &read_input('euc');|);
my @readInputErrorInfo = $@
とでもしておいて
print "[@readInputErrorInfo]\n";
すればとりあえずエラーは見れるかな
たぶん
Undefined subroutine &main::read_input called at (eval 1) line 1.
だと思うけど
956japu(AyuMoe):2001/01/19(金) 12:54
>>953
まずは文法からお勉強。

% perl
$uguu = $moe("ayu");
syntax error at - line 1@` near "$moe("
Execution of - aborted due to compilation errors.
957nyori:2001/01/19(金) 13:04
ちょっと何のこと言っているのかちんぷんかんぷんです
すみません・・・

eval(q|%form = &read_input('euc');|);
my @readInputErrorInfo = $@

というのを文中に置いてみたんですけど同じエラーがでました。
「コマンドラインから実行できる環境」があるかわからないです。

ちゃんと勉強しようと思うのですが、何か初心者用のいい本とかサイトとかあったら
教えてください。

958名無しさん:2001/01/19(金) 13:19
959ほういち:2001/01/19(金) 13:30
$f1 = $form{'q1'};

960名無しさん:2001/01/19(金) 13:53
コマンドラインってのは、DOSみたいな感じの
コマンドで操作する奴。

多分Winだよね?
まず、perlをDOSから呼んでスクリプトを読ませる事を
できるようにすると、エラーチェックは楽だよ。

http://www.activestate.com/Products/ActivePerl/Download.html
perlをインストールしてDOSで

perl tes.cgi

とかってやれば、エラー出してくれるよ。
961名無しさん:2001/01/19(金) 14:09
超初歩な話ですが、ある変数に入っている値をif文で調べる場合、
NULLかどうかはどうやって書けばいいのでしょう?
具体的には、HTMLの<FORM>で、いくつかのフィールドに値を
入力してもらい、それを基にSQL文を作成、DBに検索をかけます。
その時、フィールドに値が入っているかどうかをチェックする文が
よく分からないのです。(フィールドには数値のみのものと、文字列
のものとあります)

($form('HTML上のフィールドの名前') = HTML上の入力値)
while(($str_index@`$var_value) = each(%form)){
if(!$var_value) {
$bln_nullCheck = 0;
last;
}
}

このif〜の書き方がおかしいようで、フィールド値が全て空の時も、
$bln_nullCheckの値が0になってくれません。よろしくお願いします。
962むぎ茶:2001/01/19(金) 14:58
if(! defiened($var_value)){
963名無しさん:2001/01/19(金) 15:31
>>961
HTMLの方に問題がありそう。
FORMから文字列が来るのは、そうゆう書きかたしてるからでは?
javascriptとか使ってるとか。
964名無しさん:2001/01/19(金) 15:36
地域サークルでID検索ページをつくることにしました
http://www.info-niigata.or.jp/home/sarvice/info_id.html
こんな感じで利用者の有無を調べたいのですが適当なスクリプト配布している場所ありませんか?
965コブリータ:2001/01/19(金) 15:39
簡単な投票システムみたいなものを作ろうとしているのですが、上手くいきません。
ラジオボタンで選択された方をドンドン足していきたいのですが。

データファイルに0@`0と書き

sub out_data {
open(FILE@`"+<データファイル") || &out_error;
flock(FILE@`2);
while(<FILE>){
($num@`$num_2) = split(/@`/);
}
($num_1@`$num_2)=split(/@`/);
if($yourChoice == 0 ){
$num_1 ++;
}elsif($yourChoice == 1 ){
$num_2 ++;
}
seek(FILE@`O@`O);
print FILE $lines;
flock(FILE@`8);
close(FILE);
}
としているのですが、データファイルに書き込まれず、エラーになってしまいます。
どのようにしたら良いでしょうか?
966名無しさん:2001/01/19(金) 15:53
>>961
ありがとうございます。defined関数を使うのですね。
下の書き方をすると失敗しました・・・間違えているのでしょうか?
(cmb_rotフィールド以外の何か値が入っているフィールドが
見つかった時に、フラグをOFFにする)

while(($str_index@`$var_value) = each(%form)){
if(($str_index != 'cmb_rot') && (defined($var_value))){
$bln_nullCheck = 0;
last;
}
}

さらに、%formに値を格納する部分を書いておきます。ここが間違えて
いるのでしょうか?

@str_data = split(/&/@`$str_dataString);
foreach $var_each(@str_data) {
($str_property@` $var_value) = split(/=/@` $var_each);
$var_value =~ tr/+/ /;
$var_value =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("C"@` hex($1))/eg;
&jcode'convert(*var_value@` $str_chrCode);
$form{$str_property} = $var_value;
}
>>963
おっしゃる通り、このHTMLでは文字列型の値と数値の値を受け付ける
フィールドが、それぞれ複数あります。そのフォームの値をまとめて
処理したいのです。これを基にSQLを生成します。
967名無しさん:2001/01/19(金) 15:59
>>963
さらにつけたします。JavaScriptは使っていますが、唯一日付指定
をする際に、西暦、月、日のコンボボックスのどれかが空になったら
全部NULLにするというのを書いているだけです。今回のは日付関連
を全然触わらずに、あるフィールドに値を入れてテストをすると、
値が入っているにもかかわらず、フラグがOFFにならないのです。
よろしくお願いします。
968むぎ茶:2001/01/19(金) 16:02
失敗とかエラーとかいわれてもわからんちゅーに

$str_index != 'cmb_root'

$str_index ne 'cmb_root'
969965:2001/01/19(金) 16:11
写し間違えました

簡単な投票システムみたいなものを作ろうとしているのですが、上手くいきません。
ラジオボタンで選択された方をドンドン足していきたいのですが。

データファイルに0@`0と書き

sub out_data {
   open(FILE@`"+<データファイル") || &out_error;
   flock(FILE@`2);
   while(<FILE>){
      ($num@`$num_2) = split(/@`/);
      if($yourChoice == 0 ){
         $num_1 ++;
      }elsif($yourChoice == 1 ){
         $num_2 ++;
      }
    seek(FILE@`O@`O);
    print FILE $lines;
    flock(FILE@`8);
  }
  close(FILE);
}
としているのですが、データファイルに書き込まれず、エラーになってしまいます。
どのようにしたら良いでしょうか?(エラーは内部サーバーの表示です)
970965:2001/01/19(金) 16:13
print FILE $lines;ではなく
print FILE ($num_1@`$num_2);
でした
971むぎ茶:2001/01/19(金) 16:33
コマンドラインで動かしてエラーメッセージを確認しましょう
972名無しさん:2001/01/19(金) 16:34
>>968
失礼しました。恥ずかしい間違いを(この辺が超初心者)・・・・
早速修正しました。
テストを繰り返すうちに、このdefined($var_value)が、値が入って
いないフィールドに対して1を返しているのが分かりました。
>if(($str_index ne 'cmb_rot') && (defined($var_value))){
の前に、
>print "str_index = $str_index: var_value = $var_value
:bln_nullCheck = $bln_nullCheck defined = " . defined($var_value) . "<BR>\n";
を追加した(デバッグのつもり)結果、
>str_index = cmb_toYear: var_value = :bln_nullCheck = 1 defined = 1
が返って来ました。何も値を入力していないのに・・・・・(号泣)
皆さんごめんなさい、教えて下さい。
973965:2001/01/19(金) 16:45
う〜ん・・・・メイン処理で

if ($yourChoice ne ''){
&out_data;
}
&out_html;
exit;
としているので、telnetでは問題が発生しないんですよね・・・
データを書く時だけエラーになってしまうのです・・・
974_gunzip:2001/01/19(金) 16:47
>>969-970
何となく思うのですが、(あまり本質的ではありませんが)

四行目
>($num@`$num_2) = split(/@`/);
は、
($num_1@`$num_2) = split(/@`/);
では?

それと、
>print FILE ($num_1@`$num_2);
これは、
print FILE ($num_1@`"@`"@`$num_2);
又は print FILE "$num_1@`$num_2";
ではないのですか?
975名無しさん:2001/01/19(金) 16:48
そろそろ別スレッドを立てた方がいいのではないでしょうか?
976_gunzip:2001/01/19(金) 16:51
>>975
たてましょうか?
977名無しさん:2001/01/19(金) 16:59
>>976
はい!よろしくお願いします!
978名無しさん:2001/01/19(金) 17:11
>974さん
う〜む・・・直してみたら、
Executionm of 〜aborted due to 〜
の表示が出ました。

暫く休憩しまっす・・・・
979_gunzip:2001/01/19(金) 17:18
>>977
ちょっと待って。あと少し
980_gunzip
 。        _   。      。
           // ̄\   。
         |/  ; イヽ ゜   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  〜  |\/### ≫l <   < と言うことで、【Perl】初心者コーナーPart3 へどうぞ
〜    |/\_____/     \_________________
                     
http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521