Site hosted by Angelfire.com: Build your free website today!
■過去ログ倉庫めにゅーに戻る■

【Perl】初心者コーナー Part2

1 名前:名無しさん 投稿日:2000/10/18(水) 06:11
【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 の使い方はお勧めできないなあ。

7 名前:4です 投稿日:2000/10/19(木) 13:59
>>5-6
どうもありがとうございました。うまく行きました。
とりあえずはこの方法でやって、後でもっといいやり方も考えてみます。

8 名前:名無しさん 投稿日:2000/10/19(木) 15:15
>>3 >>6
man perltie
man perlmod


9 名前:PPP 投稿日:2000/10/19(木) 16:10
職場を異動になりperlを使うようになりました。
プログラムは一度も作成したことないので、どのようなもので
勉強すればいいかわかりません。何かいい参考書籍がありましたら
教えていただけますか?独習perlとか簡単そうかなぁ?と思ってる
ですが、どうでしょう?

10 名前:名無しさん 投稿日:2000/10/19(木) 17:06
>9
http://210.224.163.192/test/read.cgi?bbs=perl&key=970166109&ls=50

11 名前:PPP 投稿日: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 のエラー表記だね。
それがされてないってことだよね。

20 名前:minima 投稿日:2000/10/20(金) 06:54
>>15
こんなもんでいかがでしょうか。
半角英数字を全部消してみて,まだ何か残っていればエラーとします。
$temp = $check;
$temp =~ s/\w//g;
if ($temp ne ''){
print "Content-type: text/plain\n\nError";
exit;
}

21 名前:minima 投稿日:2000/10/20(金) 07:02
あ,すんまそん。
16 がダメだったということは,20 のもダメのような気がしてきました・・。

22 名前:15 投稿日:2000/10/20(金) 07:08
>>20
頭が固くてそんな発想は思いつきませんでした。。。
この方法だと
$temp =~ s/\.//g;
のようにすれば許容範囲も簡単に広げられますね。
本当にありがとうございました。

23 名前:15 投稿日:2000/10/20(金) 07:11
>>20-21
21の書き込み見ないで書き込みしてしまいました・・・。
でも、実験してみてちゃんとできました。

24 名前:Perl仮面 投稿日:2000/10/20(金) 11:07
ド素人が(--#、とあきれられそうですが、教えて下さい。
Perlスクリプトをコマンドラインから実行する時、
引数の数と内容を求めるにはどうすればいいのでしょうか。
(Cでいうmain()におけるargcとargvです)
「$何とか」という定義済み変数があるのでしょうか...

25 名前:RTFM 投稿日: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
>どこにバグがあるんでしょう?
お前のノーミソ

30 名前:Perl仮面 投稿日: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系の質問だ。(藁


34 名前:HナインボールH 投稿日:2000/10/20(金) 17:36
自分のWinにperlいれたやつでは動くんだけど、サーバーにアップすると動かなくなるのはなぜっすか?

35 名前:Tea 投稿日: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

40 名前:12 投稿日: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 (=改行削り) のように使わないで済むところまであえて使う必要はないです。

42 名前:12 投稿日:2000/10/21(土) 00:20
>ブチさん
疑問が解けました!!
なるほどー。改行のことをすっかり忘れていました。
丁寧に解説してくださって本当にありがとうございます。

43 名前:12 投稿日: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
こういう風にしたいです。


50 名前:44です 投稿日:2000/10/21(土) 06:42
44-48さん深夜にもかかわらず早速ご回答いただき
ありがとうございます。どの方の方法でもOKみたいです。
ずっと悩んでましたので、助かりました。
本当にありがとうございました。

51 名前:名無しさん 投稿日:2000/10/21(土) 07:42
できるだけ、実機と同じWebさばを立てて、そとから
アクセスするのが吉かと。
文字コードとか、エスケープシーケンスのからみもあるし。

>49
これは、HTMLの直埋め込みでいいんでわないかと。

52 名前:49 投稿日: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> "; }
------------------------------------------------------------

55 名前:49 投稿日: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
↑これを使ってチェックしてみるとか……。

58 名前:49 投稿日: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がお勧め。軽いし見やすい。

63 名前:61 投稿日:2000/10/22(日) 01:27
>62さん
おおー、有難うございます。
早速試してみます!!

64 名前:Tea 投稿日: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/

71 名前:japu 投稿日: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を設置したカレントディレクトリにある
ファイルとフォルダを判別するにはどうしたよいですか?


76 名前:japu 投稿日: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 演算子の項目を参照。

77 名前:69>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.


87 名前:81 投稿日:2000/10/24(火) 15:17
俺はシングルクオートと、ヒアドキュメントしか使わない。
qqは実は79で始めて知ったが、さほど優れた書式とも思えない。
ちなみにヒアドキュメント中の変数は{}で囲みまくってる。

88 名前:84>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に入れるとか、ツリーを構築して
そのままバイナリでファイルにしておくとかすればいいんじゃない?

95 名前:81 投稿日:2000/10/25(水) 02:19
不親切君です。

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

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



96 名前:名無しさん 投稿日:2000/10/25(水) 02:20
>>92
要SQLか?

97 名前:92>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

108 名前:105 投稿日:2000/10/25(水) 22:34
>>107
javascriptで

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

結果:
%u6587%u5B57

になります。
これをperlでしたいのですが、無理ですか?

109 名前:107 投稿日:2000/10/25(水) 22:41
それunicode…。
スクリプトが間違ってるんじゃなくて入れてる文字コードが違うの…。

110 名前:105 投稿日:2000/10/25(水) 22:52
>>107
じゃあどうしたらいいですか?

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

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

では出来ませんでした。
よろしくお願いします。

111 名前:105 投稿日:2000/10/25(水) 23:00
または、
perlで、"文字"を、"%u6587%u5B57"にすることは出来ませんか?

112 名前:105 投稿日: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


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



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

どっちにしろ目的によって unucode まで意識しなくていいんじゃないかな。
CGIとJavaScriptを連携させる(JavaScriptの出力をCGIに送るとか)なら
上のような面倒なことをしないといけないだろうけど暗号化も復号化もCGIでやるなら最初ので問題ないかと。
JavaScript でunicodeにエスケープされた Cookie を受け取る場合はややこしそうだ。

120 名前:107 投稿日: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
知らないことがざくざくでてくる…鬱だ…

126 名前:105 投稿日:2000/10/26(木) 17:49
皆さんいろいろありがとうございます。。

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

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



127 名前:名無しさん 投稿日:2000/10/27(金) 04:58
>ブラウザ別に
これがまた面倒だったり。

128 名前:119 投稿日: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の知識ゼロなの?

132 名前:130 投稿日: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; は
裸のワード扱いになる。


136 名前:105 投稿日:2000/10/27(金) 16:50
>CGIで吐き出したHTMLファイルでフォームへの代入
今これをやってるんですよね。。(^^;
はい、、

137 名前:名無しさん 投稿日:2000/10/28(土) 01:53
>>136
つーか、ここのHTMLソースみて3分で作れたが?

138 名前:105 投稿日:2000/10/28(土) 02:15
>>136
すいません。。。とっくに解決してるんですよね。。。
これが。。。

139 名前:名無しさん 投稿日:2000/10/28(土) 03:38
あげ

140 名前:japu 投稿日: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
「>」で始まる行だけ色を変えるんじゃだめってこと?

144 名前:141 投稿日: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から作ったディレクトリやファイルがありまして、それを今現在削除する事ができずに困っています。

どなたか良い方法ありましたらご享受お願いします。


152 名前:149 投稿日: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 じゃダメ?

156 名前:151 投稿日:2000/10/29(日) 00:24
>155
rootっていちユーザーがなれるものなんでしょうか?
無料のスペースなんですけど。


157 名前:名無しさん 投稿日:2000/10/29(日) 00:29
>151
その状況だと、もう管理者に頼むしかないんじゃ・・・
ていうか、nobody動作からowner動作に変わるときに
そのへんの危険性をユーザーに告知しなかった管理者が
そもそもいけない。だから堂々と要求すれ。

158 名前:151 投稿日: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

181 名前:180 投稿日: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 ぷぷっ

186 名前:160 投稿日:2000/11/07(火) 03:57
>161さん,162さん
お礼が遅くなってしまいましたが有り難う御座いました。
今後もサーバーに出来るだけ負荷をかけない様努力してきますです。

187 名前:名無しさん 投稿日:2000/11/07(火) 04:45
>178
ベンチ取った訳じゃないが・・・。
Dが一番早いはず。

188 名前:名無しさん 投稿日:2000/11/07(火) 05:04
#Aと#Bはどうだろう?

189 名前:178 投稿日:2000/11/07(火) 05:09
>187
ありがとうございます。
私もそんな気はしてたのですがやはりそうですか。
フリーで配布されてるスクリプトとか見ると
Aの方法が多い気がしたのでAが何かメリットとかあるのかと気になっていたもので。。。


190 名前:178 投稿日: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
俺は今のところハマってない。
どんな使い方したときにハマる?

193 名前:191 投稿日:2000/11/07(火) 06:37
BBSで、たしか「削除データは発言番号を""にする」とかいう設計で、
それに加えて「発言番号は0から始まる」形式のデータで、
当然ながら最初の書き込みは常に「削除されました」になっちゃう。
あのときは2日ぐらい悩んだ……遠い目。

194 名前:192 投稿日: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
ここにそれっぽいことが書いてあるんですがよくわかりません。。

198 名前:197 投稿日:2000/11/07(火) 14:38
上のリンクのやつまだわかってないんですがそれを使えばとりあえず出来ました。
やってから聞いた方が良かったですね、すいませんm<--&gt;m

199 名前:japu 投稿日: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 } };
というトリッキーな方法もあります。:-)

200 名前:178 投稿日: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ファイルが↑で、それを誰でも書き変えられるってこと?
追加書き込みでなくて。

216 名前:214 投稿日:2000/11/08(水) 09:05
はい txtファイルを上書きすると言う事です

217 名前:201,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
>>219
http://www.din.or.jp/%7Eohzaki/perl.htm#JP_Split

221 名前:japu 投稿日: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";

222 名前:219 投稿日:2000/11/08(水) 13:47
>>220-221
ありがとうございます!多分うまくいきそうです
過去ログろくに読まずに質問しちゃってすみませんでした・・・

223 名前:Rl 投稿日: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

224 名前:201,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

226 名前:Rl 投稿日: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 "十\月";
とかするんだな。

230 名前:228 投稿日: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
すいません。なってませんでした。
正しくしたら出来ました。
アドバイスありがとうございました。

236 名前:231とは別人の名無しさん 投稿日: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);
}

237 名前:231とは別人の名無しさんの続き 投稿日:2000/11/09(木) 18:03
234さんの言う通りディレクトリ(data3ディレクトリ)
のパーミッションも書き込み可にしてあるんですけど、
うまくいきません。どこか間違っているのでしょうか?

238 名前:>236 投稿日:2000/11/09(木) 23:28
追加書き込みでもファイルがなければ新規作成してくれますよ。
それと、追加書き込みならflock()しなくてもいいと思います。
後、これは個人的な趣味かもしれないけど
ファイル名はtime()の戻り値そのままの方がいいのでは?
で、後でlocaltime()とか。。

239 名前:238 投稿日: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 の継承はどうしてる?


247 名前:minima@無職寸前 投稿日:2000/11/11(土) 02:29
>>244-245さん
くだらんことかも知れませんが
s/Bad/\x00/g;
s/Good/Bad/g;
s/\x00/Good/g;
が若干速いようです。
コードの簡潔さを優先させるか,速度を優先させるかで
使い分ければいいのかな〜と思います。

248 名前:japu 投稿日: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(@_);
}

子クラスのオブジェクトのメソッドが呼ばれるよん。


251 名前:japu 投稿日:2000/11/11(土) 04:36
>>249
http://search.cpan.org/search?dist=TimeDate

CPANを活用しよう。


252 名前:201,203,217,224 投稿日:2000/11/11(土) 04:39
御礼が大変遅くなりました…
ありがとうございました!!解決してヨカッター!!

253 名前:名無しさん 投稿日:2000/11/11(土) 04:44
>>251
どうもです。
レンタルサーバーなので依存性が複雑なモジュールはインストールしたくないのですが、
このくらいならカレントにおくだけで大丈夫ですよね?
使ってみます。

254 名前:japu@majokko.com 投稿日:2000/11/11(土) 05:04
非標準モジュール使いたくなければ自前でパースしてTime::Local使え。
つか、そういう前提条件あるなら最初から書こうよ。

255 名前:名無しさん 投稿日:2000/11/11(土) 05:49
>>254
ごめんなさい。
でも、読んでみた感じでは標準モジュールにしか依存してないみたいですし、
カレントにおくだけで見本は動いたので大丈夫そうです。


256 名前:246>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だけなのだ。


257 名前:246 投稿日: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とか、デフォルトで(というのもおかしいか)
実装されてない?

260 名前:259 投稿日: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はどうやって判断しますですか?

263 名前:japu 投稿日: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
僕はスパスパ頭に入ります(笑)

266 名前:japu 投稿日: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コードを(?:...)でいれていますが
これはマッチしないんですね
(?=...)との違いがよくわかりません、、、

268 名前:japu 投稿日: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参照。


272 名前:259 投稿日:2000/11/12(日) 23:12
> localキーワードを使って宣言された変数は
> レキシカルスコープ、
> myキーワードを使って宣言された変数は
> ダイナミックスコープを持ちます。
すいません。これ、反対です。(笑)
うーん、なんで間違えたんだ。。

273 名前:名無しさん 投稿日:2000/11/13(月) 10:26
>>258

「localとmyの違い」を一番かんたんに言うと
「myはどんどん使いえ。localは、それが何をするのか
 理解するまでは使うな」となるのでわ?
tpjの昔の記事で「まずlocalのことは全部忘れろ」とか
書いてあるのもあったような。


274 名前:273 投稿日:2000/11/13(月) 10:27
↑s/使いえ/使え/。自明typoスマソ。

275 名前:いちろう 投稿日:2000/11/13(月) 13:21
>>269
何の意味もなし、お子茶間のおあそび、、、

276 名前:nanasisann 投稿日: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番あたりじゃないか?
「スクリプトは作った人間が販売してもよい」みたいに読めるが、
自信ないので、英語に強い人たすけて。

281 名前:278 投稿日:2000/11/14(火) 06:50
ふむ。そうだな。
俺も英語は強くないが、確かに問題ないようだ。
perl込で販売するもまたヨシ、と読める。


282 名前:278 投稿日: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
シェアウェアにしても問題ないんですね
ありがとうございました
しかし あの本は何だったんだろう、、、

284 名前:yuka.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のパスは管理者に聞いてね。

286 名前:yuka.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回ロック解除することになって
変な事になる可能性があるというのが定説らしいです。
(最近聞いた話なんですけど)

292 名前:289 投稿日:2000/11/15(水) 01:06
>>290
すいません 言われたとおり0755になっていて
chmodを使ったらうまく行きました
ありがとうございました


293 名前:289 投稿日: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 のが誤認しなくていいかもな。

300 名前:291 投稿日: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制作板の住人のほうが詳しいと思う)

310 名前:7cgi 投稿日: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>


311 名前:7cgi 投稿日:2000/11/15(水) 15:58
$count++ = <COUNT>; こんなことできないし、
print $count; これもおかしいね…スマソ。


312 名前:名無しさん 投稿日:2000/11/15(水) 16:17
>>309
やっぱムリか。ありがと。

>>310
なんのコードですか??


313 名前:dou? 投稿日: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);


314 名前:310>312 投稿日:2000/11/15(水) 22:07
疑似SSI。
自己満なので気にしないで〜 ( ´ー`)y~~


315 名前:むぎ茶 投稿日:2000/11/15(水) 22:17


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




316 名前:313 投稿日: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 ─┛~~ ┃
┃むぎ茶      ┃
┃mugicha@360.cc  ┃
┗━━━━━━━━━┛
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 名前:japu@majokko.com 投稿日: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>"にすればオーケーでしょう。

332 名前:323 投稿日: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しか使えない…
というふうに考えればいいんでしょうか?

338 名前:336 投稿日:2000/11/17(金) 23:01
>>337
WindowsだからSJISしか使えなくていいや〜、と割り切って
Win9x系のMS-DOSプロンプトは作られてるんでしょうね。

これがWin2000のコマンドプロンプトだと、SJIS以外に
Unicodeで出力しても読めるみたい。でもEUCはやっぱり化ける。

339 名前:336 投稿日:2000/11/17(金) 23:05
338の後半ちがってた。Win2000のtypeコマンドが
Unicode→SJISを変換して出力してくれるだけでした。

340 名前:337 投稿日: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 名前:japu@majokko.com 投稿日: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のエラーが読めると思う。

356 名前:353 投稿日: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;


360 名前:358 投稿日: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
アホだこいつ。
今からでも遅くないから人生リセットしろ。

362 名前:358 投稿日: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


365 名前:358 投稿日:2000/11/20(月) 20:16
・・・。なるほど。ハマっていたのでしょうか、わたしは。
人生リセットします。
ありがとうございました。

366 名前:名無しさん 投稿日:2000/11/20(月) 20:16
363は不愛想だけど親切さんと見た

367 名前:358 投稿日: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)){

372 名前:358 投稿日: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
行の長さが変わらなければできるけど、
一般には長さが変わるので難しい。


378 名前:376 投稿日: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とか使えば、わりと簡単そうではある。
ライブラリ探して時間を取るより自作するほうが早いかも。

383 名前:PPP 投稿日:2000/11/22(水) 10:57
evalって何をするんですか?
説明とか見てもperlのプログラムとみなして〜とか書いてあってさっぱり
わかりません。
具体的にはどんな動きするのか??とかevalってこんなもん!とか
教えていただけるとありがたいのですが、おねがいします。

384 名前:名無しさん 投稿日:2000/11/22(水) 13:49
perlからUNIXアカウントを自動作成するスクリプトを
作りたいのですが。
普通にコマンドラインから打つとパスワード2回要求されると
おもうのですが、
そういう場合はどうすればいいのでしょうか。
パスワードファイルはshadowファイルを使っています。

385 名前:japu 投稿日: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 ヘッダを吐いてくれればいいのですが
必ず吐いてもらえるものでもないようで、困ってます。


387 名前:386 投稿日: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は夢を見ているのです
そっとしておいてあげましょう

393 名前:390 投稿日: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
>スレとミスマッチなぐらいで

へ〜、スレとミスマッチでいいんだ(過剰藁


399 名前:390@キンチョール 投稿日:2000/11/24(金) 02:35
二週間に一回しか風呂に入らないチンカス童貞のオタさんたちこんばんは。

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

シューッ


400 名前:名無しさん 投稿日:2000/11/24(金) 02:39
390 からここまでの発言まとめて便所の落書きだ。
煽りなんか一々気にする方が悪い。
だからそんなもんをわざわざあげないように。

401 名前:386 投稿日: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
http://216.101.214.150/sg/cki/kogyaru/

411 名前:名無しさん 投稿日:2000/11/25(土) 08:26
>>409
画像フォーマットによって方法は異なるけど可能です。
それ以上はこの質問だけではなんとも。

412 名前:japu 投稿日:2000/11/25(土) 10:09
Image::Size を使う。
http://search.cpan.org/

413 名前:409 投稿日: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コマンドを実行さしてますね。

416 名前:414 投稿日: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のいずれか」の部分はどう書けばいいのか教えてください。

425 名前:7c 投稿日:2000/11/30(木) 01:06
%gene = (
'ほにゃ' => 1,
'はにゃ' => 1,
'ふにゃ' => 1,
'ぐにゃ' => 1,
);

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

あるいは

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

if( {map { $_, 1 } @gane}->{$nyan} )
とか。


426 名前:7c 投稿日:2000/11/30(木) 01:09
失礼。ganeでした。

427 名前:424 投稿日: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
新スレたてれば初心者スレッドで書け。

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




434 名前:428 投稿日: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 とかでもいいけど。

442 名前:475 投稿日:2000/12/03(日) 00:13
あれ?469の言う有効な要素の数だけ見たいのか?
それなら scalar(@data) でいいが、最大索引なら $#data でいい。
"" じゃなくて undef にしといたほうがよさそうだけど。

443 名前:FU-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 名前:japu@majokko.com 投稿日: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;

こんなんで良い?

459 名前:458 投稿日: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

最長一致とか最短一致とかいう誤解しやすい表現はやめようよ。


462 名前:460 投稿日: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に入れ込んじゃうってことですかね。

468 名前:466じゃないけど 投稿日:2000/12/08(金) 19:11
>そのCGIに入れ込んじゃうってことですかね。
そういう事です。何を入れたいのかわからないですが、例えば
掲示板にカウンタを入れたいなら、極端に言えばその掲示板
スクリプトの中にカウンタのスクリプトをぶち込んでしまうのです。
多少の改造は必要ですが、案外簡単にできますよ。

469 名前:sage 投稿日:2000/12/09(土) 07:04
それじゃなきゃ
`hoge.pl`

楽だし


470 名前:469 投稿日: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が付いたりします
これはソース見せてくれないと、おれにはわからんです。

474 名前:472 投稿日:2000/12/11(月) 01:59
>>473
あ、そっちのがいいすね。

475 名前:473>472 投稿日:2000/12/11(月) 02:00
>>474 番号逆でした。スンマソ

476 名前:471 投稿日: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に全部入ってるからあとで処理しても良い。


これで良いんじゃないかな?
動作未確認だけど。

480 名前:479 投稿日: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
激しく同意。わしもおんなじ境遇だ。
とほほでなくレスキューで覚えたが。

484 名前:479 投稿日: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みたいにいつまで〜も無駄を
繰り返すんだよな・・・。

488 名前:KENT 投稿日: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ワードを別ファイルで記述して
読みに逝かせる方法はございますですか?

499 名前:japu 投稿日:2000/12/15(金) 00:35
>>498
あります。

500 名前:名無しさん 投稿日:2000/12/15(金) 00:40
>495
めちゃくちゃよく分かった。さんきゅ。

501 名前:497 投稿日: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);

追加なんてどう?

514 名前:507 投稿日: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をプッシュしたのはぷれーんな書き方に近く
応用が効くからだ。(ソケットとか)



517 名前:511 投稿日: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
人のサーバで実験する馬鹿は死ね。

539 名前:531 投稿日: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();
してみる?
なんかエラーでてそう。

541 名前:531 投稿日:2000/12/19(火) 20:04
メールサーバの設定を変えて貰ったらヘッダーに
指定したものが付加されるようになりました。
どうやらPGの問題じゃ無かった様です。
でもひとつ不思議なのはReturn-Pathの指定をPGでしてるんですが
メールサーバ側が勝手に付けているものもあるらしく
Return-Pathが二つ付加されているんです。
?がいっぱいですがお手数かけました。
ありがとうございました。

542 名前:名無しさん 投稿日:2000/12/19(火) 21:00
>>541
Return-Path は自分で付けるものではなかった気が……。

543 名前:japu 投稿日: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 rena@tan.moemoe.example

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を外したんじゃなくて、明示的なロック解除を外しました。

548 名前:544 投稿日: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が偽の時点でおわりなの。

555 名前:554 投稿日:2000/12/20(水) 18:44
一行目の「and」は「条件B」だな。
スマソ

556 名前:554 投稿日:2000/12/20(水) 18:54
どっちにしても、その本は捨てたほうがいい。
若しくはちゃんと読め。

557 名前:初心者A 投稿日:2000/12/20(水) 19:05
すんません、Perl(てかCGI)でサーバーにファイル上げる方法教えてください。
どっかで配ってるソフトのここみりゃわかる、ってのでも構いません。

558 名前:初心者A 投稿日:2000/12/20(水) 19:12
すんません。どう考えても自分で検索した方が早いです。
ってか、もう見つけました。駄カキコして鬱です。
でも未来があるので逝きはしません。
あぼーん。

559 名前:552 投稿日: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

562 名前:mu 投稿日:2000/12/20(水) 20:10
┏━━━━━━━━━┓
┃('Д')y ─┛~~ ┃
┃落ちてマッセ   ┃
┃10cc     ┃
┗━━━━━━━━━┛
http://all.at/bit


563 名前:552(559) 投稿日:2000/12/20(水) 20:15
>560
やっぱりおかしいですよね。ちなみにその通りに書いてます。
買ったその日におかしいと思ったんです。返品なんて絶対無理だろうな〜・・・・。
とにかく、他のプログラミング未経験者用の参考書でも探しに行ってみます。
あ、それからありがとうございました。

564 名前:名無しさん 投稿日:2000/12/20(水) 20:18
>>562
ズレてまっせ

565 名前:552 投稿日:2000/12/20(水) 20:22
>561

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

です。自分はプログラミングとか未経験で、ざっと見た中で、
一番わかりやすそうに書いてあったんですが・・・・・。

566 名前:名無しさん 投稿日:2000/12/20(水) 23:37
webで修正とかされていないのかしら。
ほんの名前で検索すると...
Perlポケットリファレンスなんて腐るほど間違ってたよ。


567 名前:544 投稿日:2000/12/21(木) 00:07
>>551
+<を546さんのに加えたら動作しました
ありがとうございました

568 名前:名無しさん 投稿日:2000/12/21(木) 00:14
ログデータファイルを別のログデータファイルにコピーしたいのですが、
その際、カウント数の多い順に並べ替えたいのですがどうしたらいいでしょうか?

569 名前:名無しさん 投稿日:2000/12/21(木) 00:16
>カウント数の多い順に並べ替えたいのですがどうしたらいいでしょうか?
ソートしましょう。

570 名前:568 投稿日:2000/12/21(木) 00:32
>569 ども。
書籍でソートの使い方は簡単なモノしか載ってなく・・・。
どうやって、カウントの要素を見つけて判定するのかが判らないのです。

571 名前:名無しさん@ミドリ電気 投稿日:2000/12/21(木) 00:53
今オリジナルの掲示板作ってるんだけど、いろいろ質問があります。
t-cup風の書き連ね式掲示板です。

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

ちなみにsakuranet内です。(ワラ


572 名前:japu 投稿日: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メモでしょう。
排他処理(ロック)ものってるしね。
言うまでもないのでさげ

575 名前:568 投稿日: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];
}
で どうかな

577 名前:japu 投稿日: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
むぎ茶がいいわけしてら (藁

580 名前:568 投稿日: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 じゃなくて <=> にしてみそ

582 名前:japu 投稿日:2000/12/21(木) 17:07
あ、すまん。数字比較は <=> だね。

583 名前:568 投稿日:2000/12/21(木) 18:37
むぎ茶さん、japuさん、どもです。
いろいろ試したのですが、やっぱり、できないです。(:_;)
多い順に並び替えしたものを
別ファイルに保存したいのです。教えてください。

584 名前:むぎ茶 投稿日:2000/12/21(木) 18:47
なにが どう できない?

585 名前:むぎ茶 投稿日:2000/12/21(木) 18:47
>568
むぎ茶に さん つけんな

586 名前:japu 投稿日:2000/12/21(木) 19:11
まずはperlの勉強から。(1点)

587 名前:568 投稿日:2000/12/22(金) 01:19
japuさん、どもです。
う〜ん、初心者ですので、ココで質問させてもらいました。
ネバったのですが、うまくいかないです。データ格納されない。
ヒントだけでもお願いします。(:_;)
open(DATA,"$log"); 以下にそのままで置くだけで判定してくれる?
それともwhileで、一行づつ判定させるのでしょうか?
そではなく、まったく別の方法なのでしょうか?

588 名前:加藤茶 投稿日:2000/12/22(金) 10:13
加藤茶

589 名前:むぎ茶 投稿日:2000/12/22(金) 10:51
<> のところを <DATA>


590 名前:R-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 が見つからないってことになってる。
以上

592 名前:568 投稿日:2000/12/22(金) 16:08
むぎ茶さん、japuさん、どもです。
589<>で あっさりできました。ありがとうございました。

593 名前:むぎ茶 投稿日:2000/12/22(金) 16:18
だから むぎ茶に“さん”つけんなって。

594 名前:R-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 "    <font size=2>アイコン表\示</font>";
if ($FORM{'idsp'} eq 'on' ) { $dmy = "checked"; } else { $dmy = ""; }
print "<input type=checkbox name=idsp $dmy>\n";
}
print "  <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
これ前にスレたてた人?
前スレで言われたことはきちんとやったのかな…?


598 名前:Dest 投稿日: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
マ、マルチぃぃぃ………。

601 名前:R-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の値をもとに、行をソートさせたいのですが、
どうしたらいいのでしょう。よろしくお願いいたします。

603 名前:japu 投稿日: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 を見て。

604 名前:602 投稿日: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!

607 名前:japu 投稿日: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 は使いたくありません

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




609 名前:japu 投稿日:2000/12/25(月) 07:38
607:
無理。

610 名前:japu 投稿日:2000/12/25(月) 08:46
番号間違い。608ね。

611 名前:602 投稿日: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の設定が悪いって専鯖使ってるの?

614 名前:612 投稿日:2000/12/25(月) 10:37
すいません。説明不足だったようですね。
ブラウザではエラーは出ていませんが、例えばカウンターだったら、
『あなたは人目の訪問者です』
のような感じで、データファイルから値を取ってきません。
しかし、コマンドラインから実行すると、
#perl hoge.pl
1
、という風に値を表示します。
サーバーはLinuxをインストールしたマシンを、ローカルで使用しています(テストの為に)。

615 名前:( д) 投稿日:2000/12/25(月) 11:05
その hoge.cgiのパーミッションは合っているか?
hoge.cgiはどこのフォルダに入っているか?
Apacheのエラーログは何を出してるか?
ApacheのScriptAlias(でよかったかな…)は設定してるか?
こんなもんかなあ…

616 名前:612 投稿日: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を使った時にこれで失敗したから、これかと思うんだけど
どうだろう?

618 名前:612 投稿日: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を許可してないってオチはないよね?

623 名前:612 投稿日: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」で勉強中です。
他の人の質問より更に初心者なんですが、またお世話になるかと思いますが
よろしくお願いします。

627 名前:612 投稿日:2000/12/26(火) 09:46
ログ、見ました。
すると、No Such File or Directory とありました。
ファイルが無い?あるぞ!何がいけないのだ〜!?

628 名前:( д) 投稿日:2000/12/26(火) 10:07
SHTMLの記述がおかしいんじゃない。
どこのファイルがないってエラーが出た?

629 名前:612 投稿日: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さん、むぎ茶さん、
本当にどうもありがとうございました!


630 名前:612 投稿日:2000/12/26(火) 10:50
でも、何故動いたのか知りたいので、「教えてもいいよ」という方、教えて下さい・・・

631 名前:( д) 投稿日:2000/12/26(火) 11:37
httpd.confのServerName見てごらん。

632 名前:( д) 投稿日:2000/12/26(火) 11:46
でも何でDNがローカルで通るんだ…(鬱

633 名前:612 投稿日:2000/12/26(火) 12:03
httpd.confのServerNameは、"linux.hoge.co.jp" ってなってます。
でも、これでサーバーを指定しようとすると、ダメでした。
CGIじゃなく、ただのhtmlファイルも表示できませんでした。
DNが通った訳は、NTServerのWINSサーバーに登録しているからだと思います。

634 名前:( д) 投稿日:2000/12/26(火) 13:15
なんていうか…
♪ア・ ヒャ・ ヒャヒャヒャ〜 ♪
  (゚∀゚ )  (゚∀゚ )  (゚∀゚ )  (゚∀゚ )
 メ(   )> メ(   )> メ(   )> メ(   )>
   |(     |(    |(    |(
  ( ゚∀゚)  ( ゚∀゚)  ( ゚∀゚)   ( ゚∀゚)
  <(   )メ <(   )メ <(   )メ <(   )メ
    )|    )|    )|    )|

こんな感じ

635 名前:612 投稿日:2000/12/26(火) 13:33
>>634さん
その感じだと、かなりひどい構成って事ですか?

636 名前:( д) 投稿日:2000/12/26(火) 15:12
今度からはIPでサーバ指定してね。
WINSはNetBIOS名から
IPを引いてくるモノだったはずだから(壊れモード

637 名前:612 投稿日: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自体のパーミッションは?

641 名前:638 投稿日: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
どうやってコンパイルする気ですか。

645 名前:japu 投稿日:2000/12/27(水) 05:08
perlccだろ。

646 名前:名無しさん 投稿日:2000/12/27(水) 05:10
perlccって全然まともに使えなかったと思うが。

647 名前:638 投稿日:2000/12/27(水) 08:59
>>642さん
telnetでテストしても、エラーがでません。
きちんと意図した値が表示されます。

648 名前:my 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)


649 名前:638 投稿日: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はよくわからないのだ...

651 名前:638 投稿日: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だと
思ってるのが問題。

653 名前:638 投稿日: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上を自動巡回させるにはどうしたらいいのでしょうか?
分かる方がいましたら教えて下さい。


656 名前:638 投稿日:2000/12/27(水) 17:43
>>654さん
なるほど〜早速試してみます!

657 名前:638 投稿日:2000/12/27(水) 17:54
結果報告です。できました!変更した内容は、
1.imagesディレクトリをDocumentRoot側に移動
2.hoge.pl内の出力する"<img src=" に続く文字列をDocumentRoot側で通るパスに変更
以上です。
画像ファイルはScriptAlias側に置いてはいけないのですね。苦しみましたが勉強になりました。
それとも、shtmlファイルをScriptAlias側に置いていたのがまずかったのだろうか・・・
疑問はまだ多々ありますが、動作確認取れました。
( д)さん、私って役立たずさん、むぎ茶さん、654さん、プログラム板の方、
みなさんどうもありがとうございました!


658 名前:638 投稿日: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を叩けばいいのでは?

665 名前:664 投稿日: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(=↑?)
ありがとうございます。
勉強してきます。


672 名前:Dest 投稿日:2000/12/27(水) 23:13
だれか答えろ(w
http://tako.2ch.net/test/read.cgi?bbs=perl&key=977553926

673 名前:660 投稿日: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
スクリプトは大丈夫だと思う。
俺の環境ではちゃんと表示された。

675 名前:660 投稿日: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

オルブライト萌え〜

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

677 名前:Dest 投稿日:2000/12/28(木) 08:40
(・∀・) なんやとこら

678 名前:Dest 投稿日:2000/12/28(木) 08:56
質問に答えんかぃヴォケ

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

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



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

ちゃんと挨拶しろよな。土足禁止

680 名前:Dest 投稿日: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もこれに合わせているんでしょう。

682 名前:Dest 投稿日: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
ネタのつもりが失敗して煽られたから存在しない偽物のせいにした
どちらにしろ最初から気に入らないんだけど

689 名前:Dest 投稿日:2000/12/28(木) 22:56
たてたのは俺,本物だ.


690 名前:名無しさん 投稿日:2000/12/28(木) 23:06
>>689
そうか?それにしては変なタイトルだな。

>(・∀・) なんやとこら
これ、気に入ったぞ (w

691 名前:google なんですけどね 投稿日: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
ネタでしょう。

695 名前:691 投稿日:2000/12/29(金) 10:13
すんません、マジっす
ずっと前から疑問で

696 名前:名無しさん 投稿日:2000/12/29(金) 11:42
ほんっとーにマジ?「略語」+「intl」で調べてみれ。

697 名前:691 投稿日:2000/12/29(金) 21:24
ほんっとーにマジ、、というかハジというか

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

698 名前:hoge 投稿日: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);

701 名前:699 投稿日:2001/01/01(月) 06:58
>700
レスどうもです。

まだperl初心者なんでちょっとわからないんですが、
たとえば「20」という数値を16進法で表示したい場合、
どうすれば良いでしょう?

702 名前:700 投稿日: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;


703 名前:699 投稿日:2001/01/01(月) 09:44
                 _                         _
      へ.         /" "ヽ                      /" "ヽ  ,へ
   / /         ヽ,_,/    ,-ヽ           /ー.,   ヽ,_,/    \\
  / /                  ヽ ヽ           /  /            ヽ ヽ
 / /                    ヽ `―――――‐'  /             ヽ ヽ
 l l                     ヽ  ――――‐;  /                l l
||                      ヽ ヽ    / /                | |
||                        ヽ ヽ  ,/ /                    | |
 | |                        ヽ ヽ / /                   | |
 ヽ ヽ                        ヽ ' ,/                  / /
  ヽ.ヽ                        ヽ /                 ノ ノ
   \\                       `'                 //
     `"                                         `'
あーーーーーーーーーーーー
ひゃひゃひゃひゃひゃひゃひゃひゃひゃひゃひゃひゃひゃひゃ
ひゃひゃひゃごめんひゃひゃひゃひゃみんなひゃひゃひゃひゃひゃひゃひゃひゃ
ひゃ思いひゃひゃひゃついひゃひゃひゃと思うけどひゃ
ひゃひゃやっひゃーーーーーーーーひゃひゃひゃひゃ


704 名前:699 投稿日: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 壊しちゃいました;;


722 名前:japu 投稿日:2001/01/05(金) 10:18
DirectoryIndex
でも、ご自分では変更されないことをおすすめします。

723 名前:jaqu 投稿日: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
自分でスクリプト書き換えてからそうなったのか?
それなら元に戻せ。
それ以外なら業者に聞け。

728 名前:721 投稿日: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

731 名前:729 投稿日: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の方が簡単だよ。

735 名前:733 投稿日:2001/01/06(土) 10:12
LWPってどういうものなんでしょうか?
初心者な者で…

736 名前:734 投稿日: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のほうがいいかも.....

737 名前:733 投稿日:2001/01/06(土) 10:48
をを!ご回答ありがとうございます。早速試してみます。

738 名前:lallywall 投稿日: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
あとね、ロックの質問なんだけど、
ファイルをロックする前に別のダミーファイルにロックをかける方法ってどうなんでしょ?
やっぱりヘタレ処理ですか?


755 名前:753 投稿日: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、マシンで不都合がでてくるものなのでしょうか?

758 名前:757 投稿日: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 の下に置きたくない理由がわかると
他の解決策を提示できるかも。

763 名前:761 投稿日: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のに〜

767 名前:761 投稿日:2001/01/09(火) 17:54
>>(呼び捨ては、はばかりますので)むぎ茶氏
ありがとうございます。ファイルの拡張子に対する指定を行えばできるのですね。
具体的にはどうやってよいか、まだわかりませんが、webを検索して情報を少しづつ集めてみます。
本当にありがとうございました!

768 名前:名無しさん 投稿日:2001/01/09(火) 18:24
>>767
>webを検索して情報を少しづつ集めてみます。
心構えは宜しい。

769 名前:名無しさん 投稿日:2001/01/10(水) 01:27
すいません。ちょっと質問です。
外部から指定のURLのHTMLソースを読み込んでcgiに書き込む事は可能でしょうか?

770 名前:japu 投稿日: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ファイルのパスが違うんじゃないの?
因みに、誰のどのスクリプト?

780 名前:779 投稿日:2001/01/10(水) 09:24
>>778
うん、多分それ。

781 名前:名無しさん 投稿日:2001/01/10(水) 09:26
bbs.datが別ディレクトリにあるなら、
ディレクトリを777にしないといけないかも。

782 名前:datが開けない者 投稿日: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';

で良いかも。

784 名前:769 投稿日: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
あ、前の方をよく読んでなくて、敬称をつけちゃいました。
すみません>むぎ茶

793 名前:761 投稿日: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知りませんか?
色々試してみたんですけど動きません。

798 名前:761 投稿日: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を切り分けた方が保守しやすくて
いいと思うのですが、どうでしょうか?
いい方法をお持ちの方がいらっしゃれば教えて下さい。

802 名前:795 投稿日:2001/01/10(水) 16:10
>>むぎ茶

なるほど、なるほど。
勉強なりました、感謝です。

803 名前:名無しさん 投稿日:2001/01/10(水) 16:25
>801
Perlだけでは綺麗には行かない。保守のことを考えるなら
アプリケーションサーバーの導入を検討したほうがいいよ。

804 名前:japu 投稿日: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でストップさせ殺してます。

807 名前:806 投稿日: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
>801
HTML::Templeteについて
http://member.nifty.ne.jp/hippo2000/perltips/html/template.htm

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;

814 名前:812 投稿日: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 名前:AyuMoe@JAPU.ORG(japu) 投稿日:2001/01/11(木) 17:27
Perlのバージョンが5.004以降であれば最初のrand呼び出し時に自動的にsrandが実行されるので、不要と言えば不要。

ちなみに、切り上げはこんなのどうでしょ: int($x/50 + !!($x%50))*50

821 名前:AyuMoe@JAPU.ORG(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";

一応部分消したりしたりしていろいろ試してみましたが動きません
どなたか原因が分かる方お願いします。

824 名前:japu(AyuMoe@JAPU.ORG) 投稿日: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 じゃなくて、分かりやすい説明がでるぞ。

825 名前:823 投稿日:2001/01/12(金) 00:16
>>824
おおっ、動きました。ありがとうございます。
こういうのは#F5F5F5みたいにコードで指定した方がいいんでしょうか?
あとすみませんが
>use CGI::Carp qw[fatalsToBrowser];
は#!/usr/bin/perlの上に書けばいいですかね?

826 名前:japu(AyuMoe@japu.org) 投稿日:2001/01/12(金) 00:31
いや、その直下に書いてください。
先頭行はOSにperlで実行させることを教えるために必要なので。

色は、HTMLで規定される色以外は#xxxxxxの形式で指定するのが望ましい。
でも、出来ればスタイルシートでね。

827 名前:全然部外者 投稿日:2001/01/12(金) 02:06
>>826
>でも、出来ればスタイルシートでね。
どゆこと?BODYだと不都合あるの?

828 名前:japu(AyuMoe@japu.org) 投稿日: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"を実行してほしいのですが、何故か、ダウンロードを始めようとします。
一体どうしてなのでしょう?御存知の方、教えて下さい。

836 名前:ffffffffff 投稿日:2001/01/12(金) 15:57
>>835
.htaccessで設定

837 名前:835 投稿日: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
です。

838 名前:835 投稿日:2001/01/12(金) 16:27
access.confのAlowoverrideが "None" ってなっていました!
これが原因か、試してみます。結果をお楽しみに!

839 名前:835 投稿日:2001/01/12(金) 16:28
・・・ダメでした(鬱)

840 名前:835 投稿日: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 = test_from@hoge.com
$to = test_to@hoge.com
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("エラー");

847 名前:846 投稿日:2001/01/12(金) 20:59
つーか、よく見たら「To」がないぞ?

あと、Content-Typeはいらんと思うが・・・?
書くとしても「text/Plain;」じゃなく「text/plain」だろ?

848 名前:名無しさん 投稿日:2001/01/12(金) 21:04
NTサーバー+IIS4.0環境で
グラフィックアクセスカウンターを載せようと
SSIを使うと「CMD のオプションは
#EXEC の呼び出しに対して使用可能になっていません」
と表示されて困っています。どうしたらいいのでしょう?

849 名前:845 投稿日:2001/01/12(金) 21:15
>846さん

ご指摘ありがとうございます。
指摘された所を直して試してみます。

850 名前:845 投稿日:2001/01/12(金) 21:57
$mail = test_from@hoge.com
$from = test_to@hoge.com
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ガブス。

852 名前:ayumoe-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 = test_from@hoge.com って何よ。文字列になっていないし、セミコロン抜けている。
* die (エラー) もね。

(*)... content := "Content-Type" ":" type "/" subtype *(";" parameter)

853 名前:168 投稿日: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』を読んだとか?

860 名前:856 投稿日: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
ども。

866 名前:860 投稿日: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の使用方法教えてください。

870 名前:868 投稿日:2001/01/14(日) 19:04
jcode.plはちゃんとcgiが入ってるディレクトリに入れました


871 名前:japu(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;
----

872 名前:835 投稿日: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にこだわっているわけではないので、ほかのやり方でできる!
この方が簡単!って言う人がいたら教えてください!おねがいします。


874 名前:g 投稿日: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をどんな構造になってるか?って事なんですよ。
初心者なもんで、上手く質問できなくってすいません。


877 名前:g 投稿日: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);
}
}
}

と、まあ、合理的に繰り返してください。

878 名前:g 投稿日:2001/01/15(月) 14:53
上の!=は!~の間違い


879 名前:japu(AyuMoe@japu.org) 投稿日: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";
}
}

880 名前:868 投稿日: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です

883 名前:japu(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使えます。

886 名前:873 投稿日: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の有るところ';


896 名前:891-892 投稿日:2001/01/16(火) 19:33
>>893
うおーその通りでした!!
あんなにあったエラーが激減しました!!\(^-^)/
一日中はまっていたのです〜食事でもおごりたいぐらい感謝しています!
ところで、use strictの部分はDBIのサンプルそのまま書いていたの
ですが、これはどういう意味なのでしょうか?
ラクダ本を見てみると、パッケージとライブラリとモジュールがあり、
いずれもCのincludeのようなものに見えます。ライブラリとモジュールの
使い分けってあるのでしょうか?
よろしければ教えて下さい。

897 名前:894 投稿日:2001/01/16(火) 19:36
>>895
早速ありがとうございます。


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

と言うことは、任意の場所にJcode.pmを置いて
パス指定をすればよいだけなのでしょうか?

898 名前:893=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 はやめときまひょ



899 名前:893=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、或いは書籍をご存知でしたら何卒お願い致します。


903 名前:japu(AyuMoe@japu.org) 投稿日:2001/01/17(水) 01:20
http://www.kusastro.kyoto-u.ac.jp/~baba/wais/other-system.html
HPはこちら:-) http://www.hp.com/

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>) とかやるとファイルの内容を全部
読み込んでしまうのですが、他にする事あるのでしょうか?
わかる方ご教示よろしくお願いします。


910 名前:891-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と宣言しないと勝手にグローバルスコープになるから
気をつけてね!

923 名前:japuzeeeeee 投稿日:2001/01/17(水) 18:21
>>922

$0

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ってファイルに保存してやってみなさい、すぐわかるから。

926 名前:914 投稿日: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
俺は結構気に入ったぞ。

934 名前:909 投稿日: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とかね

940 名前:938 投稿日: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使えよ

943 名前:941 投稿日:2001/01/19(金) 11:58
myってCで言うとこのstaticじゃないの??汗
使い捨ての変数ならlocalだと思ってた・・・。
メモリの節約と、変数名がかぶらない為なんだけど・・。

>宣言しなくても問題ないスクリプトなら、それでいいんじゃない?
perlだとそんなもんなのか??(謎)


944 名前:nyori 投稿日: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");
のが混乱少ないと思うがどうか

947 名前:nyori 投稿日:2001/01/19(金) 12:25
むぎ茶さんありがとうございます!!
できました・・これを3日ぐらい調べてたんです。
感動です

またお願いします。


948 名前:>943 投稿日:2001/01/19(金) 12:25
Perl5ならlocalではなくmyを使う方が高速かつ安全

949 名前:941 投稿日:2001/01/19(金) 12:27
>>945
それ俺に言ってるの??汗
別にCも使えるけどperlの方が楽だからperl使ってるのに・・
Cの後にperl勉強したっていいじゃんかぁ。。

950 名前:nyori 投稿日:2001/01/19(金) 12:28
ちなみに
%form = &read_input('euc');
をつかってフォームから変数を受け取ろうとしたとき
必ずエラーがでるのはなぜですか。

ある解説サイトではフォームから受けるときはこれで
大丈夫と書いてあったのですが・・

951 名前:むぎ茶 投稿日:2001/01/19(金) 12:32
だから “さん”つけんなって(TT

952 名前:むぎ茶 投稿日:2001/01/19(金) 12:34
どんなエラーかもわからんのに答えられません

953 名前:nyori 投稿日: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.
ってでます。

今後の参考のために教えてください。


954 名前:941 投稿日: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.
だと思うけど

956 名前:japu(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.


957 名前:nyori 投稿日:2001/01/19(金) 13:04
ちょっと何のこと言っているのかちんぷんかんぷんです
すみません・・・

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

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

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



958 名前:名無しさん 投稿日:2001/01/19(金) 13:19
>>957
http://tako.2ch.net/test/read.cgi?bbs=perl&key=970166109&ls=50

#新スレ立てた方がよくない?

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'


969 名前:965 投稿日: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);
}
としているのですが、データファイルに書き込まれず、エラーになってしまいます。
どのようにしたら良いでしょうか?(エラーは内部サーバーの表示です)

970 名前:965 投稿日: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
が返って来ました。何も値を入力していないのに・・・・・(号泣)
皆さんごめんなさい、教えて下さい。

973 名前:965 投稿日: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 投稿日:2001/01/19(金) 17:59
 。        _   。      。
           // ̄\   。
         |/  ; イヽ ゜   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  〜  |\/### ≫l <   < と言うことで、【Perl】初心者コーナーPart3 へどうぞ
〜    |/\_____/     \_________________
                     
http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521






dat2html ver0.00 (2001/10/24)
2ちゃんねるは、ここのサーバを使ってるです。。。