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

【Perl】 初心者コーナー

1 名前:名無しさん 投稿日:2000/05/02(火) 04:23
とにかく、初めて来た方、初心者は、このスレッドから
始めよう。。。

いらっしや〜〜〜い。(三日以内には、レス付くと思うよ、誰かから)
過去ログ全部とは言わないが、このスレッド一回は、全部読んでから書きこんでネ。

2 名前:Perl見習い 投稿日:2000/05/02(火) 07:48
Perlの板ができたことを契機にこれからPerlを独学してみようかと思います。

3 名前:CGI童貞 投稿日:2000/05/02(火) 16:46
先日意を決してCGIというものに手をだしてみました。
レスキューとかKENTWEBとかをたよりに何とかアップすることに成功し、
勿論出来合いのものですが、とりあえずアクセス解析のプログラム
をつけてみようと試みました。
パーミッションの設定もしっかりやり、.htaccessも何とかうまくいき
いざ、起動してみたころどうにかうまくいったみたいです。
ただ、しかし時刻の設定が、海外のサーバーだけに日本の時間になっていないのが
難点で、この修正方法がどこかに載っていたのは見たことがあったのですが、
どうしても現時点で自力で解決出来ないのです。
全部でなくていいので、ここを見れば書いてあるぜとか、ここをこうしてみろ
っていう有り難いご意見を伺えれば幸いです。どうか宜しくお願いします。
ちなみに使ったプログラムは、
http://www.rescue.ne.jp/cgi-rescue/cgi?analyze
ログアナライザというやつです。


4 名前:3 投稿日:2000/05/02(火) 18:52
ホームページ板のほうで教えてくださった人がいて解決できました。
お騒がせしました。

5 名前:Cも初心者だけど 投稿日:2000/05/16(火) 23:27
Cと違ってPerl独特の表現?がわかりにくいです。
他人のスクリプト読むのが難しいです。
慣れですか?Cと一番違う表現って何なんでしょう?

6 名前:ぴょん基地 投稿日:2000/05/17(水) 16:32
正規表現

7 名前:名無しさん 投稿日:2000/05/18(木) 06:24
文字列の比較

8 名前:名無しさん 投稿日:2000/05/18(木) 07:02
Perl初心者が参考にできる(初心者でも読みやすい)
スクリプト置いてある所教えてください。

9 名前:ひっぱりあげ 投稿日:2000/06/19(月) 17:07
ちょっと新しいスレはなんなので・・・
.$a. って表記の「.」ってなんの意味があるのですか
誰か暇な人教えて〜


10 名前:名無しさん 投稿日:2000/06/19(月) 17:23
文字列連結演算子。左辺と右辺の文字列を連結する。
$a = "omae";
$b = "mona-";
$c = $a . $b;
print $c; # omaemona- と出力される。
まあ、この例なら
print "omae", "mona-";
の方が自然だが。

11 名前:名無しさん 投稿日:2000/06/19(月) 18:42
Perlマニアは逆にC風の書き方を嫌う・・・

12 名前:9 投稿日:2000/06/19(月) 19:17
"action=normal&hoge1=.$hoge1.&hoge2=.$hoge2.&hoge3=.$hoge3"
ってのがあったから聞いたんですけど
これで$hoge3の後ろとnormalの前後にはつかない
ってのがよく分かりました。ありがとうございます
ところで$c = $a $b;って書くのはダメなの??
んーーー???

13 名前:9 投稿日:2000/06/19(月) 19:18
あ、だめやん
printと勘違い
さげー

14 名前:名無しさん 投稿日:2000/06/19(月) 20:55
まったくの初心者(Cも知らない)でも分かる本ないですか?
初心者向けっていっても本当の初心者には分からない事ばかりです。

15 名前:改造くん 投稿日:2000/06/19(月) 23:21
「Perlで作るCGI入門」はどう?
http://www.hyuki.com/


16 名前:名無しさん 投稿日:2000/06/20(火) 17:16
print と echo のの違いがいまいちわかりません。

17 名前:名無しさん 投稿日:2000/06/20(火) 17:31
Perl に echo はありませんが。


18 名前:名無しさん 投稿日:2000/06/20(火) 18:19
「?0秒たったよー」ってなのを
一定時間ごとに出させようとおもい、
----time.pl
#!/usr/bin/perl
print "Content-type: text/html\n\n";
foreach $time(10,20,30,40,50){
print<<"EOF";
<html><head><title>時間</title></head>
<body>
$time秒たったよー
</body></html>
EOF
sleep(10);}
exit;
--------
これでは全然うまくいきませんでした
ある段階で一度全部出力させてってのは
どう書けば良いのですか?
あと、特に時間に正確にこだわるわけでは
ないです


19 名前: 投稿日:2000/06/20(火) 20:45
CGIとJavaアプレット間でデータの送受をしたいのですが、
やり方がわからず悩んでいます。
わかる方よろしくおねがいします
http://saki.2ch.net/test/read.cgi?bbs=prog&key=961501426&ls=50


20 名前: 投稿日:2000/06/20(火) 20:46
>18
違ってたらごめんなさい
$|=1; を指定するとか?
あと、</body></html>で閉じちゃうとだめのような気が

21 名前:名無しさん 投稿日:2000/06/20(火) 21:11
>18
そういうのは良くない、というのはさておき、CGIにやらせるのは無理です。
1回のりクエストに対して1つの返答を表示して終了、という機構なので。

おとなしく JavaScript を使うか(サーバと、接続時間を考えるとこれが一番妥当)、
出力される html に
<meta http-equiv="Refresh" content="10;url=(CGIのURL)">
を入れるか、でしょうね。

アプレットでもできるかもしりませんが私は経験ないので知らず…。


22 名前:名無しさん 投稿日:2000/06/20(火) 21:34
>18
できるよ。普通やんないけど。

$| = 1;
$uniq = "((($$ 他と重複しない文字列 $^T)))";
print "Content-Type: multipart/mixed; boundary=$uniq\n\n";
foreach $time(10,20,30,40,50) {
print "--$uniq\n";
print "Content-type: text/html\n\n";
print "<html><head><title>時間</title></head><body>\n";
print "$time秒たったよー\n";
print "</body></html>\n";
sleep(10);
}
print "--$uniq--\n";


23 名前:18 投稿日:2000/06/20(火) 22:33
>20、21、22
さんくすー
$| = 1; これ初めてみました
調べてみます

24 名前:名無しさん 投稿日:2000/06/21(水) 04:33
sleep(10); で何回も回したら http のリクエストで
ブラウザがタイムアウトにならないんですか?


25 名前:名無しさん 投稿日:2000/07/01(土) 01:11
age

26 名前:お悩み相談者 投稿日:2000/07/01(土) 01:55
SQLでDBからレコードを抽出します。
「ID,時間,その他情報」を時間(昇順)で取ってきます。
----------------------
ID00,01:00,情報A,情報B
ID11,02:00,情報C,情報D
ID33,02:00,情報E,情報F
----------------------
その中で、一番古い時間(01:00,02:00...とかだったら01:00)のレコードを出力したいです。
もちろん、抽出されるIDも時間も情報は、毎回違います。
僕は、どうしたらイイでしょうか?

27 名前:名無しさん 投稿日:2000/07/01(土) 03:10
抽出データって配列なんかにセットしてるんじゃないの?
もういっかいsqlなげたら?
select * from table_name order by time desc;
とか


28 名前:japu 投稿日:2000/07/01(土) 03:18
SELECT *
FROM moe m
WHERE m.foo < ALL (SELECT foo FROM moe n WHERE m.foo <> n.foo);

SQL はあまり得意ではないので、もっと良い方法があるのかもしれないけど。
(foo = 時刻情報)

29 名前:お悩み相談者 投稿日:2000/07/01(土) 04:08
最初にDBからガポっと必要な情報を取ってきます。
3つのテーブルから取って、WHERE条件を5つぐらい並べて、時間と他1つフィールドを昇順で並べてる。
更に、そこからフラグを見て、情報を2つに割ってます。で、更に古い時間のレコードのみ出力。
現時点でのソースは↓こんな感じです。(SQL文は長いので省略)

$dbh = DBI->connect ($dbname, $dbuser, $dbpass, $dbd);
$cur = $dbh->prepare($SQL);
$cur->execute();
 die "Prepare error: $DBI::err .... $DBI::errstr" if $DBI::err;
while (($ID, $TIME, $DATA, $Flag) = $cur->fetchrow) {
 if ($Flag == 0) {
  print "$ID, $TIME, $DATA";
 }
 elsif ($Flag == 1) {
  print "$ID, $TIME, $DATA";
 }
}
$cur->finish();

30 名前:お悩み相談者 投稿日:2000/07/01(土) 04:14
言い忘れました。1つの情報を2つに割ることで、1番古い時間のレコードは
2行になります。従って、この2行のみを出力しなくてはなりません。
場合によっては、3行になるかもしれないし、4行になるかもしれません。

31 名前:名無しさん 投稿日:2000/07/02(日) 04:19
ちょっと聞きたいんですが、
正規表現で、oオプションするとパターン展開が
一回しか行われなくなり高速になりますが、
その際、mod_perlだと動作がおかしくなります。
(前のパターンが残る)
たぶん、展開したパターンの結果がなんかの
特殊グローバル($^Tとか)に保持されてると思うんですけど、
どうやって初期化するべきでしょう?

32 名前:>26 投稿日:2000/07/02(日) 07:24
つうか SQL をみんな知らんのか?。Perl より全然簡単だぞ。手続きじゃなくて
集合演算だから勝手が違うだけで。

で、SQL サーバーには何を使っている?> 26
実装にもよるが、あるテーブル中にある全データの中から、タイムスタンプが
一番古いレコードを選択するだけなら、

SELECT id, time, data FROM your_table WHERE time =
(SELECT MIN(time) FROM your_table);

で OK だろ?。sub select(括弧 () の中にクエリーを書いて、抽出された
レコードをクエリーの対象や条件として用いること)が実装されてないなら、
$dbh = DBI->connect ($dbname, $dbuser, $dbpass, $dbd);
$cur = $dbh->prepare("SELECT MIN(time) FROM your_table");
$cur->execute();
$mintime = $cur->fetchrow;
$cur2 = $dbh->prepare("SELECT id,time,date FROM your_table WHERE time = ?");
$cur2 = execute($mintime);
という風に、2回に分けてクエリーを実行せよ。
# perl 初心者なんで上のコードが間違っていたらごめんな。

データはデリミタで区切ってあるんだろ?。こんな風に "data1,data2,date3..."
だったら split 使えばいいじゃん。


33 名前:31 投稿日:2000/07/03(月) 14:42
あげとくよ?

34 名前:31 投稿日:2000/07/04(火) 16:13
まだ?


35 名前:31 投稿日:2000/07/04(火) 20:05
早く答えろや!!こらぁ!!
もうさげ。
つーか、この板もう駄目だ。

36 名前:お悩み相談者 投稿日:2000/07/05(水) 03:03
おかげさまで、できました。
最初に時間を取ってきて、それを条件にして情報を取りました。
SQLを2回投げればヨカッタのですね。


37 名前:名無しさん 投稿日:2000/07/05(水) 03:50
>31
質問するときは自分でスレッドを立てて質問しなさい。そうしないと
この板が寂れます。スレッドを立てると活気付きます。
そもそもこんなスレッドに書き込んでも質問しているかどうか他の
人には気づきにくいので無視されても文句は言えません。

-----------------------完------------------------

38 名前:名無しさん 投稿日:2000/07/05(水) 09:54
人がたくさんいるページだと無闇にスレッド立てると怒られるけどね。
ここは人がいないから少しぐらい立てすぎる方がいいのかな?

39 名前:>35(=31) 投稿日:2000/07/05(水) 12:48
ダメなのはあなたの頭である事が無事判明致しました

40 名前:名無しさん 投稿日:2000/07/05(水) 15:53
SQL ってなに?
うんこ?


41 名前:初心者です。。 投稿日:2000/07/05(水) 17:06
>40
尊敬します。
そういうの。

42 名前:名無しさん 投稿日:2000/07/08(土) 17:04
この内容で初心者ですか・・・僕の先が思いやられます。
ちなみに、みなさんはシンプルな掲示板のスクリプトを理解するのにどのくらい
かかるのでしょうか。宜しければお聞かせ下さい。


43 名前:>42 投稿日:2000/07/09(日) 00:33
すぐ

44 名前:>42 投稿日:2000/07/09(日) 00:52
スクリプトの美しさに因る

45 名前:42 投稿日:2000/07/09(日) 01:06
>43
すぐとおっしゃいますと、どのくらいでしょうか。
因みに僕の場合Perlの本を読み始めて1週間になるのですが、簡単なスクリプトでもちんぷんかんぷんです。
やはり、これでは遅過ぎるでしょうか。まだ本を読み終わってないせいもあるのですが。
>43
例えばYY-BOARDのスクリプトを理解するのにどのくらいかかりましたでしょうか。


それから、「かかるのでしょうか」ではなく「かかったのでしょうか」の方が適切でした。
すみません。つまり、超初心者の時といいますか・・・。



46 名前:43 投稿日:2000/07/09(日) 01:36
解説書に載ってるようなモンなら、解説読みながらあそんでたら
自然と理解できたもんだが・・・・。

YY-BOARDはソース見たこと無いです。

個人差ですから、諦めずがんばりましょう。

47 名前:初心者 投稿日:2000/07/13(木) 07:28
はじめまして。
サーバにおいてあるテキストファイルを、一行一行printで表示
させると、「鉄鋼」という字が「鉄香e」みたいに化けてしまいます。
文字コードの関係かと思い、jcode.plをインクルード(でいいですか?)
させて、sjis2eucで保存、euc2sjisで展開させて、printで表示させても
結果は同じでした。結局、printの時にシフトJISを表示させてはいけない
ようなんですが・・・これをなんとか回避する方法はありませんでしょうか。
任意に\を入れて直す、という方法はとれないので(テキストの中身が
常に変わるため)、御教授宜しくお願い致します。


48 名前:>47 投稿日:2000/07/13(木) 07:35
jperl を使う

49 名前:名無しさん 投稿日:2000/07/13(木) 07:44
途中で変な処理かましてるんじゃないの?
ふつうにファイル読んでメタ文字解釈されることはないと思うけど?

50 名前:初心者 投稿日:2000/07/13(木) 08:22
>48&49
 お答えくださりありがとうございます。
 jperlはインクルードファイル(?)ですか?
 49さん、特に変な処理はしていないと思うんですが、perlは
 全然自信がないので、ひょっとしたらしているかもしれません。
 今手元にソースがないので、後で書かせていただきます。


51 名前:名無しさん 投稿日:2000/07/13(木) 08:30
>50
> jperlはインクルードファイル(?)ですか?
いや、言うなれば「perl日本語版」みたいなものです。

52 名前:初心者 投稿日:2000/07/13(木) 11:37
ソースは下のような感じです。


open(REC,">>$id");
print REC "「鉄鋼」の字が化けるテスト\n";
print REC "なんで化けるのぉ?!\n";
close(REC);

open(HTML,"$exhtml");
@lines = <HTML>;
close(HTML);


print 'Content-type: text/html; charset=Shift-jis \n\n';

foreach $line (@lines)
{
    $line =~ s/[\r|\n|\r\n]//g;
    print $line;
    print "\r\n";
}

質問ばかりで大変恐縮ですが、どうか宜しくお願い致します。


>51
 なるほど、日本語版Perlというものがあるのですね。
 残念ながら、レンタルサーバに依存してしまうので、こちらでは
 選択肢がないのです。情報ありがとうございました。

53 名前:初心者 投稿日:2000/07/13(木) 11:38
げっ、ソース間違えてました(^^;;;
こちらです。

open(REC,">test.txt");
print REC "「鉄鋼」の字が化けるテスト\n";
print REC "なんで化けるのぉ?!\n";
close(REC);

open(HTML,"test.txt");
@lines = <HTML>;
close(HTML);


print 'Content-type: text/html; charset=Shift-jis \n\n';

foreach $line (@lines)
{
    $line =~ s/[\r|\n|\r\n]//g;
    print $line;
    print "\r\n";
}

54 名前:初心者 投稿日:2000/07/13(木) 11:39
たびたびすいません・・・あれれ?
ええっと、オープンさせてるところがバケちゃってますね(^^;;
@lines = <HTML>
です。

スレ汚してすいません・・・


55 名前:japu 投稿日:2000/07/13(木) 11:57
まず、根本的な間違いから。

> print 'Content-type: text/html; charset=Shift-jis \n\n';

1. '...' (または q/.../) では「\\¥、「\'」以外の処理は行われないので改
行が出力されません。(変数展開も行われない。)

2. Shift-jis は不正な指定です。Shift_JIS が正しい。(ハイフンではなくて、
アンダーバー) なお、7ビットJISはISO-2022-JP、日本語EUCはEUC-JPとなる。

3. 文字化けの理由は分からないけど不正な文字セットを指定しているので、ブ
ラウザが発狂している、に3000点。

----
次に改善した法が良い点を。

> @lines = <HTML>;

とするのは非効率です。
while(<HTML>) {
...;
}
としましょう。(今回の場合はほとんど違いは出ませんが。)


56 名前:初心者 投稿日:2000/07/13(木) 12:50
ご丁寧な指摘をしていただき、本当にありがとうございます!
早速試してみましたが・・・ブラウザベースだとうまくいきました。
が、VBのopenURLで取得すると、やはり文字化けしてしまいました。

結果はこんな感じです。

【元のテキスト】
硬めの鉄鋼テスト。鉄鋼鉄鋼鉄鋼鉄鋼鉄鋼鉄鋼鉄鋼鉄鋼鉄鋼鉄鋼鉄鋼鉄鋼鉄鋼鉄

【CGIを通して呼び出したテキスト】
硬めの鉄鴻eスト。鉄酷S酷S酷S酷S酷S酷S酷S酷S酷S酷S酷S酷S酷S・


「てっこう」と読めなくないですが、これでは「テスト」が「スト」
になってしまいますので・・・しかも、鉄鋼を繰り返すと、鉄のあとに
「酷S」という怪しい文章に・・・
もうどうしたらよいものか・・・それこそ酷な状況です。
何度もすいません。どうか宜しくお願い致します。


57 名前:japu 投稿日:2000/07/13(木) 16:03
それは単にVBで作ったプログラム(?)が悪いのでは?

58 名前:名無しさん 投稿日:2000/07/13(木) 18:13
$line =~ s/[\r|\n|\r\n]//g;

$line =~ s/\r|\n|\r\n//g;


59 名前:名無しさん 投稿日:2000/07/13(木) 20:48
print REC "「鉄鋼」の字が化けるテスト\n";
print REC "なんで化けるのぉ?!\n";

print REC '「鉄鋼」の字が化けるテスト',"\n";
print REC 'なんで化けるのぉ?!',"\n";
を試してみて♪

60 名前:初心者 投稿日:2000/07/13(木) 21:06
>57、58、59

 レスありがとうございます!
 VBのプログラムが悪いのかと思い、改めてブラウザからCGIを
 呼び出してみたところ・・・化けてしまいました。
 記録してあるファイル自体が悪いのかもしれないと思ってチェック
 してみたら、そちらは大丈夫でした。
 改行コードの除去は[]がいらないのですね。ありがとうございます。
 59さん、早速いまから試してみます!

 2ちゃんねるの他の板やスレでは、こんなに親切にしてもらったこと
 ないだけに、感激ひとしおです。本当に嬉しいなぁ。


61 名前:初心者 投稿日:2000/07/13(木) 21:53
その後・・・お陰さまで解決しました!
なんと、原因は改行コードの取り除きかたにありました。

$line =~ s/\r|\n|\r\n//g; を、
$line =~ s/\n//g; に変えたら治ってしまいました(^^;;

うーん、でもどうして、 CR LF CR+LF の全部を取り除くって
やると化けるのか未だに不思議です。
S-JISにこれらのコードが重複しているのでしょうか?!
(そんなはずないですよねぇ??)
しかし、昨日からずっと悩んでいただけに、解決して本当にホッと
しています。
皆様、ありがとうございました!(^O^)


62 名前:japu 投稿日:2000/07/13(木) 22:32
あ、見逃していた。正規表現中で s/[\r|\n|\r\n]//g; としたら、CR, LF, 「|」を削除しちゃうからなぁ。(文字クラスの内部ではほとんどの文字はメタ性を失う) てなわけで、tr/\r\n//d; としましょう。

(蛇足)
"「鉄鋼」の字が化けるテスト" は Shift_JIS では
0000000 201 u 223 S 215 | 201 v 202 314 216 232 202 252 211 273
0000020 202 257 202 351 203 e 203 X 203 g
で、「|」を含んでいるので。


63 名前:名無しさん 投稿日:2000/07/13(木) 22:36
リロードするのが面倒で、スレッドに新しい書きこみがあったら
表示するのを作っているのですが、perlの作法がいまいち判りません。
下のような書き方でいいのでしょうか?

$server='mentai.2ch.net';
$board='mona';
$thread='960867157';

$cpath='/home/yamasaks/2ch_cnt';
$cntfile="${board}-${thread}.cnt";
$logfile="${board}-${thread}.log";
$waitcnt=120;

$wget_addr="'http\:\/\/${server}\/test\/read.cgi\?bbs\=${board}\&key\=${thread}\&ls\=2'";
$wget_file="read.cgi\?bbs\=${board}\&key\=${thread}\&ls\=2";

while(True){
print "check!\n";
$|=1;
`wget --output-file=wget.log ${wget_addr}`;
rename($wget_file,$logfile);

open(INFILE,$logfile) || die "log-file open error\n";
while(<INFILE>){last if(/^.title./);}
/^.title.(.*)/;
$title=$1;
while(<INFILE>){last if(/^.dt./);}
$_=<INFILE>;
close INFILE;
($cnt,$author,$time,$res)=/^.dt.(\d+) .*\<font.*\<b\> (.*) \<\/b\><\/font\> (.*)\<br\>\<dd\>(.*)\<br\>\<br\>\<br\>/;
$oldcnt=`cat ${cpath}/$cntfile`;
if($cnt>$oldcnt){
`echo ${cnt}>${cpath}/$cntfile`;
print "New message No.[ ".$title." :".$cnt." ]\n";
print " [ ".$author." ]";
print " ".$time."\n";
        $res=~s/\&gt;/>/;
        $res=~s/\&lt;/</;
        $res=~s/\&amp;/&/;
$res=~s/\s*\<br\>\s*/\n/g;
print $res."\n";
}
sleep $waitcnt;
}

64 名前:初心者 投稿日:2000/07/13(木) 22:40
>62japuさん

 なるほど、そういうことだったんですね。
 S_JISのコードまで書いてくださるなんて、本当に御親切にありがとう
 ございました(^O^)

 見た目だと、s/[\r|\n|\r\n]//g; なら、CRLFをとってくれそうに
 見えるんですけど、こういう場合の「2文字(?)」を取り除くって
 いうやり方はダメなんですか?

 しかし、クラス内部でメタ性を失うのって、昔チックでいいですね。
 かつての某パソ通みたいに、全角に対してBSキーを押したら、奇妙な
 消え方をするのを思い出しました。


65 名前:名無しさん 投稿日:2000/07/14(金) 19:50
s/[\r|\n|\r\n]//g;

は 「\r と | と \n と \r\n を ヌル文字列に置きかえる」

「\r と \n と \r\n を ヌル文字列に置きかえる」なら
s/[\r\n]//;

でも perl メモには
s/\r//;
s/\n//;
s/\r\n/;
のほうが速いとかいてあったぞ♪

66 名前:japu 投稿日:2000/07/14(金) 23:48
(FYI)「削除する」だけなら、tr/\r\n//d; が一番高速だと思う...

#! /usr/local/bin/perl

use Benchmark;

$CRLF = "\r\n";

timethese(100000, {s0 => q{ $_ = $CRLF; s/[\r\n]//g },
         s1 => q{ $_ = $CRLF; s/\r//; s/\n// },
         tr => q{ $_ = $CRLF; tr/\r\n//d }} );

__END__

Benchmark: timing 100000 iterations of s0, s1, tr...
s0: 8 wallclock secs ( 4.35 usr + 0.00 sys = 4.35 CPU)
s1: 7 wallclock secs ( 5.22 usr + 0.02 sys = 5.24 CPU)
tr: 4 wallclock secs ( 3.03 usr + 0.01 sys = 3.04 CPU)

うぐぅ。マシンパワーが...

67 名前:名無しさん 投稿日:2000/07/15(土) 00:56
IPでアクセス制限をしたいのですが・・・。
方法がわかりません
ご指導をおねがいします。

68 名前:名無しさん 投稿日:2000/07/15(土) 01:24
exit if ($ENV{'REMOTE_ADDR'} =~ m/$ip_list/);


69 名前:名無しさん 投稿日:2000/07/15(土) 01:49
IPはどこに書き込むのでしょう・・・。
あと、どこに記述すれば?
もうしわけないのですが
よろしくおねがいします。

70 名前:初心者 投稿日:2000/07/15(土) 02:49
すみません。質問させてください。
"Abcdef"と言う文字列があって、これを
"ABCDEF"と言う風に、小文字のアルファベットを全部大文字に変換する方法があれば教えてください

71 名前:>70 投稿日:2000/07/15(土) 02:51
tr/a-z/A-Z/

72 名前:70 投稿日:2000/07/15(土) 02:58
>71
2分後とは早いですね。
どうも、ありがとうございました。


73 名前:japu 投稿日:2000/07/15(土) 04:19
別解
$var = "Sakura Moe";
$uvar = uc $var;
print "$var\n$uvar\n";
この方法だと、ロカール情報まで考慮されて高速に処理されるはず。

74 名前:japu 投稿日:2000/07/15(土) 11:02
一応、やってみました。

#! /usr/local/bin/perl -w

use Benchmark;
$STR = "Sakura-chan Moe";
timethese(100000, {tr => q{ $x = $STR; $x =~ tr/a-z/A-Z/ },
         uc => q{ $x = uc $STR }} );

__END__

Benchmark: timing 100000 iterations of tr, uc...
tr: 12 wallclock secs ( 9.19 usr + 0.02 sys = 9.21 CPU)
uc: 2 wallclock secs ( 0.83 usr + -0.01 sys = 0.82 CPU)

75 名前:>74 投稿日:2000/07/15(土) 15:48
ucって聞いた事ないっす。
変数に高速にアクセスできるようになるんですか?

76 名前:monalove 投稿日:2000/07/15(土) 16:02
手元のFreeBSDだと、ほとんど違いがありません。
japuさんの試されたperlはHAS_SETLOCALEではないのでしょうか?

tr: 1 wallclock secs ( 1.38 usr + 0.00 sys = 1.38 CPU)
uc: 1 wallclock secs ( 0.98 usr + 0.02 sys = 0.99 CPU)


77 名前:>75 投稿日:2000/07/15(土) 16:05
man perlfuncすると載っています。
要はC言語のtoupper()です。

78 名前:75 投稿日:2000/07/15(土) 18:49
なんだ、、、大文字にするだけの関数か、、

79 名前:名無しさん 投稿日:2000/07/15(土) 23:37
別海
$str = "Fuckin Sakura";
print "\U$str\E";#この場合\Eは要らないけど、いちおー

80 名前:70 投稿日:2000/07/16(日) 01:42
次の日になってびっくり。
いろんな方々がさまざまな別解を考えてくださいまして、
感謝感謝です。

あと
>tr: 1 wallclock secs ( 1.38 usr + 0.00 sys = 1.38 CPU)
>uc: 1 wallclock secs ( 0.98 usr + 0.02 sys = 0.99 CPU)
のような測定ができることも初めて知りました。
個人的にしてみたいので、調べてみます。

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

81 名前:japu 投稿日:2000/07/16(日) 02:33
ある程度高速なマシンだとほとんど差が出ないようですね。(うちのパソコン、
ボロいもんで。)

ロカールに関しては、「考慮されることもある」程度の意味です。場合によっ
ては "a" に "'" が付いた文字が "A" に "'" が付いた文字に変換されること
が期待できそうってことで。日本語を処理する場合に関しては tr/a-z/A-Z/
と変わらないでしょうけど。


82 名前:名無しさん 投稿日:2000/07/20(木) 19:52
カール板が動かないんですけど,,,
何回やっても駄目なんです。
どうしたらいいですか?

83 名前:japu 投稿日:2000/07/20(木) 23:05
82:
その情報から可能なアドバイスは以下の通り:
1. 祈る
2. 念じる
3. 勉強する
4. お金で解決
# 嬉しい回答は良い質問から。


84 名前:monalove 投稿日:2000/07/21(金) 00:09
5.あきらめる

85 名前:名無しさん 投稿日:2000/07/21(金) 00:26
6.マシンをかるく叩いてみる

86 名前:japu 投稿日:2000/07/21(金) 01:29
85: 斜め45度から食らわすのがコツです。


87 名前:名無しさん 投稿日:2000/07/21(金) 16:14
1:ささやき
2:詠唱
3:祈り
4:念じよ!

カール板は灰になりました



88 名前:超初心者 投稿日:2000/07/21(金) 20:32
すみません、本当に初心者なんですけど、、
掲示板とかを自分のHPに設置して動きを見るときって、
どうしても電話代がかかってしまって、、。
オフラインでそういうテストをできるようなツールって
あるんでしょうか。。
探してみたんですが、よくわかってないのもあって、
見つけられませんでした。。

すみません、教えてくださいませんか。。

89 名前:名無しさん 投稿日:2000/07/21(金) 21:18
初心者というくらいだからWindowsだよね?
1. http://www.activestate.com/Products/ActivePerl/Download.html
  で、Windows用ActivePerlを手に入れ、インストールしよう。Windows Users: という
  注意書きがあるので、そこのソフトを先にダウンロード&インストールするのを忘れずに。
2. AN HTTPD というソフトをどうにかして手に入れ、インストール&設定しよう(URL忘れた)。
3 ブラウザから http://localhsot/(何とかかんとか)/test.cgi などと指定すればオッケーだ!

2 と 3 の間が難しいかも。AN HTTPD の説明書など読んでがんばってくらさい。
あと flock とか symlink 使ってるCGIは動かないので注意。

90 名前: 投稿日:2000/07/21(金) 21:20
Macだったかな…。

91 名前:あっ 投稿日:2000/07/21(金) 21:21
3 は "localhost" でした。

92 名前:japu 投稿日:2000/07/21(金) 21:25
Windows なら、AN HTTPD でしょうな。
結構セキュリティホールが発見されているようだけど。

オススメなのはFreeBSDなどのPC UNIX。
Apache入れればほぼプロバイダと同じ環境で実験できるはず。


93 名前:超初心者 投稿日:2000/07/21(金) 21:53
>89,92
めちゃめちゃありがとうございました。
今、ANHTTPDというソフト探してみてます。。
ActivePerlはそこの、WindowsUsers:の先から
落としました。

聞いてみて良かったです。。。

94 名前:名無しさん 投稿日:2000/07/21(金) 22:22
kent-webにオフラインでCGIの説明があったと思う。
行ってみてください。
http://www.kent-web.com/

95 名前:名無しさん 投稿日:2000/07/21(金) 23:17
カドルト

96 名前:名無しさん 投稿日:2000/07/22(土) 00:24
二つ質問があるのですが
<Form Method="Get" Action="./Test.cgi">
<Textarea Name="value" Cols="60" Rows="6"></Textarea>
<Input type=submit value=submit></Form>
こんなフォームで

あいうえお
かきくけこ

って感じで入力されてきたのをcgi-lib.plを使わずに処理する(デコード?)
にはどうすればいいですか?
もう一つは上の場合で改行で区切るのはどうすればいいのですか?
多分splitを使うのだと思うのですが区切り文字\nでは無理でした・・。
よろしくお願いします。

97 名前:マルチ@超初心者 投稿日:2000/07/22(土) 01:14
日本語の無料HPサービスで、CGIが設置できるトコありませんでしょうか?
勉強がてら、いろいろ試してみたいのですが。。。

98 名前:>97 投稿日:2000/07/22(土) 01:23
http://tadamono.to/

ここ見るとわかるかも。

99 名前:97 投稿日:2000/07/22(土) 02:03
>98 ありがとうございました。

100 名前:わん 投稿日:2000/07/22(土) 02:09
>97
いろいろ試すなー
お願いだから、ANHTTPDでやってくれ〜


101 名前:名無しさん 投稿日:2000/07/22(土) 02:23
Macの場合はMacJPERL5.2かMacPERL
ここからダウンロードが可能
ただし、線がかなり細いので注意
http://world.std.com/~habilis/macjperl/MacJP5.j.htm

おろしにくいのでこれを使うのが良い
http://www.vector.co.jp/soft/mac/net/se083423.html
シェアウェアなのが痛いが・・・


102 名前:97 投稿日:2000/07/22(土) 02:30
>100 申し訳ないJMFI Webに登録しちゃいました

103 名前:すいません 投稿日:2000/07/22(土) 03:48
http://www.nihen.com/
ここで、板の名前をどこでも良いのでクリックすると、2chみたいに
板に移動します。例えば一番上の「オロスコ」板をクリックします。
そして、オロスコ板に行った状態でIEでリロードすると、また
トップのページ(http://www.nihen.com/headline.html)に
戻ってしまいます。そうではなくて、リロードしてもオロスコ板が
表示されるようにするにはどうすればよいのでしょうか?
真剣に悩んでいます。マジレスお願いいたします。

HP板で書いたのですが、なかなかうまくいかないので
御教示お願いします。


104 名前:名無しさん 投稿日:2000/07/22(土) 05:53
質問です:

cgiにつくらせたフォルダとファイルの所有者がnobodyになってしまいました
(他のファイルはmaster)
ファイルを消すことができない状態です
nobodyをmasterにするにはどうしたらいいんでしょうか?
ちなみにffftpを使っています

よろしくお願いします

105 名前:名無しさん 投稿日:2000/07/22(土) 05:59
telnetのchownコマンドをつかうんでしょうか?

106 名前:名無しさん 投稿日:2000/07/22(土) 06:14
> 104
ファイルを削除するCGI使って消すべし

> 105
通常のUNIX系OSの場合、chownはrootでないと使えない。


107 名前:名無しさん 投稿日:2000/07/22(土) 06:31
>>106さん
telnetコマンドについていろいろ調べたんですが無駄だったようですね...
質問に質問を重ねてしまうんですが、ファイルを削除するcgiは作れるんでしょうか?

108 名前:名無しさん 投稿日:2000/07/22(土) 08:47
>107
perl の組込み関数 unlink をお使いください。


109 名前:>107 投稿日:2000/07/22(土) 10:25
#!/usr/local/bin/perl

$query = $ENV{QUERY_STRING};
$query =~ s/[^\w.-]//g;

print "Content-Type: text/html\n\n";
print "<html><body>\n";

if( -f $query or -l $query ){
    if( unlink $query ){ print qq|"$query" の削除に成功しました。\n| }
    else{ print qq|"$query" は何故か削除できませんでした。\n| }
}
else{ print qq|"$query" は削除しないほうがいいです。\n| }

print "</body></html>\n";

exit;


こんな感じ? テストしてないけど。
del.cgi とでも名前を付けて、del.cgi?log.dat とでも指定してみてください。

110 名前:名無しさん 投稿日:2000/07/22(土) 23:19
ありがとうございます!
とりあえず試してみます

111 名前:名無しさん 投稿日:2000/07/23(日) 04:12
>>109
インターナルサーバーエラーがでました

#!/usr/local/bin/perl
$query = $ENV{QUERY_STRING};
$query =~ s/[^\w.-]//g;
unlink $query

これくらいまで減らして試してみたんですが動かなかったです……

状況を説明すると、掲示板用に作成したフォルダがあって、そのフォルダと中のファイルの所有者がnobodyになっています
フォルダにはアクセスできるんですが、削除はできません
フォルダ内に削除用のcgiをアップロードすることさえできません

どうにかなりませんでしょうか……
わかる方よろしくお願いします

112 名前:余計なお世話君(一号 投稿日:2000/07/23(日) 04:16
109さんのスクリプトは
消したいファイルと同じディレクトリに置くんですよ♪

113 名前:名無しさん 投稿日:2000/07/23(日) 04:18
unlink $query;

114 名前:余計なお世話君(一号 投稿日:2000/07/23(日) 04:23
>112
111さんの投稿を確認出来ずに投稿したため
外した発言になってしまいますた。

115 名前:名無しさん 投稿日:2000/07/23(日) 04:26
消したいフォルダの中に入れるのではなく、
消したいフォルダの1つ上に入れるわけだが、
理解できているだろうか。

116 名前:名無しさん 投稿日:2000/07/23(日) 04:29
http://mentai.2ch.net/test/read.cgi?bbs=hp&key=961096548&ls=50

117 名前:名無しさん 投稿日:2000/07/23(日) 04:30
っていうかこれだけでいいんじゃない?
#!/usr/local/bin/perl
unlink "ファイル名";

118 名前:117 投稿日:2000/07/23(日) 04:31
あ、>フォルダ内に削除用のcgiをアップロードすることさえできません
読んでなかった。。。スマソ(^^;

119 名前:117 投稿日:2000/07/23(日) 04:33
じゃ、これは?
unlink "フォルダ名/ファイル名";


120 名前:117 投稿日:2000/07/23(日) 04:35
んで、その後
rmdir "フォルダ名";

121 名前:名無しさん 投稿日:2000/07/23(日) 04:53
>>117
rmtreeを使えば一発、というのが116。

122 名前:117>121 投稿日:2000/07/23(日) 05:03
なぬっ、そんな関数があったのか(^^;
っていうか、俺が持ってるリファレンス本に載ってないよぅー(泣

123 名前:名無しさん 投稿日:2000/07/23(日) 05:11
消せました!
>>116さん >>117さんのやり方どっちでもよかったようです
ありがとうございました
というか、みなさん親切すぎます
ここは本当に2chなんでしょうか(笑)

124 名前:13 投稿日:2000/07/23(日) 05:33
いや、俺も1つ勉強になったです(^^;

125 名前:17 投稿日:2000/07/23(日) 05:33
いや、俺も1つ勉強になったです(^^;

126 名前:117 投稿日:2000/07/23(日) 05:35
124=125
あぅ、中止ボタン間に合わなかった(藁
別スレで13だったから。。(^^;
っていうか17でもなくて117じゃん。。
あぁ、、、なんか鬱だ。。。(ワラ

127 名前:>117 投稿日:2000/07/23(日) 08:50
気にするなよっ

128 名前:わっかんないっす 投稿日:2000/07/26(水) 02:19
<a.txt>
123
456
789
となってて、
これを@_に入れます
$kazu="012";
unshift @_,"$kazu¥n";
としてa.txtに書きこむと
012
123456
789
となってしまう。つまり123のあとの改行指示がなぜか消えてしまうんだけど
どうすればいいでしょうか?


129 名前:名無しさん 投稿日:2000/07/26(水) 02:32
なんも操作しないでa.txtを書き戻すとどうなるの

130 名前:名無しさん 投稿日:2000/07/26(水) 02:38
なにも操作しないで、というと?
@_を読みこんですぐにまた書きこむということですか?
ちょっとやってみます


131 名前:128 投稿日:2000/07/26(水) 02:43
とてもへんてこになりました。
改行指示がまたしても無視されてます

132 名前:名無しさん 投稿日:2000/07/26(水) 02:49
読み込んだ直後と書き込む直前に画面に配列内容吐かせてみたら

133 名前:128 投稿日:2000/07/26(水) 03:02
ちょっとやってみます

134 名前:>128 投稿日:2000/07/26(水) 03:53
改行コードは統一されているか?

135 名前:128 投稿日:2000/07/26(水) 05:41
やってみました。
@_のなかみは<012 123 456 789 >となってるので
正常だとおもうのですが、
これを書きこむ時にエラーがおきるみたいです。
何故でしょう。改行コードも統一してますし。
もういちど全ての要素の最後に¥nをつけてみようと思うのですが
これまたどうすればいいのかわかりません。

136 名前:名無しさん 投稿日:2000/07/26(水) 06:08
@_=map {chomp; $_.="\n";} @_;

137 名前:間違えた 投稿日:2000/07/26(水) 06:27
map {chomp; $_.="\n";} @_;

138 名前:名無しさん 投稿日:2000/07/26(水) 11:56
えっと配列からタグ(と思しきもの)を抜き出そうと思いまして

@html = (
'<p>abc<i>',
'abc<br>def',
'a<b>b<u>c');

foreach (@html) {
push (@tag, (/<(.+?)>/gi) );
}

のようにやってみたんですけど配列の要素中に該当するものが
複数ある場合、その全てを抜き出すにはどうすれば?
上の例の場合だと、

@tag = ('p','i','br','b','u')となるようにしたいです。
なんか iとか uが無視されちゃうんですが…


139 名前:名無しさん 投稿日:2000/07/26(水) 12:09
上のコード実行したら、uもiも入ってましたが?


140 名前:128 投稿日:2000/07/27(木) 03:29
うまくいきました。ありがとうございました。
そんですみませんが、もうひとつお願いします。
@_の中の最後の10要素をとりだすにはどうすればいいのでしょうか。
@_の中に何個要素が入ってるかわからない場合です
@_にリバースかけて@revなどとして頭から取り
そしてそれをまた@10などにいれてリバースかけて10個という風にするしか
ないのでしょうか?
順番どうりにとりだしたいのですが、、

141 名前:名無しさん 投稿日:2000/07/27(木) 03:41
たしか配列の中身の数を返す関数があったと思うから
それを使ってそれを-10した数からやればいいんじゃないかな。

こういう事を考えていくのも、勉強のうちだよ。
っていうかこういうのが楽しめなければ
スクリプト組むのはよしたほうがいい。

142 名前:128 投稿日:2000/07/27(木) 03:48
やっぱ関数がきっちり載ってる本かわないとダメですね。
入門書だけだとキツいっす。

143 名前:名無しさん 投稿日:2000/07/27(木) 03:50
@last_ten = @_ > 10 ? @_[-10..-1] : @_;

関係ないけど、 @_ は普通の用途にはなるべく使わないほうがいいと思う。
(最後の10個をとりだすサブルーチンだったらいいんだけど)


144 名前:128 投稿日:2000/07/27(木) 04:04
ありがとう。とてもたすかりました。
@なんたら。って名前が思いつかない時は何気に@_よくつかってました
以後気をつけます


145 名前:名無しさん 投稿日:2000/07/27(木) 05:09
変数や配列の名前ってなにげに思いつかないよね。(笑)
でも、@_とか$_使ってると
そこに何が入ってるのかわかんなくなっちゃったりするから
ちゃんと名前つけといた方がいいよ。
絶対に分かる!って自信があるならいいけど。(^^;

146 名前:名無しさん 投稿日:2000/07/27(木) 18:08
open (OUT, ">$fileA");

open (OUT, ">>$dirB/$fileA");

>の数が違うのは何か意味があるんですか?

147 名前:japu 投稿日:2000/07/27(木) 19:03
あります。詳しくはマニュアル参照。

148 名前:名無しさん 投稿日:2000/07/27(木) 20:01
テキストフィールドをテキストエリアに変えようと思って
<form action="$myname" method="$method">
<textarea name="aaa" rows=6 cols=72 wrap=off></textarea>
<input type=submit name=submit value=OK>
<input type=reset value=reset>
</form>

ってやって、

$FORM{'aaa'} = "<pre>$FORM{'aaa'}</pre>";

とやったのですが、
書き込みで改行した分を投稿しても改行されてないんです。
何か他に必要なんでしょうか?


149 名前:>148 投稿日:2000/07/27(木) 20:29
\nを<br>に置換する。

150 名前:146 投稿日:2000/07/27(木) 20:34
>147
冷たい人だね

151 名前:>150 投稿日:2000/07/27(木) 23:44
もうちょっと自分で勉強する努力をしなさい。
なんでも聞いてると上達しないよ。
本を一冊買うか、perl関係のサイトをまわるかしてみれば?

152 名前:>149 投稿日:2000/07/28(金) 00:13
<pre>で囲んでるなら\nのままでいいのでは?

153 名前:名無しさん 投稿日:2000/07/28(金) 00:43
配列の中から重複するものを取り除くにはどうすれば効率良いでしょうか?

@A = ('a','b','c','a','d','c','b','a');

@A = ('a','b','c','d');

配列内の順番はどうなっても良いです。


154 名前:名無しさん 投稿日:2000/07/28(金) 01:16
@temp{@A} = ();
@A = keys %temp;

なんてどうかな。


155 名前:153 投稿日:2000/07/28(金) 02:20
>154さん
できました!
@temp{@A} = ();
こんな書き方もあるんですね〜
ハッシュはまだ全然使いこなせてないのでもっと勉強します。
本当にありがとうございました。


156 名前:名無しさん 投稿日:2000/07/28(金) 02:33
ファイルロックってひとつずつやらなければならないのでしょうか?

ファイルロック開始;
ファイルA操作;
ファイルB操作;
ファイルC操作;
ファイルロック解除;
てなことは良くないのですか?

157 名前:>156 投稿日:2000/07/28(金) 02:37
http://tako.2ch.net/test/read.cgi?bbs=perl&key=963036704
ここ見れ。


158 名前:156 投稿日:2000/07/28(金) 02:58
うーん。難解な文章だなぁ。

159 名前:monalove 投稿日:2000/07/28(金) 03:46
ごめんなさい。書いた私もそう思います。
とりあえず、ファイルロックは一つのファイルごとに行う必要はありません。
むしろ、それぞれのファイルがお互いに無関係でない限りは
一回のロック〜アンロックの間にまとめて行わなければいけません。

160 名前:156 投稿日:2000/07/28(金) 03:52
なるほど。わかりました。挑戦してみます

161 名前:名無しさん 投稿日:2000/07/28(金) 07:18
1バイトコードと2バイトコードの判定ってどうすればいいんでしょうか?

例えば、フォームから入力するとき、”半角英数のみ”という指定にしたいのです。
これは正規表現なんかでできるものなんでしょうか?
どなたかお教え下さい。


162 名前:>161 投稿日:2000/07/28(金) 07:29
[0-9a-zA-Z]

163 名前:japu 投稿日:2000/07/28(金) 20:00
die if($var =~ /[^A-Za-z0-9]/);
-or-
die if($var =~ /[\W_]/); #tricky

164 名前:名無しさん 投稿日:2000/07/31(月) 00:52
HTMLのフォームからinput type=fileで
ファイルアップロードしたいのですが、
一体どうすればいいのでしょうか。
リファレンスサイトなどありますか?

165 名前:名無しさん 投稿日:2000/07/31(月) 22:42
Windows CEでperlありますか(ソフトありますか)?


166 名前:名無しさん 投稿日:2000/07/31(月) 23:56
>>165
なかったと思う。。。

167 名前:ラプ 投稿日:2000/08/01(火) 12:06
今、パールを勉強してるのですが、
デバックが快適にできなくて悩んでます。
参考書をそのままコーディングしただけでも、
エラーが出てしまい。どこがエラーなのかも解からないし、
何個エラーがあったのかも解りません。
デバックの仕方を教えて下さい。宜しくお願いします。
OSはウインドウズ95を使っています。

168 名前:>165 投稿日:2000/08/01(火) 14:37
PocketDOS入れてPerl使え

169 名前:>167 投稿日:2000/08/01(火) 14:38
perl -cw test.pl

で見てわからん?
英語がわからないとかいうのは論外だけど…。


170 名前:いやづら 投稿日:2000/08/01(火) 15:38
>>167
Copal
http://homepage1.nifty.com/kaityo/
ついでにPerlEditor
http://village.infoweb.ne.jp/~ckawa/index.htm
Winのperlは使えない関数もあるので注意

171 名前:ラプ 投稿日:2000/08/01(火) 16:05
>169
perl -cw test.pl を
どの様にすると、わかるのでしょうか?

いつもは、コーディングが終わったら、FTPで送って
ブラウザで開いてみます。
で、internal server error というログが出ると、
ああ、またバグがあるのだな。
と考え、参考書とソースを交互に見比べて、
何処が違うのか捜しています。

ひつこく(しつこい?)て、申し訳ありませんが、
もう少しだけ詳しく教えて下さい。
もしくわ、説明の乗ってるHPをご存じなら
URLを教えて下さい。

>170
べんりな物がある見たいですね。
でも、基本的な事がキット解ってないと思うので、
ツールを使わなくても、バグってる箇所がわかる方法を
知りたいと思っています。
その後にツールへチャレンジしてみたいと思っています。
ありがとうございます。




172 名前:いやづら 投稿日:2000/08/01(火) 16:21
>170
とりあえずローカルでテストできる環境を作った方がよくないですか?
参考スレッド:WIN 95/98/NTでPerlのテスト環境構築
http://tako.2ch.net/test/read.cgi?bbs=perl&key=964575342&ls=50

ANHTTP+あくちぶぱーる+Copal+エディタでいけるはず
余裕あればhttpdはApacheでもいいけど

173 名前:いやづら 投稿日:2000/08/01(火) 16:21
↑ >171の間違い

174 名前:ラプ 投稿日:2000/08/01(火) 16:34
>172
そうですネ。
読んでやってみます。
いつも、つなぎっぱなしなので、
ローカルで出来るとスゴク良いと思います。
ありごとうございます。


175 名前:名無しさん 投稿日:2000/08/03(木) 12:30
誰か、164さんの質問答えてあげてください。
(ごめんなさい、私はわかりません)


176 名前:名無しさん 投稿日:2000/08/03(木) 13:11
ほいほい。
>>164
http://www.tsden.org/ryutaroh/fileupload-j.shtml

177 名前:Perl2週間目 投稿日:2000/08/03(木) 23:39
open IN,"/public_html/head.txt";
が無効であることがやっとわかったのですが
opendir "/public_html";と
chdir "public_html";
どちらがいいのでしょうか?
より良い方ってどちらですか?


178 名前:名無しさん 投稿日:2000/08/04(金) 00:36
ネタですか?

179 名前:名無しさん 投稿日:2000/08/04(金) 00:48
いやマジです。

180 名前:名無しさん 投稿日:2000/08/04(金) 00:52
perlより相対パスをお勉強しましょう

181 名前:名無しさん 投稿日:2000/08/04(金) 00:56
なにー!
PERLの問題じゃないのー?
あ、ちなみにpublic_htmlはaaでもlogでもなんでもいいです。
ドキュメントルートなどは無視して考えてください

182 名前:名無しさん 投稿日:2000/08/04(金) 00:57
無視ってのもへんだからドキュメントルートはusrrootね

183 名前:名無しさん 投稿日:2000/08/04(金) 01:09
やっぱりパスのお勉強だねー

それに
opendir と chdir のどちらでもよい
っていう状況がわからんな(藁


184 名前:名無しさん 投稿日:2000/08/04(金) 01:12
えー
そうなのかー。ま、いいや

185 名前:名無しさん 投稿日:2000/08/04(金) 10:49
とりあえず、

print `pwd`;

とでもして、Web サーバのパスと UNIX 上のパスの違いを
自覚してもらうのがいいと思う。
・・・まさか、ドキュメントルートを / に設定してる訳は
ないでしょう。


186 名前:名無しさん 投稿日:2000/08/05(土) 23:32
"0008052329"という文字列を

"00/08/05 23:29"という文字列に変換したいのですが、
どうすればよいでしょうか?

187 名前:名無しさん 投稿日:2000/08/06(日) 00:04
s{^(..)(..)(..)(..)(..)$} {$1/$2/$3 $4:$5};

188 名前:japu 投稿日:2000/08/06(日) 00:24
#! /usr/bin/perl -w

$str = "0008052329";
($year, $month, $day, $hour, $min) = unpack "A2A2A2A2A2", $str;
$str = "$year/$month/$day $hour:$min";

print "$str\n";

__END__


189 名前:186 投稿日:2000/08/06(日) 02:37
>187&japuさん
返答ありがとうございます。
助かりました。


190 名前:名無しさん 投稿日:2000/08/06(日) 04:17
CGIをアップロードしました。ブラウザで見ようとすると
「ファイルのダウンロード」のダイアログが出てしまいます。

簡単なブラウザ情報を表示するCGIです。Perlのパスも間違って無いです。
属性が違うんでしょうか?705と755でも同じ状態です。
誰か教えてください。お願いします…

191 名前:名無しさん 投稿日:2000/08/06(日) 04:31
>190
"Content-Type: text/html" をブラウザが受けとっていないことが考えられる
再確認してみれ


192 名前:190 投稿日:2000/08/06(日) 04:50
解決しました。191さん、ありがとうございました。

193 名前:名無しさん 投稿日:2000/08/07(月) 02:43
CGIから他のサイトのCGIを動かす?呼び出す?にはどのようにすればよいでしょうか。


194 名前:>193 投稿日:2000/08/07(月) 02:48
Location:


195 名前:193 投稿日:2000/08/07(月) 23:42
>194
ありがとうございます。

196 名前:名無しさん 投稿日:2000/08/08(火) 01:00
一旦文字列として取得したものを後から変数展開させることは出来ますか?
(コマンドラインやテキストファイルから取得するため)

$test = '$A . $B';
$A = "abc";
$B = "fgh";
$C = ($test を式として実行);

こんなイメージです


197 名前:>196 投稿日:2000/08/08(火) 01:04
eval 。

>(コマンドラインやテキストファイルから取得するため)
これの意味がよくわからない…。大抵、置換の方が楽なものだけれど。


198 名前:japu 投稿日:2000/08/08(火) 01:08
$C = eval $test;

199 名前:名無しさん 投稿日:2000/08/08(火) 01:35
use Safe;
$test= q{ $A = "abc"; $B = "fgh"; $A . $B; };
$cpt=new Safe;
$C=$cpt->reval($test);

200 名前:名無しさん 投稿日:2000/08/08(火) 02:57
http://www.jmarshall.com/tools/cgiproxy/にある、「CGIproxy」を
hypermartのアカウントに設置したのですが、実際に使用してみると
”Address family not supported by protocol family”と言った表示が出て
connectの所でエラーになってしまいます。

hypermartではsocketは使えると思うのですが、何処を直せばうまく動作する様になるのでしょうか?


201 名前:名無しさん 投稿日:2000/08/08(火) 03:44
ここは"人間初心者コーナー"じゃないよ

202 名前:名無しさん 投稿日:2000/08/08(火) 07:20
>197-199
有難うございます



203 名前:203 投稿日:2000/08/09(水) 12:04
まず2択選択のスレッドを作ってもらって
そこにレスを書いていくというものなんですが、
レスにはホストやIPが表示されません。
私のような若輩者にはどこをどういじればわかりません。
おそらくここにおられる方には屁みたいなものと思います。
ちょっと見てもらえませんか?
http://www.mediawars.ne.jp/~okapin/CGI/dotch/download/dotchcnv_cgi.txt

204 名前:>203 投稿日:2000/08/09(水) 12:43
これは古いバージョンのログファイルを最新のものに対応するようにコンバートするものじゃないのか?

205 名前:名無しさん 投稿日:2000/08/09(水) 12:45
改造ネタはそれ用のスレッドがあるからそこでお願いね。

206 名前:203 投稿日:2000/08/10(木) 09:44
>204
あ、勘違いしてました。すいません。
>205
了解しました。

あ、気にせず続けてください。

207 名前:名無しさん 投稿日:2000/08/10(木) 11:24
http://www.web-kyoto.com/
今日見つけたんですけど、ここのCGIは有名ですか?

208 名前:チョウ初心者 投稿日:2000/08/10(木) 13:28
perlってなんですか?

209 名前:>207 投稿日:2000/08/10(木) 14:03
有名だけど、今行ったら弾かれた(笑)
IE5かNN4.7でないとダメなんだってさ。


210 名前:名無しさん 投稿日:2000/08/10(木) 17:30
sort などで日本語の文字列を五十音順に並べかえたいんですが、良い方法ありませんか?

ひらがな→カタカナ→漢字
な具合にしたいんですが…


211 名前:名無しさん 投稿日:2000/08/11(金) 00:32
$string がユーザに入力させる任意の文字列だとして、
index で検索したいのですが、たとえば

$string =~ s/['\\]/\$1/g;
$x = "index( \$line, '$string' );";
eval $x;

は安全でしょうか?
ちょっと不安なので…。


212 名前:211 投稿日:2000/08/11(金) 00:43
あ、間違えた。
index じゃなくて正規表現で

$string =~ s/[\/\\]/\$1/g;
$x = " /$string/ ";
eval $x;

です。

213 名前:名無しさん 投稿日:2000/08/11(金) 04:15
一応 use Safe; しとくのが無難なのかね。
特にsecurityにうるさくなかったらevalでいいような
気がするけど。
$c = new Safe;
$c->permit_only('m');
$c->share(qw($string $_));
$c->reval("m/$string/");
みたいな感じか。
(実験してない スマソ 違ってたら訂正キボン)



214 名前:212>213 投稿日:2000/08/11(金) 13:55
回答ありがとうございます。
ちょっと動かそうとしたのですが、レンタルサーバにSafeモジュールがインストールされてないみたいです。
すみません。

>特にsecurityにうるさくなかったらevalでいいような気がするけど。
$string に "./;system('...');/."
とか入れられちゃったらまずそうなので、212のパターンを考えたのですが、
何か見落としがありそうでコワいです(笑)
検索なので s/\W//g としてしまうわけにもいかないし…。


215 名前:名無しさん 投稿日:2000/08/11(金) 15:17
CGIでtarを使いたいのですが、どうすればいいのでしょうか?

#!/usr/bin/perl

print "Content-type: text/html \n\n";
print "<HTML>\n";
$system = `tar cvzf /home/back/a.tgz /home/user/*`;
print "$system";
$system = `ls -l /home/httpd/html/back`;
print "$system";
print "</HTML>";
__END__

と、試しに作ったのですが
コンソール上では出来るのですが
ブラウザではだめでした・・(lsは動くのですが)


216 名前:215 投稿日:2000/08/11(金) 15:47
>$system = `ls -l /home/httpd/html/back`;
$system = `ls -l /home/back`;でした



217 名前:>215 投稿日:2000/08/11(金) 16:23
ダメというのは具体的にはどうなるの?

218 名前:ラプ 投稿日:2000/08/11(金) 17:08
質問させていただきます。
ファイルの中の行に該当する文字が含まれていたら、
その行をファイルの行の先頭へ移動させたいのです。
以下の様なプログラムを作ったら、順番が変わることなく
動かす度に、上から1行づつ消されていってしまいます。
どこが、間違っているのか教えて下さい。
宜しくお願いします。

open FILE,"aaa.dat";
@allbody = <FILE>;
close(FILE);
foreach $line (@allbody) {
if ($line = ~ /該当の文字/){
unshift @allbody,$line;
last;
}else{
next;
}
}
open FILE,">aaa.dat";
print FILE @allbody;
close FILE;

219 名前:213>214 投稿日:2000/08/11(金) 18:56
Perlのバージョンが最近のだったら qr// が良い感じなんだけどね。
use Safe; がだめなら期待薄か。
あとはエキスパートの出番やね。

こんなので遊んでみている。

#!/usr/bin/perl -w -T
$string = shift or die "Regexp not specified.\n";
print STDERR $string,"\n";
($regex = qr/$string/) or die "Regexp has syntax error.\n";

while (<>) {
print if ($_ =~ m/$regex/);
}



220 名前:215 投稿日:2000/08/11(金) 19:02
>217
ブラウザからだとlsの結果しか出ないのです。

Total (0)

な感じになってしまうのです。tarの結果はぜんぜん出てきません・・

221 名前:名無しさん 投稿日:2000/08/11(金) 19:08
>>212
そもそもなんで $x = /$string/; じゃだめなんだっけ。
Safeを持ちだすほど難しい問題にも見えない。

> $string =~ s/[\/\\]/\$1/g;
この処理意味不明。何をやりたいのか日本語で説明してみて。

222 名前:212>221 投稿日:2000/08/11(金) 23:19
>> $string =~ s/[\/\\]/\$1/g;
>この処理意味不明。何をやりたいのか日本語で説明してみて。
すみません。全然違ってました。 $string =~ s/([\/\\])/\\$1/g; です。
\ と、デリミタ / だけエスケープしておけば、パターンマッチを終わらせられないので、
214のような危ない文字列を入れられても大丈夫かな、という意図です。


223 名前:名無しさん 投稿日:2000/08/12(土) 00:45
>220
これなら配列に入るけど。
open(TAR, "tar cvzf /home/back/a.tgz |");
@system = <TAR>;

逆クォート演算子はスカラーしか返さないんかね?
もっと詳しい人のフォローきぼーん。


224 名前:名無しさん 投稿日:2000/08/12(土) 03:56
>223
perldoc perlopによると、 $/で切ってリストにしてくれるってよ。


225 名前:名無しさん 投稿日:2000/08/12(土) 03:59
>222
evalを使わずに
 $x = /$string/;
なら問題ないと思うけど。実行するたびに$stringの内容を
正規表現としてコンパイルし直してくれる。

$stringの中に(?{system...})とか書かれる場合はあるけど、
taintチェックではねられるよ(perldoc perlre参照)。


226 名前:おぼーん 投稿日:2000/08/13(日) 19:40
おぼーん

227 名前:名無しさん 投稿日:2000/08/13(日) 23:49
>218
「=」と「~」の間にスペース入ってない?
演算子「=~」はくっつけて書かないと別の意味になるよ。
あとunshiftだけだと、元の行が残ったままになるので
spliceで削除すると、こんな感じ?

$i = 0;
foreach $line (@allbody) {
last if ($line =~ /該当の文字/);
$i++;
}
@deleted = splice(@allbody, $i, 1);
unshift(@allbody, @deleted);


228 名前:名無しさん 投稿日:2000/08/14(月) 03:18
    $nj = '';
    @char = ('a'..'z','A'..'Z','0'..'9');
    srand(time|$$);
    foreach (0..9) {
        {
            local(@temp);
            push(@temp,splice(@char,rand(@char),1)) while @char;
            @char = @temp;
        }
        $nj = $char[($_)] . $nj;
    }

これってどういう意味ですか?

229 名前:名無しさん 投稿日:2000/08/14(月) 09:24
こんばんは。はじめまして。
unshiftというのが良く分からないのですが、
「配列の先頭に要素を追加します。」
とあるのですが、どういうことですか?
ログファイルに、書き込むということですか?

230 名前:名無しさん 投稿日:2000/08/14(月) 11:44
>223
レスありがとうございます。
でも、会社がおぼーんで開いてないから
試せない・・

231 名前:230 投稿日:2000/08/14(月) 11:51
220=230です。

232 名前:名無しさん 投稿日:2000/08/14(月) 14:08
>229
いやunshiftや、shift,push,pop,spliceは、メモリ上で配列をいじるだけ。
その配列データをファイルに書いたりするのはまた別の仕事。


233 名前:名無しさん 投稿日:2000/08/14(月) 14:28
test

234 名前:名無しさん 投稿日:2000/08/14(月) 15:40
数値を3桁ごとに区切りたいです。
12345 → 12,345
…ってな具合にしたいんですが、全く分かりません。
どなたか助けて下さい。
よろしく、お願いします。

235 名前:名無しさん 投稿日:2000/08/14(月) 16:36
>234
http://www.din.or.jp/~ohzaki/perl.htm#NumberWithComma


236 名前:234 投稿日:2000/08/14(月) 17:18
ありがとうございます。>235
他にも四捨五入やら切り上げやら、欲しい物が目白押しでした!

237 名前:ラプ 投稿日:2000/08/15(火) 14:21
>227
ありがとうございました。
なんだかお休みのせいで、書き捨ての様な状態になってしまって
本当に申し訳ありませんでした(いいわけ?)
それと、ソースを見比べてみて、幼稚なソースだなって
思いました。今後、気を付けてみようと思います。


238 名前:名無しさん 投稿日:2000/08/15(火) 16:52
メールなどの Message-Id: ヘッダと References: ヘッダから
スレッドを生成して、そのスレッドを日付の新しい順に
並べたいのですけど、どうすればよいでしょうか?

参考になるようなソースを紹介していただければと思います。
よろしくお願いします。


239 名前:名無しさん 投稿日:2000/08/15(火) 17:55
>238
perlで書かれたMHonArcていうmail-HTMLコンバータが有名かも
http://www.oac.uci.edu/indiv/ehood/mhonarc.html


240 名前:名無しさん 投稿日:2000/08/15(火) 18:38
>>239
MHonArc の中の mhthread.pl がどうもそれっぽいので
しばらく眺めてみます。どうもありがとうございました。


241 名前:名無しさん 投稿日:2000/08/15(火) 21:57
誰か教えてください。
一つの配列のデータからランダムで一つのデータを
表示するには↓のようにすれば良いと思うんですが、、

@test=(
"データ1",
"データ2",
"データ3",
);

srand;
$ramdam=int(int(3));
print $test[$ramdam];
print "\n";

では、配列が『複数』ある場合に、
ランダムで複数ある配列の中のどれか一つのデータを
取り出すには、どのように書けばいいんでしょうか?

242 名前:>241 投稿日:2000/08/15(火) 22:03

print "$test[rand(@test)]\n";

こんな感じでいいと思います。



243 名前:名無しさん 投稿日:2000/08/15(火) 22:29
XBM画像を解析するにはどうすればいいんですか?

244 名前:241 投稿日:2000/08/15(火) 23:02
242さん、レスありがとうございます。
もう少し質問させてください。

配列が、
@member=
@partner=
@class=
というふうに<3つ>ある場合だと、どう書けば良いのでしょうか?

245 名前:わかんないっす 投稿日:2000/08/15(火) 23:44
HTMLで”あいうえお”と表示するところを”     ”のように
空白スペースで表示したいのですが、うまく行かないです。
”あいうえお”は何文字の文字列になるのか分からないときです。
s/\S/<p>\s<\/p>/g
これは小文字のsが並んだのでだめでした。それで
s/\S/<p> <\/p>/g
こんなふうにしたんだけど、これも空白文字が作られないみたいだし。
どうなんでしょう。お願いします。



246 名前:japu 投稿日:2000/08/15(火) 23:52
#! /usr/local/bin/perl -w

@majokko = qw[Mami Emi Pelsia Yumi Lala];
@children = qw[Rei Asuka Kaworu];
@usagers = qw[void lala-z];

$moe = (@majokko, @children, @usagers) [int rand(@majokko + @children + @usagers)];
print "$moe\n";

__END__

コミケ後、まだ回復していないjapuでした。
さっさと申込書書かなければ。うぐぅ。

あと、単純に
@moe = (@majokko, @children, @usagers);
$hoehoe = $moe[int rand @moe];
としても良い。


247 名前:241 投稿日:2000/08/16(水) 00:04
japuさん ありがとうございます!
助かりました。

248 名前:>245 投稿日:2000/08/16(水) 00:14
それは、HTMLだったら半角スペースは1文字に圧縮されるのでは?
全角を使うか、PREを使うかしないと…。

あと、s/PATTERN/REPLACEMENT/ の REPLACEMENT は
正規表現ではないので、\s とか \w とか使えません。


249 名前:245 投稿日:2000/08/16(水) 01:50
むーぅ。微妙にムずい。preもなんだか変。

250 名前:>245 投稿日:2000/08/16(水) 03:22
#!/usr/local/bin/perl

my( $x, $y, $sp );
$x = 'あいうえお';
$y = ' ' x ( length( $x )/2 ); # 全角
$sp = ' ' if length( $x ) % 2; # 半角

print "Content-Type: text/html\n\n";
print "<html><body>\n";
print "<pre>\n";
print "|", $x, "|\n";
print "|", $y, $sp, "|\n";
print "</pre></body></html>\n";

空白だけPREでやってるのでは。"あいうえお" も含め、
すべてPREで囲まないと(FONTで等幅フォントを指定しないと)、
見た目を同じ長さにするのはHTMLでは無理。

PerlやCGIでどうという話題ではないので、あとは余所でどうぞ。


251 名前:名無しさん 投稿日:2000/08/16(水) 12:06
>>243
http://www.d2.dion.ne.jp/~taiao/b2xb.html
こんなんどう?

252 名前:>232 投稿日:2000/08/16(水) 15:50
>229
>いやunshiftや、shift,push,pop,spliceは、メモリ上で配列をいじるだけ。
>その配列データをファイルに書いたりするのはまた別の仕事。

unshiftとは、何をしているのですか?
メモリ上の配列とは何ですか?
ごめんなさい。初めてのプログラム言語覚えようって思っている
んです。

253 名前:japu 投稿日:2000/08/16(水) 16:45
@array = qw[mami emi pelsia yumi];
print "@array\n";
$x = pop @array;
print "$x / @array\n";
push @array, $x;
print "@array\n";
$x = shift @array;
print "$x / @array\n";
unshift @array, $x;
print "@array\n";

output:
mami emi pelsia yumi
yumi / mami emi pelsia
mami emi pelsia yumi
mami / emi pelsia yumi
mami emi pelsia yumi


254 名前:252 投稿日:2000/08/17(木) 09:37
ありがとうございます。
ソース? スクリプト? プログラム?
なんていうのか分かりませんが、親切に
教えてくれてありがとうございます。
それを、DOSのエディタで打って、実行しました。
結果が分かりました。


255 名前:名無しさん 投稿日:2000/08/17(木) 11:23
URL のなかに & が含まれている場合、&amp; としなければなりませんよね?
たとえば、
http://tako.2ch.net/test/read.cgi?bbs=perl&amp;amp;key=957208980&amp;amp;ls=100
とかするのですが、この?と&と=で分解される文字列の中に&が入っていた場合、
どうすればよいのでしょうか?
http://hoge.com/news2web.cgi?newsgroup=datula.Q&A&nntpserver=news.mio.org
上の場合、本当はハッシュに'newsgroup'=>'datula.Q&A'というふうに入ってほしいのですが、
当然ながら&の手前で切れてしまいます。
&を%81とか%2581とか&amp;とか&amp;amp;とかいろいろ変えてみましたが、
やっぱりうまくいきませんでした。

&以外の文字(たとえば@)を使ってスクリプトの中で元の&に変換するしかないのでしょうか?


256 名前:名無しさん 投稿日:2000/08/17(木) 11:25
上の文章、&が&amp;amp;に変換されたりされなかったりで読みづらいですね。
すみません。


257 名前:>255 投稿日:2000/08/17(木) 12:41
& は %26 だけど…。 %81って?

newsgroup=datulaQ%26A&amp;amp;nntserer=news.mio.org

でできると思いますが。
できないのならフォームのデータを取得する部分がおかしいのでしょう。


258 名前:255 投稿日:2000/08/17(木) 14:28
あ、そういうふうにやったらちゃんとできました。
どうもありがとうございました。

%81というのは、、、なんだったんだろう?
ord "%" の値をそのときは使ったんですけど、81じゃないですね。
すみませんでした。


259 名前:お教えを請います 投稿日:2000/08/17(木) 21:16
掲示板のスクリプトで投稿文章の一番最後に改行が入ってたら
削りたいのですが、どのようにすればいいでしょうか?
正規表現を使えばできると思うのですが、素人なもので。

260 名前:名無しさん 投稿日:2000/08/17(木) 22:49
chmop($bunsyou);
で、そのものずばり。
でもPerl5じゃないとだめです。
あ、でもsendmailが複数行にわたるときは、どうだったかな。

261 名前:名無しさん 投稿日:2000/08/17(木) 22:50
まちがえた。chompでした

262 名前:名無しさん 投稿日:2000/08/17(木) 23:58
テキストファイルに下の4つの言葉が書かれていた時に
1,オマエモナー
2,田中
3,ぞぬ
4,ギコ猫

3のぞぬという言葉を一番上にもって行き後はずらす場合
1,ぞぬ
2,オマエモナー
3,田中
4,ギコ猫
とする方法を教えて下さい。


263 名前:名無しさん@?日目 投稿日:2000/08/18(金) 18:07
>262
@aho = ("オマエモナー", "田中", "ぞぬ", "ギコ猫");
@baka = ($aho[2], $aho[0], $aho[1], $aho[3]);
・・・ワラ

264 名前: 投稿日:2000/08/18(金) 20:41
下のようなカード占いのCGIをPerlにて作成したのですが、
http://asobiba.hypermart.net/cgi-bin/uranai/dc/7card/7card.cgi
http://asobiba.hypermart.net/7card_cgi.txt(中身)
乱数$aから$gまでが、それぞれダブらないようにするには、
どう書けばよいのでしょうか?
さらに、(後者は前者のリバースなので)
0〜21と22〜43もダブらせないようにしたいのですが……

お教え頂けたら幸いです。

265 名前:名無しさん 投稿日:2000/08/18(金) 22:13
>264
0〜21の配列作成→かき混ぜ→いくつか裏返す(+22する)→7個選択
ですかね。
@a = (0..21);
@a = map { splice(@a, rand(@a), 1) } @a;
foreach (@a) { $_ += 22 if rand(2) < 1; }
($a,$b,$c,$d,$e,$f,$g) = @a[0..6];

266 名前:>262 投稿日:2000/08/19(土) 01:52
これ、昨日2分くらいで書いたのに
その間にtako落ちてた(;´Д`)

$file_name='name.txt';

$i=1;
open(IN,"<$file_name") or die;
while(<IN>){
    ($num,$nich)=split(/\,/,$_,2);
    chomp($nich);
    if($nich eq 'ぞぬ'){
        print "1,$nich\n";
        $i=2;
    }else{
        push(@names,$nich);
    }
}
close(IN);

foreach(@names){
    print "$i,$_\n";
    ++$i;
}
exit;

267 名前:こっちの方がいいや(266) 投稿日:2000/08/19(土) 02:01
$i=1;
open(IN,"<$file_name") or die;
while(<IN>){
    ($num,$nich)=split(/\,/,$_,2);
    chomp($nich);
    if($nich eq 'ぞぬ'){
        print "$i,$nich\n";
        ++$i;
    }else{
        push(@names,$nich);
    }
}
close(IN);

268 名前:名無しさん 投稿日:2000/08/19(土) 11:30
初心者で申し訳ございません。
<dl><dt><dd>の意味を教えて頂きたいのですが。。。
バカな質問でごめんなさい。
こんな私のような者でも解るオススメのCGIの本がございましたら、
ご推薦下さいませんでしょうか?
重ね重ねすみません。

269 名前:名無しさん 投稿日:2000/08/19(土) 14:22
268<ネタだな

270 名前:名無しさん 投稿日:2000/08/19(土) 15:50
ネタにしてももう少しひねってくれ。

271 名前:名無しさん 投稿日:2000/08/19(土) 18:36
板違いだし

272 名前:名無しさん 投稿日:2000/08/19(土) 19:21
配列で幾つかのメッセージのパターンを作り
ランダムで複数の配列の中のどれか一つのメッセージを
選び、それにあったイメージを出力するには
どうすればいいのでしょうか?
例えば、ランダムで「元気です」というメッセージを選んだら
それに合わせてjyoutai.jpgを表示させたいのですが。
ハッシュを使えばいいんでしょうか?

$image_hiragana="aisatu.jpg";
$image_katakana="henji.jpg";
$image_abc="jyoutai.jpg";

@aisatu=(
"おはよう",
"こんにちは",
"こんばんわ",
);

@henji=(
"はい",
"いいえ",
"そうです",
);

@jyoutai=(
"元気です",
"風邪気味",
"眠い",
);


273 名前:名無しさん 投稿日:2000/08/19(土) 19:57
@array = grep (条件), <FILE>;

と書いたとき、1行ずつ読まれて grep の条件にかけられることを期待しているのですが、
もしかしたら、一時的にメモリにすべて読み込んでから grep にかけられるんでしょうか?
結構でかいファイルなんで、一気読みは避けたいんですが…。

while( <FILE> ){ push @array, $_ if (条件) }

などとやらないと駄目でしょうか?


274 名前:名無しさん 投稿日:2000/08/20(日) 00:04
grepの条件ブロックで読みたいファイルを変更かけたら分かる。かな。


275 名前:名無しさん 投稿日:2000/08/20(日) 02:26
どもです。

#!/usr/local/bin/perl

open FILE, "test.txt" or die;
@array = grep {
    seek FILE, 0, 2;
    1;
} <FILE>;
close FILE;

print @array;

こんなんでっちあげてテストしてみたら、@array には test.txt(2行以上) の内容が
全部入ってました。ってことはやっぱり一気読み? う〜ん。
(上のが有効なテストなら、ですけど…)

276 名前: 投稿日:2000/08/20(日) 03:38
>>265さん 上手くいきました。ありがとうございます。

277 名前:名無しさん 投稿日:2000/08/20(日) 23:39
>>262です
>>266さんありがとうございます


open(IN, "name.txt");
@a = <IN>;
close(IN);

$zz= "3,ぞぬ"";
foreach $list(@a){
    unless($list eq $zz){
        unshift(@sub2, $list);
    }
}
unshift(@b,$zz);

出力という感じにしました)
配列を制御する関数があることが知りませんでした。
でヒントにして上のような感じにしました。
これの悪い点がわかる人教えて下さい。

278 名前:名無しさん 投稿日:2000/08/21(月) 12:25
systemを使ってDOSコマンドを実行したとき
その出力を変数で受けることは可能ですか?
出来ればファイルに書き出す前に出力を加工したいためです


279 名前:japu 投稿日:2000/08/21(月) 12:55
open CMD, "command ... |" or die;
while(<CMD>){
print;
}
close CMD;

280 名前:置換文字列での変数の使用 投稿日:2000/08/21(月) 14:15
置換ルールを記述したファイルから、正規表現と置換文字列を読み込ん
で、指定したファイルに一括置換をかけるスクリプトを書いています。

しかし、置換文字列での$1、$2を使った後方参照がうまくいきません。

$str = "使用前の文字列";
$exp = "(使用)前";
$rep = "$1後";
$str =~ s/$exp/$rep/;
print $str ."\n";

上記で、"使用後の文字列"と出力されるようにしたいのですが、どのよ
うにしたらよいのでしょう。

ラクダ本などにもあたって、$repを評価したりとかしてみたのですが、
うまくいきません。

初歩的な疑問で申し訳ありませんが、どなたかご教示ください。


281 名前:置換文字列での変数の使用 投稿日:2000/08/21(月) 14:30
書き忘れ。

実際には、$exp、$repは、正規表現と置換文字列をコンマで区切った
CSVファイルから読み込みます。


282 名前:278 投稿日:2000/08/21(月) 14:33
>279さん
ありがとうございます
大変ためになりました


283 名前:ラプ 投稿日:2000/08/21(月) 15:15
また、質問させていただきます。
1000回中で0〜2までの数字が、
ちゃんと333回づつ出るのか
試してみようと思いました。
でも、1ばかり出てしまいました。
間違っているところの指摘をお願いします。

#!/usr/local/bin/perl

$max = 1000;

for($i = 0; $i <$max; $i++){
    $rand=int(rand(2));
    if ($rand = 0){
        $tbwidth0 ++;
    }elsif($rand = 1){
        $tbwidth1 ++;
    }elsif($rand = 2){
        $tbwidth2 ++;
    }
}

$tbwidth0 = $tbwidth0/$max*100;
$tbwidth0 = $tbwidth0 . "%";
$tbwidth1 = $tbwidth1/$max*100;
$tbwidth1 = $tbwidth1 . "%";
$tbwidth2 = $tbwidth2/$max*100;
$tbwidth2 = $tbwidth2 . "%";

print "Content-type: text/html\n\n";
print "<html><body>\n";
print "<table width = $tbwidth0 bgcolor = pink>\n";
print "<tr><td>$tbwidth0</tr></td>\n";
print "</table>\n";
print "<table width = $tbwidth1 bgcolor = pink>\n";
print "<tr><td>$tbwidth1</tr></td>\n";
print "</table>\n";
print "<table width = $tbwidth2 bgcolor = pink>\n";
print "<tr><td>$tbwidth2</tr></td>\n";
print "</table>\n";
print "</body></html>\n";

284 名前:だちゅら〜 (゚д゚ ) 投稿日:2000/08/21(月) 15:29
>280
$rep = q|$1.'後'|;
$str =~ s/$exp/$rep/ee;

でできます。
でも、もっとスマートなやりかたがありそうな気も…。


285 名前:置換文字列での変数の使用 投稿日:2000/08/21(月) 15:32
>283

for($i = 0; $i <$max; $i++){
$rand=int(rand(3));
if ($rand == 0){
$tbwidth0 ++;
}elsif($rand == 1){
$tbwidth1 ++;
}elsif($rand == 2){
$tbwidth2 ++;
}
}

でいいんとちなう?

rand(2)だと0〜2(2は含まない)までだから、0〜2を得るにはrand(3)
じゃないとダメ。

あと、=は代入演算子。比較は==。

私の質問もよろしく〜♪


286 名前:置換文字列での変数の使用 投稿日:2000/08/21(月) 15:33
あ、だちゅら〜さん、さんく♪
試してみます。


287 名前:置換文字列での変数の使用 投稿日:2000/08/21(月) 15:59
たしかに、

$rep = q|$1.'後'|;
$str =~ s/$exp/$rep/ee;

にすると、希望通りの出力にはなりますが、$repにはファイルから読み
込んだ値を使いたいので、これだとうまくありません。

質問の趣旨がわかりにくくてごめんなさい。

もうちょっと試行錯誤してみます。

スマートな方法をご存知の方、引き続きよろしくお願いします。


288 名前:名無しさん 投稿日:2000/08/21(月) 17:18
>置換文字列での変数の使用
こういうの考えてみましたが、やはりスマートではないっすね・・・
$str =~ s/$exp/$rep/;

eval "\$str =~ s/$exp/$rep/";

289 名前:だちゅら〜 (゚д゚ ) 投稿日:2000/08/21(月) 17:39
すみません。斜め読みで回答してしまって…。

$str =~ s/$exp/"\"$rep\""/ee;

こんな物凄い方法もありますぜよ。
でも、こんなことするくらいなら eval の方がいいかも…。


290 名前:ラプ 投稿日:2000/08/21(月) 17:49
>285
わかりやすい説明
ありがとうございました。


291 名前:消防の中の消防 投稿日:2000/08/21(月) 18:09
/usr/local/bin/perl

$cgi="tanken.cgi";

$|=1;

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/,$buffer);
    foreach $pair (@pairs) {
        ($name, $value) = split(/=/, $pair);
$name =~ s/%(..)/pack('C',hex($1))/ge;
$name =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $value =~ tr/+/ /;
    $FORM{$name} = $value;
    }
$admin = $FORM{'admin'};
$file = $FORM{'file'};
以下省略
これをUPするのはどーしたら良いのですか?
因みにサーバーはfreeweb です。
マジで困っています。
宜しくお願い致します。

292 名前:>291 投稿日:2000/08/21(月) 18:33
探検君はfreewebでは使えませぬ

293 名前:置換文字列での変数の使用 投稿日:2000/08/21(月) 20:29
>288さん
あ、式全体をevalすればよかったのか。ありがとうございました。

>だちゅら〜さん
$str =~ s/$exp/"\"$rep\""/ee;

うわー。なるほど。私には思い付かないやり方だ。

ってことで、思った通りことができました。ありがとうございました。


294 名前:名無しさん 投稿日:2000/08/21(月) 22:17
293で解決したところで便乗しつもーん
$str =~ s/$exp/"\"$rep\""/ee;
↑これ、なんで2回エバらないといけないんですか?
$str =~ s/$exp/"$rep"/e;
でいいんじゃ?……と思って試したらだめだった(-д-

295 名前:名無しさん 投稿日:2000/08/22(火) 00:53
/eはネスト可能、だってさ。

296 名前:241 投稿日:2000/08/22(火) 04:23
>>241で質問した者です。
複数の配列のデータがあって、「配列変数だけ」を
ランダムで選ぶって出来るんでしょうか?
>>246でjapuさんが新しい配列変数を作ってからランダムで
選ぶと方法を教えていただいたのですが、配列変数を最初に
ランダムで選んで、その後に中のデータを選ぶ…という
処理をしたくなりまして。出来るんでしょうか?
教えていただけないでしょうか?



297 名前:名無しさん 投稿日:2000/08/22(火) 04:32
配列の配列にしなされ。
$TEST[rand][rand];
データが既存配列ならリファレンスすればよろし。

298 名前:名無しさん 投稿日:2000/08/22(火) 11:14
CGIの権限を自分のアカウントと同様にしたいのですが
どうすればいいのでしょうか。

299 名前:japu 投稿日:2000/08/22(火) 11:30
setuid or suEXEC

300 名前:名無しさん 投稿日:2000/08/22(火) 12:11
ローカルにプロキシチェッカーを立てたいのですが
サーバーの生存はPINGを打つとして
ポートが利用可能かはどうすればよいですか?
またプロキシサーバが返すヘッダ情報を取得する最適な方法はどうすればよいでしょうか?

現在は
    $sock = IO::Socket::INET->new(
        PeerAddr => "$PeerAddr",
        PeerPort => "http($PeerPort)",
        Proto => 'tcp');
のような感じで接続してHEADメソッドを送っているのですが
あまりうまくいきません。
ちょっとしたことでも構いません
何かヒントでもあればお願いします

301 名前:291>292 投稿日:2000/08/22(火) 12:39
有難う御座いました。
因みに何処のサーバーだったら、設置できますか?

302 名前:名無しさん 投稿日:2000/08/22(火) 14:00
age

303 名前:名無しさん 投稿日:2000/08/22(火) 15:56
フリーでCGIが動くサーバー情報キボ〜ン

304 名前:>303 投稿日:2000/08/22(火) 18:34
http://www.virtualave.net/

305 名前:241 投稿日:2000/08/22(火) 20:57
241です。297さん、レスありがとうございました。
情けないのですが配列がどうしても良く判らないので
japuさんに教えて頂いたやり方でもう一度やってみようと思います。
それで何度も本当に申し訳ないのですが、質問させてください。
↓のようなプログラムを作って・・・

@nihongo=(
"おはよう",
"こんにちは",
);

@eigo=(
"good morning",
"hello",
);
srand(time);
$randam=int(rand(10));
    @tekitou=(@nihongo,@eigo);
    $msg=$tekitou[int rand@tekitou];
    print "$msg\n";

if ($msg=@nihongo){
    print "これは日本語の挨拶だよ\n";
}elsif ($msg=@eigo){
    print "これは英語の挨拶だよ\n";
}
exit;

それでif文の所で$msgが@nihongoの配列なら
「これは日本語の挨拶だよ」と返したいのですが、
ここの条件文が判らないです。単純に($msg=@nihongo)と書いても
うまく行きません。どうしたらいいでしょうか?

306 名前:241 投稿日:2000/08/22(火) 21:01
241です。省略されたので抜き出します。
-----

それでif文の所で$msgが@nihongoの配列なら
「これは日本語の挨拶だよ」と返したいのですが、
ここの条件文が判らないです。単純に($msg=@nihongo)と書いても
うまく行きません。どうしたらいいでしょうか?

307 名前:名無しさん 投稿日:2000/08/22(火) 23:21
eq

308 名前:名無しさん 投稿日:2000/08/22(火) 23:29
掲示板荒らしの対策ってどんな方法がありますか?

309 名前:    投稿日:2000/08/22(火) 23:36
CGIはブラウザがタイムアウトしてもそのまま実行され続けるのでしょうか?
時間のかかる処理をしたいんですが、
一時的にファイルを作って、その後そのファイルを消したいのですが、
途中で終えられるとそのファイルが残っちゃわないかと心配なんです。

310 名前:名無しさん 投稿日:2000/08/22(火) 23:52
普通、コネクション切れると終了しますよ。
シグナルトラップしてファイル消したらいいんじゃないかな

311 名前:298 投稿日:2000/08/23(水) 00:13
>299
Apache本買ってきます。
thx!


312 名前:   309 投稿日:2000/08/23(水) 00:50
310さんありがとうございます。
シグナルトラップというのが分からないです。
どのようにして行うのか、教えていただけるうれしいのですが。

313 名前:名無しさん 投稿日:2000/08/23(水) 02:00
>>306

$mes=@nihongo、なら代入式じゃん。==にしても配列要素数と比較するだけだけど。

スキルが足りないなら知ってるものでなんとかしましょってのは
Perlにも言える事だけどね。単純な条件分岐でできるんだから
これをひとに訊くってのはやっぱり甘えてるかプログラマ適性がないと思うけど。
魔法のファンクションってのはそうそうないもんだよ。

とりあえず$mesの1バイト目見たら判別可能じゃないの? ねぇ。


314 名前:241 投稿日:2000/08/23(水) 03:42
>>313さん。全くそのとうりです。甘えもあったし適性も無いです。
ヒントを書いてくださったので、もう一度考えてみて
($msg eq @nihongo[0,1])こうしたのですが、「こんにちは」は
上手く行くのですが「おはよう」だと上手く行かないです。
要素の0番目が無視されてしまいます…。もう少しヒントを頂けないでしょうか?




315 名前:名無しさん 投稿日:2000/08/23(水) 04:05
>>314

いや、無理言ったわたしが悪かった。もういいや。
シフトJISもしくはEUCなら次のコードで判別できる。

if (ord($msg) & 0x80) {日本語} else {英語}

頑張ってね。

316 名前:名無しさん 投稿日:2000/08/23(水) 04:39
>>309
http://tako.2ch.net/test/read.cgi?bbs=perl&key=959716561&ls=50
関連の話題があります。

317 名前:310 投稿日:2000/08/23(水) 11:10
>309=312
$SIG{'QUIT'},$SIG{'INT'}
を調べるといいよ。


318 名前:tori 投稿日:2000/08/23(水) 11:16
use cgiが使えません・・・
オライリーには自分で解析作業
をするプログラムを書くよりこの
モジュールを使ったほうがいいとかいてあるのですが、
試してみると、CGI エラー - Content-Type ヘッダが正しくありません
Can't locate cgi.pm in @INC at
ってでてきます。
ちなみにサーバはan http serverでためしました。


319 名前:置換文字列での変数の使用 投稿日:2000/08/23(水) 13:22
<318さん
それは、cgi.pmがインストールされてないんでしょ?
CAPNからcgi.pmを取ってきてインストールするか、最近のActivePerl
をインストールしたらいいんじゃない?


320 名前:でんで 投稿日:2000/08/23(水) 13:23
しまった。ハンドルがこの前質問したときのままだった(^^;;


321 名前:名無しさん 投稿日:2000/08/23(水) 16:04
CGIって大文字で書くなんていう問題じゃないよねえ。

322 名前:241 投稿日:2000/08/23(水) 22:48
315さん、ありがとうございます。勉強になります。
実際には「英語」と「日本語」という配列を使いたいわけではなくて
複数の日本語の配列を使いたいので教えて頂いた方法が使えないのです。
わかりにくい例えですみません。

($msg eq @nihongo[0,1])
この条件式の場合、要素の0番目が無視されて
($msg eq @nihongo[$tekitou])
こういうふうに変更したんですが、今度は要素の1番目が無視されてしまいます。
この方法では出来ないんでしょうか?

323 名前:名無しさん 投稿日:2000/08/24(木) 00:52
>>322

あー、はいはい。じゃあね、

if (grep $msg eq $_ , @nihongo) {含む} else {含まない}

もうこれでいいでしょ。それとも「配列間で内容が重複していた
場合はどうするんですか」とか訊く?(笑) あー、訊きそうだねぇ。

プリミティブな命令に分解すればいいんだよ。まずどの配列から
取るか決めて、それ覚えておいて、次に実際に取り出せばいい。
コードは冗長になるけど、動くよ、ちゃんとね。

命令の組み合わせを作ればいい。必要な知識はあなたは持ってるはずだよ。
それをしないのはもどかしい&可笑しいよ。頑張れば自分でできるのにね。
「楽したい楽したいもっと楽な方法があるんだよどこかに〜」とか
思ってるんだろうね。下手でも冗長でも、動けば勝ちなのに。


324 名前:241 投稿日:2000/08/24(木) 02:07
>323さん、ありがとうございます。
なんでスライスでうまくいってくれないのかなあと
散々考えて他に方法も思いつかなかったので質問しました。
楽したいと思ってたわけでは無いんですが…。
不愉快な思いをさせてしまってすみません。


325 名前:名無しさん 投稿日:2000/08/24(木) 05:37
>>324

スカラーコンテキストでスライス使う問題以前に、
eqに検索能力を求めるほうが無理があると思うけどね。

326 名前:241 投稿日:2000/08/24(木) 17:00
foreachの連続で出来ました。
正直323さんにキツイなあと思いましたが、出来たのは
323さんのアドバイスのおかげです。ありがとうございました。

foreach $youso(@nihongo){
    if ($msg eq $youso){
        print "これは日本語の挨拶だよ。\n";
    }
}

327 名前:名無しさん 投稿日:2000/08/24(木) 18:42
ああ、何かいい加減にして欲しいよなぁ。
口調だけは謙ってるけど「慇懃無礼」の典型だな。全然本気で勉強して無さそうだし。
何でもすぐ人に頼るなよ。少しは自分で悩んで解決しろ。

328 名前:名無しさん 投稿日:2000/08/25(金) 05:18
ソケットってなんですか?
概念が良くわかりません
どう言うことをするものなのか、
どういう物を指すのか等。
教えてください

329 名前:>328 投稿日:2000/08/25(金) 05:37
入口出口

330 名前:名無しさん 投稿日:2000/08/25(金) 10:53
このスレッドを読んでいるとPerlが以下に出来の悪い中途半端な
言語であるかよくわかります


331 名前:名無しさん 投稿日:2000/08/25(金) 15:38
アプローチがたくさんあって、ビギナープログラマーには優しくないのに、
CGI言語ゆえにネット利用者にいちばん身近って点では不幸だわな。


332 名前:名無しさん 投稿日:2000/08/25(金) 16:50
>ビギナープログラマーには優しくないのに
何と比べて言ってるの?
Perlほど簡単で、「動く」ものがすぐに書ける言語も少ないだろ。
ビギナーには最適だ。

中途半端といえばそうだけど、簡便さと機能と速度のバランスは
取れているよ。



333 名前:??? 投稿日:2000/08/25(金) 17:11
つーか凝り出すといくらでも凝れてしまうというのが。。。
スバラシイ(げら

ところで CPAN の *.pm 初めて使う時に楽に導入する
TIPS なんかないもんかね?
結局ソースに逝き着くのかという感じはしてきたんだが。。


334 名前:名無しさん 投稿日:2000/08/25(金) 18:59
>何と比べて言ってるの?

C、C++、VB、VBA、JScript、コボル、sed、桐…くらい。


335 名前:ひろっち 投稿日:2000/08/25(金) 21:06
ひろっちだ。
少なくとも文字列の扱いにおいて
C より perl のほうが明らかにビギナー向けであるから
331=334の比較は偽である。
以上。



336 名前:名無しさん 投稿日:2000/08/25(金) 22:08
文字列がどうとかなんて本質じゃないよ。
実際、文字列を扱えても、そこからさきは「プログラムとは
なにかすごいグレートな呪文がふにゃふにゃと集まってる」
ようなイメージしか持ってないんじゃないのかね。
この板見てるとそう思うよ。

337 名前:名無しさん 投稿日:2000/08/25(金) 22:25
何事も自分が出来ないことは難しく見えるものである。

338 名前:ひろっち 投稿日:2000/08/25(金) 23:09
ひろっちだ。
ビギナー向けかどうか、についての基準について
議論の余地があるようだが
不毛なのでやめようね。
くだらないし。
以上。


339 名前:名無しさん@指にウンコ付いてた 投稿日:2000/08/26(土) 02:34
簡単に動かせるのは事実。
N88-BASICより更に簡単

340 名前:名無しさん 投稿日:2000/08/26(土) 02:54
>>336は他の言語は使ったことはないの?(C/C++/Basic/Pascal/etc...)
他のに比べると標準で使える文字列関係の関数にはかなり便利なものがたくさんあるよ。
むしろ、あなたがプログラムに不向きなのかもね。

341 名前:名無しさん 投稿日:2000/08/26(土) 04:40
334=336だ。スキルは知らんが対人関係は確かにプログラマ向きではないな。

言語に便利なファンクションがあるのは当たり前だろう。あほか?
ifなどの文法、それから派生する手法がトリッキーだっつーの。

違うってんならシュウォーツ変換ばりの記述がある言語と例をあげてくれ。
俺が勉強不足なだけかも知れないからな。

342 名前:名無しさん 投稿日:2000/08/26(土) 08:39
シュウォーツって、Schwartz変換のこと?
@array = sort func @array;
だって初心者なら構わないでしょ。
初・中・上級者で書き方、効率が違うのは当たり前だろう。
例に意味がないっつーの。

Perlが解りづらい言語だから、ではなく、身近だし、とっつきやすいので
手を出す奴が多いが、まともに勉強している割合は少ない(当たり前だけど)
から、336のような印象を受けるんだと思うね。

まあ、本当のことがわかるわけもないのでさげ。


343 名前:>329 投稿日:2000/08/26(土) 10:07
むむ、なるほど・・・

でも、もう一声御願いできませんか?

344 名前:名無しさん 投稿日:2000/08/27(日) 13:27
age

345 名前:日本語でのソート 投稿日:2000/08/28(月) 03:25
以下のCSVファイルがある場合において,
例えば,html上のボタンで第一要素を用いて
日本語50音順にし,その結果を別のCSVファイルに,
出力するにはどのようにすればよいのでしょうか?
ご親切な方おられたらよろしくお願いします。

↓元のCSV
ほっかいどう,くしろ,くっちゃん,
やまがた,さかた,しんじょう,
かごしま,まくらざき,ちらん,



346 名前:japu 投稿日:2000/08/28(月) 04:31
#! /usr/local/bin/perl -w

open IN, "moe.csv" or die;
open OUT, "> ordered.csv" or die;
@ordered = map { $_->[0] }
sort { $a->[1] cmp $b->[1] }
map { [$_, (split /,/)[0]] } <IN>;
print OUT @ordered;

__END__

CGI として動作させるところは自分で考えて下さい。


347 名前:名無しさん 投稿日:2000/08/28(月) 07:08
printf "%4.2f\n", 10.00;
printf "%4.2f\n", -10.00;
printf "%4.2f\n", 100.00;
printf "%4.2f\n",-100.00;
を実行しても以下のようになり桁が合いません。
どこがいけないのでしょうか?
10.00
-10.00
100.00
-100.00

348 名前:名無しさん 投稿日:2000/08/28(月) 07:42
sprintf な >>347

349 名前:名無しさん 投稿日:2000/08/28(月) 10:45
perl で書かれた電子掲示板等の CGI を使っているのですが、
私は「MS漢字コード」が大嫌いでして、CGI に関しては
EUC-JP を使っています。

ただ、HTML は ISO-2022-JP を使ってまして、掲示板も
JIS にしようかと jcode.pl での指定を 'jis' にした上で
掲示板の CGI を JIS にエンコードしてFTPでアップロード
しても "500 Server Error" が出てしまいます。

jcode.pl ではなく nkf を使わなければ解決しないのでしょうか???

350 名前:名無しさん 投稿日:2000/08/28(月) 12:10
>347
"%4.2f"つーのは、「小数点の左4文字:右2文字」じゃなくて
「全部で4文字:右2文字」って意味です。
-100.00まで出したいなら全部で7文字だから"%7.2f"が正解

351 名前:名無しさん 投稿日:2000/08/28(月) 13:49
$a = "おなか\@いっぱい"
と言う文字列から
$b = "おなか"
$c = "いっぱい"
というふうに出力するためにすはどうすればよいのでしょうか?

352 名前:さゆ 投稿日:2000/08/28(月) 14:31
はじめて質問します。かなり初心者ですみません。

・HTMLの中に、コメントでキーワードを二つ入れる。
(&lt;!-- はじめ --&gt;と&lt;!--おわり--&gt;)

・フォームで新たに文章を入力すると、そのタグの
間が書き換わって出力される。他の部分は変わらない。

ということをやりたいのですが、なかなか上手く行きません。
どうやったらよいか、教えてください。
よろしくおねがいします。

353 名前:NoName 投稿日:2000/08/28(月) 17:05
>>351
($b,$c) = split(/\@/, $a);
かな?


354 名前:名無しさん 投稿日:2000/08/28(月) 17:09
>>349
漢字コード以外の問題では?
$ perl -wc script_name
してチェックした結果はどうなんでしょう?

>>351
if ($a =~ /([^\@]+)\@([^\@]+)/) {
$b = $1;
$c = $2;
}

>>352
CGI の話でいいのでしょうか?
前半は print "&lt;!-- はじめに --&gt;\n"; とか適当にやって。
後半は CGI では無理。Javascript なら可能。


355 名前:351 投稿日:2000/08/28(月) 17:29
>>353 534
どうもありがとうございました。
助かりました。

356 名前:NoName 投稿日:2000/08/28(月) 17:49
>>352

作ってみましたよん
以下は、「www.hoge/bbs/」にbbs.htm , bbs.cgi を設置したものとして
います。

--------------- bbs.htm --------------------------------------
<html><head>
<title>bbs</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<font color=blue size="+2"> bbs </font>
<HR>
<table>
<tr><th width=25%>名前</th><th width=70%>コメント</th></tr>
&lt;!-- new --&gt;

&lt;!-- 新規書き込み用FORM --&gt;
<tr>
<form method=POST action="./bbs.cgi">
&lt;!-- ↑ cgiを指定する。htmと同じ場所の場合は変更しない --&gt;
<td><INPUT TYPE=text NAME=name SIZE=20></td>
<td><INPUT TYPE=text NAME=comment SIZE=100></td>
</table>
<INPUT TYPE=submit VALUE="書き込む" NAME="submit">
</form>
</body></html>

-------------- bbs.cgi ---------------------------------------
#!/usr/local/bin/perl

require './jcode.pl'; # jcode.pl
$htmfile = "./bbs.htm"; # cgiがあるパスからの相対パス
$htmfile2 = "http://www.hoge/bbs/bbs.htm"; # htmファイルの絶対パス

## --- フォームからのデータ処理
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
&jcode'convert(*value,'sjis');
$value =~ s/</\&lt\;/g;
$value =~ s/>/\&gt\;/g;
$value =~ s/\"/\&quot\;/g;
$FORM{$name} = $value;
}
$mode = $FORM{'mode'};
$name = $FORM{'name'};
$comment = $FORM{'comment'};
$comment =~ s/\r\n/<br>/g;
$comment =~ s/\r|\n/<br>/g;

## --- htmファイルの書き換え
$newmsg = "<tr><td>$name</td><td>$comment</td></tr>\n" ;
open(IN,"$htmfile");
@new = ();
while ($line = <IN>) {
if ($line eq "&lt;!-- new --&gt;\n" ) { push( @new , $newmsg ); }
push( @new , $line );
}
close(IN);
open(OUT,">$htmfile");
print OUT @new;
close(OUT);

# htmfileに飛ばす
print "Location: $htmfile2\n\n" ;

exit;


357 名前:さゆ 投稿日:2000/08/29(火) 03:12
>>NoNameさん

できました! どうもありがとうございました。
とても丁寧なコードでわかりやすくて嬉しいです。
これからも頑張ってperl勉強していきたいです。
もう一度、本当にありがとうございました。

358 名前:japu 投稿日:2000/08/29(火) 03:29
> 掲示板の CGI を JIS にエンコードして

Perlとかで書かれたCGIプログラムをJISにしているの?
うまく行かなくなることが多いよ。

プログラムは EUC-JP、出力は JIS が吉でしょう。
内部の取り扱いも EUC-JP が吉。


359 名前:名無しさん 投稿日:2000/08/29(火) 05:41
配列を空にするには普通どうするんでしょうか?
splice(@a,0,@a);
というのを考えたんですが、一般的でない気がします。


360 名前:日本語でのソート 投稿日:2000/08/29(火) 05:44
>347
ソート部分はこれで良いのですね。ありがとうございました。
ソート部分が解れば何とかなりそうです。

361 名前:359 投稿日:2000/08/29(火) 06:31
自己解決しました。
@a=();
でいいのか。

362 名前:名無しさん 投稿日:2000/08/29(火) 06:34
@a=undef;
とかでもいいよん。

363 名前:名無しさん 投稿日:2000/08/29(火) 06:45
配列って使った後は空にした方がいいんですか?

364 名前:名無しさん 投稿日:2000/08/29(火) 06:47



            ノ ‐─┬       /
          ,イ  囗. |      / _ 丿丿
            |    __|    ―ナ′
                     /  ‐' ̄
              ,‐       /
            ナ' ̄       /   、___
     /      ノ`‐、_
    / _ 丿丿  _メ       | _/
  ―ナ′     〈__         X / ̄\
   /  ‐' ̄               / V   /
   /       \   l       レ ' `‐ ノ
  /   、___  Χ ̄ ̄〉
             \ 丿       /
              \          / _
                    ―ナ′__
     | _/       ̄ ̄〉     /   ,
    X / ̄\       ノ     /  _|
   / V   /             /  く_/`ヽ
   レ ' `‐ ノ  ―――'フ
              / ̄      ┼┐┬┐
 み            |          〈 /  V
 つ           `−      乂   人
 を
             ┼‐      |  ―┼‐
             ┼‐       |    |
             {__)      |   _|
                        |  く_/`ヽ



365 名前:名無しさん 投稿日:2000/08/29(火) 06:56
>364
あんた、天才だよ。
朝から笑わせてもらった。

366 名前:名無しさん 投稿日:2000/08/29(火) 11:20
>>364
伊集院光・深夜のバカ力のリスナーでしょ?(藁

367 名前:349 投稿日:2000/08/29(火) 11:43
>>354
まだJISに変換したスクリプトのデバックはしてないのですが、
単純なスクリプトを書いてJIS変換してもダメでした。↓こんなのです。

#!/usr/local/bin/perl

print "Content-type: text/html\n\n";
print "あいうえお";

>>358
やっぱりダメですか。結局CGIでHTML(等)を出力するには
EUC−JPばかりです。

スクリプトをMS漢字→EUCに変換した上で以下のような感じに
するだけで宜しいのでしょうか?

&jcode::convert(\$value,'jis');
&jcode::h2z_jis(\$value);

368 名前:349 投稿日:2000/08/29(火) 12:06
すいませんでした。解決しました(^^;

たった2行で解決しました。私が使っているサーバの nkf のパスは
/usr/bin/nkf で、以下の2行を付け加えるだけで解決・・・
これで問題ないでしょうかね?

$nkf = "/usr/bin/nkf";
open(STDOUT,"|$nkf -j");

369 名前:349 投稿日:2000/08/29(火) 12:14
>>354
>まだJISに変換したスクリプトのデバックはしてないのですが(自己レス)

syntax OK でした。

370 名前:ヨウボウ君 投稿日:2000/08/29(火) 12:23
パーミッションの設定のやりかた教えて下さい。

371 名前:名無しさん 投稿日:2000/08/29(火) 12:29
>>370
FTPソフトで変えるのが一番簡単。

372 名前:名無しさん 投稿日:2000/08/29(火) 12:54
>>371
Perlでだろ
chmod(mode, file)

373 名前:379 投稿日:2000/08/29(火) 13:50
>>371
>>372
有難う御座いました

374 名前:名無しさん 投稿日:2000/08/29(火) 14:13
自分のHPにgoogleなどのサーチエンジンの検索窓をつけたのですが
漢字コードが違うせいか文字化けしてしまいます
検索窓に入力された文字を任意の漢字コードに直して
サーチエンジンのCGIに送るにはどうすればいいのでしょうか?
PerlかJavaScriptでできますか?

375 名前:名無しさん 投稿日:2000/08/29(火) 14:40
>374
364を読むべし!!

376 名前:名無しさん 投稿日:2000/08/29(火) 16:06
$a = 'http://tako.2ch.net/perl/index2.html'
と言う変数から
$b = 'http://tako.2ch.net/perl/'

$c = 'http://tako.2ch.net/'
のようにさらに階層を登ったURLに変換する
方法はありますでしょうか?

377 名前:名無しさん 投稿日:2000/08/29(火) 16:15
($b = $a) =~ s|/[^/]+$|/|;
で どうだろう?

378 名前:364すげーな 投稿日:2000/08/29(火) 16:17
あんたすごいよ。
他に作品が見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい
見たい見たい見たい見たい見たい
見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい
見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい
見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい
見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい

379 名前:名無しさん 投稿日:2000/08/29(火) 20:48
コピペ(364)にそこまで反応するなよ。

380 名前:名無しさん 投稿日:2000/08/29(火) 21:51
378は多分364と同一人物です
ところで検索窓どうやればいいんでしょうか?

381 名前:名無しさん 投稿日:2000/08/29(火) 22:27
>>374 >>380
検索フォームを設置するHTMLの文字コードを
日本語EUC (EUC-JP) にしておけば手軽で安心(^^)

382 名前:名無しさん 投稿日:2000/08/29(火) 22:32
>>381
googleはsjisじゃないとだめみたいなんです、、、
検索窓おいてあるhtmlはeucなんですが

383 名前:腐れ厨房 投稿日:2000/08/29(火) 22:50
>>382
んで検索窓置いてあるhtmlをsjisにしたくないんなら、フレームで別のhtml(sjis)上の検索窓を読み込むってのはどですか?

384 名前:名無しさん 投稿日:2000/08/29(火) 22:50
>>382
google って http://www.google.com/ のことでしょうか?
それを今覗いてきたのですが、SJISでした。
検索窓を置くHTMLをSJISにすればOKなのでは?
当然ながら、半角カナが入力されないと云う前提で。

385 名前:361 投稿日:2000/08/30(水) 06:04
>362
だめみたいよ。以下の結果をみると$a[0]にundefがあるみたい。

@a = (1,2,3);
printf @a . "\n";
@a =undef;
printf @a . "\n";

@b = (1,2,3);
printf @b . "\n";
@b =();
printf @b . "\n";

386 名前:名無しさん 投稿日:2000/08/30(水) 08:32
@a = undef; はイカン
undef @a; にせれ

387 名前:>385 投稿日:2000/08/30(水) 09:30
こう?

#!/usr/local/bin/perl

@a=(1,2,3);
print join(',',@a)."\n";
@a=undef;
print join(',',@a)."\n";

@b=(1,2,3);
print join(',',@b)."\n";
@b=();
print join(',',@b)."\n";
exit;

undef @aの方が好き。

388 名前:BK 投稿日:2000/08/30(水) 10:12
perlでデータベース(ACCESSとかオラクルとか)って扱えるんですか?
まったくの初心者なので正確に質問ができないかもしれませんが、よろしくおねがいします。


389 名前:名無しさん 投稿日:2000/08/30(水) 11:06
ACCESSは扱えないんじゃ?
オラクルは扱えるよ。

390 名前:BK 投稿日:2000/08/30(水) 12:02
そうなんですか。ACCESSは使えないんですかモジュール使えばなんとかなるかなぁと思ってました。
そう言う詳しい説明が載ってるHPってありますか??
探してるんですけど、なかなか難しくって・・・・
HPあったら教えてください。

391 名前:名無しさん 投稿日:2000/08/30(水) 12:33
自分もきぼーん
データベースを勉強できるホームページってあまり無いような気がします

392 名前:名無しさん 投稿日:2000/08/30(水) 12:38
>388
つかえるよ。
DBIとDBD::ODBCモジュール使えばいけるはず。
俺自信はつかったことないけど。

393 名前:名無しさん 投稿日:2000/08/30(水) 12:40
>391
ここでURL書くのはあれなんで、gooいってDBIで検索かけて
みてくれ。

394 名前:BK 投稿日:2000/08/30(水) 13:00
情報ありがとうございます。
検索してみます。


395 名前:名無しさん 投稿日:2000/08/30(水) 14:53
ちょっとお聞きしたいのですが、
http://ryan.sys.i.kyoto-u.ac.jp/~tokuda/inng/inng.cgi?newsgroup=2ch.test&message-id=8oi73m$ogj$1@ryan.sys.i.kyoto-u.ac.jp
ここに書かれているモナーの左耳が変なんですけど、なんででしょう?
ソースを表示させたらべつにどちらも同じ文字なんですけど、、
ブラウザのせいかなぁ?
HTTP_USER_AGENT: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) です。


396 名前:BK 投稿日:2000/08/30(水) 16:04
DBIとDBD::ODBCモジュールは手に入れて解凍していっぱいファイルができたんですが、
これじゃまだインストールしたことになりませんよね??
この後ってどうやればいいんでしょうか?

397 名前:名無しさん 投稿日:2000/08/30(水) 16:21
WindowsのActive Perlだと簡単なんだけどなぁ。
./configure
make
make install
とかするのかな?

398 名前:名無しさん 投稿日:2000/08/30(水) 16:27
以下の手順のモジュールは多いです。DBI、DBDも
同じかどうかは知りません

perl Makefile.PL
make
make test
make install


399 名前:BK 投稿日:2000/08/30(水) 16:28
>397さんレスありがとうございます。
WindowsNTを使ってまして、ActivePerlも入ってます。
ただActivePerlの使い方がよくわかりません。
DOS窓でそのコマンド(?)を打てばいいんでしょうか?

400 名前:名無しさん 投稿日:2000/08/30(水) 16:44
Active Perlならppmを使うんだよ。
DOS窓でppmと打ち込んでhelpで大体の使い方は判ると思います。
具体的にはinstall dbiでokです。

401 名前:BK 投稿日:2000/08/30(水) 17:42
>398さん、400さんありがとうございます。
やってみます。

402 名前:名無しさん 投稿日:2000/08/31(木) 01:20
perlスクリプトの上の方の設定部分に間違えて

$

とだけ書いてしまってたんですが
CGIで実行したら
SCALAR(0x876f0b0)
という謎のファイルが。。。
これって何なんでしょう?

403 名前:名無しさん 投稿日:2000/08/31(木) 02:10
$foo_ref = \$foo;
とすると、$$foo_ref が $foo をあらわし、$ref は SCALAR(0x876f0b0) というようなリファレンスを
あらわしているんだけど、その辺の副作用じゃないの?


404 名前:名無しさん 投稿日:2000/08/31(木) 03:58
こんにちは。
間抜けな質問で申し訳ありませんがご指導いただければ幸いです。

Carlさんの掲示板Ver.3.12を設置してみたのですが
(Macなんですが.sitファイルが開かず、Win用.zipファイルをダウンロードして
Jeditで開き、改行コードをUNIXのまま必要な部分を書き換えました)、
これにKENTさんのG-LIGHTのようにプルダウンメニューから
好きな画像アイコンを選択して書き込みメッセージ横へ表示するようには
できないでしょうか?

またべつに、リモートホスト表示(オンライン時にブラウザしている本人にだけ
見えるようにする設定)は可能でしょうか?

どうぞよろしくお願いいたします。

405 名前: 投稿日:2000/08/31(木) 04:01
ブラウズ、です(^^;;失礼しました。

406 名前:名無しさん 投稿日:2000/08/31(木) 04:15
カール板にアイコン…

407 名前:名無しさん 投稿日:2000/08/31(木) 10:30
cgiでhtmlを表示さすだけのcgi何ですがエラーが出てしまいます、
copalで表示されるエラーは
Unrecognized character \x81 at C:\Documents and Settings\tmp\copal163\copal.tmp line 33.
です、この情報だけで答えられる人居ましたらご回答下さい
ちなみに33行目付近は
32:&header;
33: print <<'__html__';
34:
35:<html><head>
となってます、&headerではgzipを追加したりしてますが
header部分は壊れてないはずですが

408 名前:>407 投稿日:2000/08/31(木) 11:34
 print <<'__html__';
↑これが全角スペースだから

409 名前:407 投稿日:2000/08/31(木) 12:32
ノ(´д`)ありゃ、、
ありがとうございました

410 名前:名無しさん 投稿日:2000/08/31(木) 17:54
掲示板に検索機能をつけようとしてます。
jcode.pl(ver2.11)を使って入力されたキーワードをEUCに
変更しようと思ったら、Shift_JISの「車」という1文字が
うまく変換できません。つまり、

$word = '車'; #Shift_JIS
&jcode::convert(\$word, 'euc');

と書いても$wordの中身はShift_JISのままなのです。
どうしたらいいでしょう。
jcode.plではなくXXXを使え、とかいうご意見でもいいので
教えてくださーい。

411 名前:名無しさん 投稿日:2000/08/31(木) 18:17
&jcode::convert(\$word, 'euc', 'sjis');
はどでしょ?

412 名前:名無しさん 投稿日:2000/08/31(木) 18:26
&jcode::sjis2euc(\$word);


413 名前:名無しさん 投稿日:2000/08/31(木) 18:37
個人的な趣味だけど
Jcode.pm使って

use Jcode;
$sjis = '車';
$j = Jcode->new($sjis,sjis);
$euc = $j->euc;

が好きだなぁ

あとは
chomp ($nkf = `echo $sjis | nkf -e`);
とか? nkfについては普段は使ってないので適当かも.間違ってたらスマン.


414 名前:名無しさん 投稿日:2000/08/31(木) 19:02
おいらは Kconv.pm が好き

415 名前:410 投稿日:2000/08/31(木) 19:39
>411さん、412さん、413さん
jcode.plやJcode.pmで、入力コードも明示的に指定すれば
いいんですね。やってみました。できましたー。
ありがとうございました。
この場合、検索フォームのページでcharset=Shift_JISを指定しとけば
CGIは必ずShift_JISコードを受け取ると思っていいのですか?
UNIX系のOSのブラウザとかでも。

あと413さんのnkf方式も、試してみたところ、ばっちりでした。
これだと'車'がSJIS,EUC,JISのどれで入力されてもうまく変換できました。
でも調べたのは'車'だけなんで、ほかの文字だとどうなるかわからないので
やっぱり入力コードを明示的にsjisと指定する方法でいきます。

>414さん
Kconv.pmは手元にないんで、あとで探してきまーす。

416 名前:402>403 投稿日:2000/08/31(木) 23:25
なるほど。
気になるんでその線でもうちょっと調べてみます。
ありがとうございました。

417 名前:名無しさん 投稿日:2000/09/01(金) 01:06
>>413
Jcodeだったら
$euc = Jcode->new($sjis,sjis)->euc;
でいいのでわ。

418 名前:413 投稿日:2000/09/01(金) 11:19
適当なこと言ってすんません
nkfの奴他スレで突っ込まれてるけどcgiに書いたらセキュリティホールの元っすね
自分で使ってないことを書くもんじゃないね.マジ反省.

>>417
そうですね
他に元のオブジェクト使わない場合


419 名前:名無しさん 投稿日:2000/09/01(金) 12:47
質問です。
Perlってなんて読むの?
ピール、ピエール、ピェラチオ?

420 名前:>>419 投稿日:2000/09/01(金) 13:05
真珠の Pearl と同じ発音でいいらしい
だから パール でいいと思う

421 名前:むぎ茶 投稿日:2000/09/01(金) 13:07
ネタにマジレス。420=ダウン症

422 名前:名無しさん 投稿日:2000/09/01(金) 13:08
ピエールです。
18世紀初頭にピエール伯爵が考案したことからこの名が付けられました。


423 名前:名無しさん 投稿日:2000/09/01(金) 16:36
ペルリを推奨。

424 名前:名無しさん 投稿日:2000/09/01(金) 17:15
ActivePerl のアイコンって、モロに真珠じゃん。

425 名前:名無しさん 投稿日:2000/09/01(金) 17:37
うちの会社ではペルールですね。
正式名称は何でしょうか?

426 名前:UG-Man 投稿日:2000/09/01(金) 19:54
ペール

427 名前:名無しさん 投稿日:2000/09/01(金) 21:08
ポールニューマン

428 名前:質問 投稿日:2000/09/01(金) 21:16
$ENV{'REMOTE_HOST'} で アクセスログを取っていたのですが、突然取れなくなりました。
日付・時間も同時に取っていたのですが、日付と時間は記録されていて IPの欄は何も記録されないんです。途中でスクリプトをいじったとかいうことはありません。

どなたか解決方法を教えてください。
virtualaveのCGIです。

429 名前:名無しさん 投稿日:2000/09/01(金) 21:17
23てん

430 名前:名無しさん 投稿日:2000/09/01(金) 21:48
>428
ネタか?

431 名前:名無しさん 投稿日:2000/09/01(金) 23:27
>428
一応マジレス。
Virtualは、リモホ取れなくなったぞ。


432 名前:428 投稿日:2000/09/02(土) 01:41
Virtualaveで、どこのプロバイダから接続しているかどうかを調べるというのはもう絶対無理なんでしょうか?
何か方法があれば教えてください。
(つまり428で書いた方法以外があれば…ということになります)

433 名前:名無しさん 投稿日:2000/09/02(土) 01:57
俺はVirtua使ってないんだけど
$ENV{'REMOTE_ADDR'}で取っておいて
必要になった時だけ
http://www.mse.co.jp/ip_domain/
とかで調べるってのは?

434 名前:名無しさん 投稿日:2000/09/02(土) 01:59
× $ENV{'REMOTE_HOST'}
○ $ENV{'REMOTE_ADDR'}

435 名前:433 投稿日:2000/09/02(土) 02:30
gethostbyaddrが使えるんならそれがいいけど
つーか、俺もVirtua使ってみよ。

436 名前:>432 投稿日:2000/09/02(土) 02:47
これでちゃんとホスト名取れてるよ
ちゃんと調べろ

$host = $ENV{'REMOTE_HOST'};
$addr = $ENV{'REMOTE_ADDR'};
if (($host eq $addr) || ($host eq '')) {
$host = gethostbyaddr(pack('C4',split(/\./,$addr)),2) || $addr;
}


437 名前:名無しさん 投稿日:2000/09/02(土) 02:50
最近はhttpdでgethostbyaddrすると重くなるから
やらなんだよ。>リモホ取れなくなった理由

やりたきゃ上のようにするしかないね。

438 名前:428 投稿日:2000/09/02(土) 03:04
たしかにREMOTE_ADDRで解決しました。
アドバイスありがとうございました。

439 名前:陽介 投稿日:2000/09/02(土) 17:19
CGIのなかで、GET ACTIONを使用しなければ、

$buffer = $ENV{'QUERY_STRING'};

の一行は消してもいいと聞いたんですが、消せますか?
KENTのYYBBSです。

440 名前:むぎ茶 投稿日:2000/09/02(土) 17:24


んなもんもともと必要なし。消せ消せ

441 名前:名無しさん 投稿日:2000/09/02(土) 17:26
>>439
実際に掲示板を設置して、いかなるURLの末尾に "?" が
付かなければ必要ありません。

「次ページ」に進む手段などで、
http://hogehoge.com/cgi-bin/yybbs.cgi?next=5
                    ~~~~~~~
みたいなのが無ければOKです。



442 名前:441 投稿日:2000/09/02(土) 17:27
ズレた。スマソ。

443 名前:むぎ茶 投稿日:2000/09/02(土) 17:49


GETっつってるだろ、あまえの頭はタコか?

444 名前:あまえ 投稿日:2000/09/02(土) 22:30
タコれ〜す

445 名前:名無しさん 投稿日:2000/09/03(日) 22:46
お時間のある方、ご教授ください。

アクセスしてきた人のリファーを
前10アドレス位、URLを習得できないでしょうか。
JavaScriptでdocument.referrerだと1つ前は取れるのですが、
history.go だと アドレスを表示出来ないのです。

収集するつもりは無いので、データをサーバに保存することは
考えていないのですが。

観覧者がIE5以降でもURLを習得する方法はありませんか?

446 名前:名無しさん 投稿日:2000/09/03(日) 23:30
保存しなければ無理
保存するときに、一番古いのを削って新しいのを加えればよい


447 名前:名無しさん 投稿日:2000/09/03(日) 23:38
ヽ(´ー`ー´)ノアホカ


448 名前:名無しさん 投稿日:2000/09/03(日) 23:41
まちがってたらゴメンなさいね。
445の質問って、10人ぶんのrefererを保存したいのじゃなくて
ある1人の訪問者が自サイトに来るまでたどってきた履歴を
10サイト前までさかのぼって暴きたいということでしょ?

449 名前:名無しさん 投稿日:2000/09/03(日) 23:54
なるほど。
perlやjavascriptでソンナコドデキルワケナイダロヽ(´ー`)ノ
あくちぶXでもツカットケヽ(´ー`)ノ

450 名前:名無しさん 投稿日:2000/09/03(日) 23:57
つーか、俺はjavascriptの方はあんまし知らないので
もしできるんだったらスマソ(;´Д`)

451 名前:名無しさん 投稿日:2000/09/04(月) 01:12
445ってよほどバカなんだな。
笑えるこのスレ

452 名前:名無しさん 投稿日:2000/09/04(月) 07:16
ファイルhoge.datから最後の行数求める方法で
open(DATA,"hoge.dat");
@a = <DATA>;
close(DATA);

$#aで求めています、遅いのでいい方法教えて下さい。


453 名前:  投稿日:2000/09/04(月) 07:32
ありません。

454 名前:名無しさん 投稿日:2000/09/04(月) 07:45
$gyousuu=@a;

455 名前:名無しさん 投稿日:2000/09/04(月) 10:44
my $numOfLine = scalar(<DATA>);

456 名前:>452 投稿日:2000/09/04(月) 12:09
遅いんじゃなくてメモリの問題じゃないの?

++$count while <DATA>;
seek DATA, 0, 0;
$skip = $count - $lastX;
<DATA> while $skip-- > 0;
@lines = <DATA>;


457 名前:名無しさん 投稿日:2000/09/04(月) 12:20
あ、「最後の何行」じゃなくて単なる行数か。


458 名前:名無しさん 投稿日:2000/09/04(月) 12:37
カウントする時も1行ずつ読み込んだ方が、全部読み込むよりも
速いみたいです。

459 名前:名無しさん 投稿日:2000/09/04(月) 12:43
勝手にカウントしないで下さい

460 名前:名無しさん 投稿日:2000/09/04(月) 15:32
文字列の中にus-ascii以外の文字が含まれているかどうかを判定するには、

if (/[^\x20-\x7f]/){
print "include non us-ascii";
}

というのより効率のいいのはありますか?


461 名前:名無しさん 投稿日:2000/09/04(月) 16:00
use sigtrap;
ってしたら、たまに
Caught a SIGTERM at /path/to/hoge.cgi line 0
みたいなエラーメッセージがerror_logに残るんですけど、
デバグとかでどういうふうに利用したらいいんでしょうか?

462 名前:RRW 投稿日:2000/09/04(月) 16:00
初心者質問です。ヒアドキュメントを書くと必ずエラーがでるんですが

print <<"HTML";
<HTML>
 |
</html>
HTML

って書いてるんですが、実行すると
Can't find string terminator "HTML" anywhere before EOF at C:\パス line○.
見たいにエラーがでてくるんですがこれって何の意味があるんでしょうか?
解決策を教えてください。よろしくおねがいします。


463 名前:名無しさん 投稿日:2000/09/04(月) 16:09
読んで字のごとく
"HTML"という文の終わりがどこにも見つからない。


464 名前:名無しさん 投稿日:2000/09/04(月) 16:24
print <<"END_OF_HTML";
<html>
 |
</html>
END_OF_HTML


465 名前:>460 投稿日:2000/09/04(月) 16:50
if( tr/\x20-\x7F// ){
}


466 名前:名無しさん 投稿日:2000/09/04(月) 17:10
>464
そういう問題じゃねーだろ


467 名前:名無しさん 投稿日:2000/09/04(月) 17:10
>>465
message/rfc822 の From ヘッダの処理なので消されたら困るんですけど。


468 名前:名無しさん 投稿日:2000/09/04(月) 17:14
>>466
やってみたのかよ。

469 名前:467 投稿日:2000/09/04(月) 17:17
>>465
あと、それだと日本語に含まれる文字もエスケープコードみたいなの以外消えちゃいますね。


470 名前:名無しさん 投稿日:2000/09/04(月) 18:27
>462
終りを示すHTMLは行頭から書いているか、
行末によぶんなもの(スペースとかタブとか)が
ついてないかを確認せよ。

# \rが悪さするなんてこたあねえよな??

471 名前:465 投稿日:2000/09/04(月) 18:29
よく考えてみたら tr だと「全部探す」から、ひとつ見つかったら終了、の
正規表現より遅いかも…。

でも、消えはしないよ。やってみてから言ってくれ。


472 名前:460 投稿日:2000/09/04(月) 18:56
>>471
すみませんでした。ごめんなさい。消えなかったです。

$str = 'HOGEHOGE';
$time = time;
for($i=0;$i<500000;$i++) {
if( $str =~ tr/\x20-\x7F// ){
$count++;
}
}
$time = time - $time;
print "tr: $count times match. time : $time sec.\n";
$time = time;
for($i=0;$i<500000;$i++) {
if( $str =~ /[^\x20-\x7F]/ ){
$count++;
}
}
$time = time - $time;
print "m: $count times match. time : $time sec.\n";

で、こういう感じでテストしてみたんですが、m///;のほうがはやいみたいです、、


473 名前:472 投稿日:2000/09/04(月) 19:00
上のテスト、$countの初期化忘れてた、、すみません。

474 名前:名無しさん 投稿日:2000/09/04(月) 19:10
その程度の処理で効率気にしてどうするんでしょ?

475 名前:472 投稿日:2000/09/04(月) 19:34
たとえば本文全体が US-ASCII だった場合は
Content-Type: text/plain; charset=US-ASCII
にして、日本語が含まれていた場合は
Content-Type: text/plain; charset=ISO-2022-JP
というふうにしたいですよね?
本文が長いときとかそういう処理が連続する場合とかは
結構気になるんですけど、、必要なし?


476 名前:名無しさん 投稿日:2000/09/04(月) 19:41
実際に実行してみて その部分がボトルネックになるならば
必要だろうけど 今の時点では必要ないと思います
ぼくだったら関数にわけるだろうし もっと実行効率は落ちるだろうけど
ぜんぜん気にしません
計算量のオーダーがかわるアルゴリズムなら設計時に気にしますけれど
たかだか数%の速度向上ならたいていの場合無視します

477 名前:472 投稿日:2000/09/04(月) 20:43
なるほど。たしかにそうですね。
ちょっと気にしすぎてました。
どうもありがとうございました。


478 名前:名無しさん@ぱーら 投稿日:2000/09/04(月) 22:59
if(index($_,"\x20\x21\x22...(省略)\x7f")>=0)
はどうよ?

479 名前:名無しさん@ぱーら 投稿日:2000/09/04(月) 23:00
問題を勘違いしてた。すまん。

480 名前:名無しさん 投稿日:2000/09/04(月) 23:15
質問なんですが・・・。

Win32 APIのIsDBCSLeadByteみたく
文字が2バイト文字の先頭バイトかチェックする方法ってありますか?


481 名前:名無しさん 投稿日:2000/09/05(火) 00:30
&nbsp;&nbsp;&nbsp;&nbsp;my&nbsp;($ret)&nbsp;=&nbsp;@_;
&nbsp;&nbsp;&nbsp;&nbsp;my&nbsp;$entity&nbsp;=&nbsp;qr/(#\d{1,4}|#[xX][a-fA-F\d]{1,4}|
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nbsp|iexcl|cent|pound|curren|yen|brvbar|sect|uml|copy|
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ordf|laquo|not|shy|reg|macr|deg|plusmn|sup2|sup3|acute)/;

&nbsp;&nbsp;&nbsp;&nbsp;$ret&nbsp;=~&nbsp;s/&/&amp;/g;

&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($ret&nbsp;=~&nbsp;/&.+;/)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$ret&nbsp;=~&nbsp;s/&amp;($entity)/&$1/g;
&nbsp;&nbsp;&nbsp;&nbsp;}

正規表現の中でパターンが上のようにとても長い(まだつづく)のですが、このままだと、'nbsp' にもマッチしてほしいのに、改行したりしているため "\n\s+nbsp" にマッチしてしまいます。
見易さのために適当なところで改行を入れたいのですが、うまい方法はないでしょうか?


482 名前:名無しさん 投稿日:2000/09/05(火) 00:32
ぐは、&amp;amp;と&amp;が混じって見づらい。。
まぁ、本題とは別のところなのでいいか。


483 名前:名無しさん 投稿日:2000/09/05(火) 00:44
>>480
charset は何でしょうか?JIS なら
http://www.asahi-net.or.jp/%7EBD9Y-KTU/dtd_f/rfc_f/rfc1468j.html
にあるように
ESC "$" ( "@" / "B" )
のあとの文字を1バイトづつ読んで、奇数なら先頭バイト、偶数ならそうでない、みたいにすればいいかも。
ほかのコードはわかりません。ていうか、この JIS の説明もかなり怪しいです。すみません。


484 名前:名無しさん 投稿日:2000/09/05(火) 03:31
>481
my $entity = qr/〜略〜/x;
ぢゃダメなん?

485 名前:名無しさん 投稿日:2000/09/05(火) 04:34
>484
できました!
あと、# を \# にしました。
なるほど、こういうときに使うオプションだったのか。>x
どうもありがとうございました。


486 名前:名無しさん 投稿日:2000/09/05(火) 05:03
Use of uninitialized value at /usr/lib/perl5/site_perl/5.005/i586-linux/Jcode.pm line 470, <SOCK1> chunk 279.
Use of uninitialized value at /usr/lib/perl5/site_perl/5.005/i586-linux/Jcode.pm line 477, <SOCK1> chunk 279.

Jcode.pm が上のようなエラーメッセージを出すのは
入力に JIS X 0201 (半角カナ) と ISO-2022-JP の両方が含まれているからでしょうか?

Jcode.pm の該当する行
470 return $$r_str if $icode eq $ocode; # do nothin'
477 load_module("Jcode::Unicode") if $icode =~ /ucs2|utf8/o;

ふつうは自動判定するのに、相反するようなコードが含まれているからエラーになる、
という認識でよろしいでしょうか?


487 名前:名無しさん 投稿日:2000/09/05(火) 07:02
>>480
Shift_JISの場合、全角文字の先頭バイトは必ず[\x80-\x9f\xe0-\xfe]で始まっているそうです。
これを利用すればできるかも?

488 名前:名無しさん 投稿日:2000/09/05(火) 16:47
個人で Perl スクリプト書くのに、サブルーチンとかのモジュール化は必要ですか?
これくらいの規模になってきたらモジュール化したほうがいいとか、最初からオブジェクト指向を考えて
書いていったほうがいいとか、あるんでしょうか?


489 名前:名無しさん 投稿日:2000/09/05(火) 16:58
>488
オブジェクト指向で書きたければ、クラスごと(あるいは
共通のベースクラスごと)にモジュールにしていった方がよいでしょう愛

OOでなくてもいいやとか、OOはあまり勉強してないという人は
普通のモジュールにした方がいいでしょうね。

いずれ大きくなりすぎてファイル分割するとわかっているのなら、
require 'myproj-utils.pl' よりも use MyProj::Utils の方が
よいでしょう。

perldoc perlmodlib, perlxstut, h2xsなどを参照のこと。


490 名前:Syn 投稿日:2000/09/05(火) 17:04
>480
http://www.din.or.jp/~ohzaki/perl.htm#Character

491 名前:名無しさん 投稿日:2000/09/05(火) 20:50
nobodyで動いているCGIから、
パーミッションで書き込み許可が付いていないファイル(r--)を
削除するには、どうしたら良いんでしょう…。

$cfile=@_;
eval{chown($>,$),$cfile);};
if($@){ print "<font color=#FF0000><b>chown to [ $uid + $gid ] …失敗…</b></font><br>\n"; return; }
eval{chmod(0777,"$cfile");};
if($@){ print "<font color=#FF0000><b>chmod 0777 失敗…</b></font><br>\n"; return; }

こんな関数組んで、
evalの結果を見る限りでは成功してるようなんだけど
問題のファイルは残ったまま…。
どこが悪いんでしょう?

492 名前:491 投稿日:2000/09/05(火) 20:52
あ…忘れた。
上のやつの後、こんなコトしてます。

open(DT,"+< $cfile");
eval{flock(DT,2);}; truncate(DT,0); seek(DT,0,0); print DT "";
close(DT); ## FileSizeを0にして削除する
unlink("$cfile");
print "<b>Complete.</b><br>\n";

(rw-)だと、サイズが0にはなるんだけど、unlink出来ないみたいです。


493 名前:>491 投稿日:2000/09/05(火) 22:16
消すのはそのディレクトリが xx7 でないと駄目では?

494 名前:名無しさん 投稿日:2000/09/05(火) 22:42
>>493
xx6で可能?ディレクトリンに書き込み権限あればOKでしょ

495 名前:493 投稿日:2000/09/05(火) 22:54
うんにゃ、ディレクトリの実行権はアクセス権なので
たぶん駄目だと思います。

496 名前:名無しさん 投稿日:2000/09/06(水) 00:38
>486
エラーというよりヲーニングすね。
文字コードがうまく判定できないで変数$icodeが未定義のまま
該当行を実行するとこの警告がでてきます。だから

>ふつうは自動判定するのに、相反するようなコードが含まれているからエラーになる、
>という認識でよろしいでしょうか?

でオッケー。ちなみに相反する文字コードじゃなくても
"ココモマターリスレニンテイ(;´ー`)y−〜〜"
てな文字列を与えても、おなじ警告がでました(ワ

497 名前:別の話 投稿日:2000/09/06(水) 04:03
for(;;)
{
  open( FILE , "file.dat" );
  if(<FILE>)
  {
    last;
  }
  close( FILE );
}

file.datの中身が真になるまでのループなんですけど、
これはfile.datの中身を壊しますか?


498 名前:480 投稿日:2000/09/06(水) 04:16
> 483さん、487さん、Synさん

アドバイス大変参考になりました。
ありがとうございました。


499 名前:japu 投稿日:2000/09/06(水) 04:47
1 while(not -s "file.dat");
とするのが良いと思います。ハイ☆

# 別の話さんのやり方でもファイルの中身を破壊することはありませんが。

500 名前:491 投稿日:2000/09/06(水) 05:36
>>493-495
う…ディレクトリか…。忘れていた…。
ありがとうございます、そっちからチェックしてみます。


501 名前:超初心者 投稿日:2000/09/06(水) 05:55
全くの初心者ですみませんがよろしくお願いいたします。

文章の入力のページとそれが出力されるページが違うモノが作りたいです。

友達にHP作ってあげていて、その人用に文章入力のためだけの
ページを渡し(もしくはそのページのURLだけを教えて)、
そのページに文章を入力するとあらかじめ作っておいた
ヒナ型のページにその内容が反映されるということがしたいのですが
どのようにすればよろしいのでしょうか?

わかりづらい質問ですみませんがご教授下さい。

502 名前:むぎ茶 投稿日:2000/09/06(水) 09:55
501へ
初心者とバカとは違います。
あなたにはお花畑板が似合いそうです

〜501は放置〜


503 名前:>501 投稿日:2000/09/06(水) 10:21
入力フォーム部と過去ログ表示部が分かれてるやつでしょ?
お知らせ用に管理者が使うような。
改造なら簡単だけど。探せば専用のものもあるよ。

504 名前:501 投稿日:2000/09/06(水) 13:08
>503さま   その通りです。
そういったモノの検索サイトってあるのでしょうか?

505 名前:toc 投稿日:2000/09/06(水) 13:17
表示部のCGIでリファラが入力用フォームからのものかチェックし、
入力用フォームからそのCGIを呼び出すだけでいいんじゃないの?

506 名前:503 投稿日:2000/09/06(水) 14:44
まず適当な板をDLして、メインのCGIだけコピーして2つ用意します。
1つは管理者用にそのまま使い。もうひとつはログ表示用に投稿フォーム
の表示部を削除します。ページからリンクさせるのは後者だけ。

検索あるらしいけど知らないね。知ってるのはHP板の人じゃないの。

507 名前:名無しさん 投稿日:2000/09/06(水) 14:49
>>499
japuさん、ビジーウェイトしてまっせ。
sleep 1 while -s $file;
だったらよいか?


508 名前:名無しさん 投稿日:2000/09/06(水) 17:59
HTMLファイルを読み込んで
それをテキストベースで編集できるCGI捜しています。

509 名前:名無しさん 投稿日:2000/09/06(水) 18:37
頑張ってください!

510 名前:名無しさん 投稿日:2000/09/06(水) 19:11
>508
メモ帳を使え
〜完〜

511 名前:toc 投稿日:2000/09/06(水) 19:12
>>508
フォームの中で
print "<textarea name=\"hoge\" cols=\"70\" rows=\"15\">";
print read_html("filename");
print "</textarea>\n";
でいいんじゃないの?submitで保存。

512 名前:japu 投稿日:2000/09/06(水) 21:01
499:
あぁ。ゴメン。コピー失敗していた。
最初に sleep 入れていたんだけど。
てなわけで、
sleep 1 while(not -s "moe.txt");

513 名前:名無しさん 投稿日:2000/09/06(水) 21:40
TXTファイルを読み込んで
それをCGIの出力結果で

<html>
<head>
<title></title>
<head>
<body>
<pre>
ここにTXTの内容を入れたい
</pre>
</body>
</html>

と排出させるやつを考えているのですが
今までデザインを変えるくらいしか
やったことないので どうか教えてください。

514 名前:japu 投稿日:2000/09/06(水) 22:25
open FILE, "< moe.txt" or die;
print "<pre>\n";
print while(<FILE>);
print "</pre>\n";

515 名前:513 投稿日:2000/09/06(水) 22:50
本当に初心者なんで
#!/usr/local/bin/perl
からの記述希望です。
本当に情けないのですがよろしくお願いします。


516 名前:513 投稿日:2000/09/06(水) 22:55
できました。
やっぱり基本もわからないと
つらかったです ありがとうございました。

517 名前:508 投稿日:2000/09/06(水) 23:30
>>513
それでHTMLがテキストエリアに表示できましたが
それを書き換えて保存する方法がわかりません。
すみませんが 保存する方法を教えてもらえないでしょうか?
&SJIS変換で。

518 名前:名無しさん 投稿日:2000/09/06(水) 23:49
自分ではどうやればいいと思う?
ほかのページとかみて考えなさいな

まずFORMを扱えるようになりましょう
いきなりファイルを編集しようとするまえに。
あとは <pre> を<textarea> に変えればうまくいくと思うぞ

519 名前:名無しさん 投稿日:2000/09/06(水) 23:50
>>517
努力のあとがうかがえないな、シンデネ

520 名前:508 投稿日:2000/09/07(木) 00:00
517の>>513>>511の間違えでした

521 名前:名無しさん 投稿日:2000/09/07(木) 00:03
↑なんだよ、似たような質問が2つあったのかよ。

522 名前:508 投稿日:2000/09/07(木) 00:16
すみません まぎらわしいことしてしまって

一応フォームからテキストエリアの内容をCGIに渡すことは
わかりますがそれの書き込み方がわからないのです。
よろしくお願いします。

523 名前:508 投稿日:2000/09/07(木) 00:22
$aaaという変数(テキストエリア)を
aaa.htmlに出力させる方法がしりたいです。
言葉下手なんでどうかこの辺で勘弁してください。

524 名前:名無しさん 投稿日:2000/09/07(木) 00:23
Perl初心者です。教えてください。普段はCをやってます。
IPアドレスの管理方法についてです。
アンケートなどで一人1票の場合IPをファイルに保存して
以降そのファイルにまだ保存されていないIPのみ有効にすればいいですよね?
それでIPの比較の方法ですが、たとえば 127.0.0.1 とかのIPの場合文字列で
比較するのが簡単ですがそれだとスピード的に遅いので4バイトのバイナリ
(CでいうDWORD)で比較するのがいいと思いますがPerlでできますか?
自分が読んでる本にはPerlには数値と文字列の区別が無いとか書いてあるんですけど。
数値と文字列の区別がないならDWORDみたいなことってできませんよね?


525 名前:名無しさん 投稿日:2000/09/07(木) 00:36
open(OUT,'>aaa.html') or die;
print OUT "$aaa";
close(OUT);

526 名前:>524 投稿日:2000/09/07(木) 00:38
できるんならCでやろうよ(;´Д`)

527 名前:名無しさん 投稿日:2000/09/07(木) 00:39
>524
pack とか使えばできるだろうけど、この場合
ハッシュにつっこんで検索のほうが簡単便利で十分早いと思うが

528 名前:名無しさん 投稿日:2000/09/07(木) 00:47
525の補足
textarea に表示・保存する場合、たいていの場合
TAGの変換が必要になると思うので気をつけて。
SJIS変換はjcode ですな。

529 名前:508 投稿日:2000/09/07(木) 00:57
#!/usr/local/bin/perl

require './jcode.pl';
$aaa = $FORM{'bbb'};
&jcode'convert(*aaa,'sjis');
open(OUT,'>ccc.html') or die;
print OUT "$aaa";
close(OUT);
__END__

で500エラー出てしまいました。
改行コードの統一などは後でつけるつもりなのですが
どこかおかしいところはあるでしょうか?

530 名前:名無しさん 投稿日:2000/09/07(木) 01:06
>508
print "Content-type: text/html\n\n";
print "<HTML>セーブ終了</HTML>";
が無いんじゃないか?(笑)


531 名前:名無しさん 投稿日:2000/09/07(木) 01:14
>>508
print "Content-type: text/plain\n\n終了\n";
がないんじゃないか?(ワラ

532 名前:508 投稿日:2000/09/07(木) 01:17
531さん 答えてくださったみなさんありがとうございます
どうにかできました。

本当にありがとうございました

533 名前:名無しさん 投稿日:2000/09/07(木) 01:22
なんだ、ネタだったのか(;´Д`)

534 名前:名無しさん 投稿日:2000/09/07(木) 02:06
>524
おれもバイナリにする必要ないと思うけど、いちおう・・・

$ip = "127.0.0.1";
$dword = pack("C*", split(/\./, $ip));

逆変換は
$ip = join(".", unpack("C*", $dword));

またはSocketモジュールを使って
use Socket;
$ip = "127.0.0.1";
$dword = inet_aton($ip);

この場合はホスト名でもオーケー。
use Socket;
$ip = "localhost";
$dword = inet_aton($ip);

535 名前:名無しさん 投稿日:2000/09/07(木) 05:19
524です。

レスして頂いた方ありがとうございます。
バイナリ変換の必要なしってことですね。

自分がやろうとしてたことをCで書いてみます。
簡単に書くために一部省略してあります。
こういうことってpackなどを使用すればPerlでできますか。

BOOL IP_check(char *IP) // IP...チェックするIPです。とりあえず( 127.0.0.1 )
{
DWORD new_IP;
DWORD file_IP[1000]; //ファイルから読み込むIP格納用(実際は malloc などで動的に確保)
LONG i , file_IP_num;

new_IP=(127<<24)+(0<<16)+(0<<8)+1; // char *IP を DWORD に変換。実際はちゃんと処理します。(省略です)
file_IP_num=read_IP_file(file_IP); // ファイルに保存されているDWORD配列(バイナリ)IPを読み込みます。
for(i=0 ; i<file_IP_num ; i++)
{
if(file_IP[i]==new_IP) return FALSE; // すでに同じIPがあるので FALSE を返します。
}
file_IP[file_IP_num]=new_IP;
save_IP_file(file_IP , file_IP_num+1); // DWORD配列にIPを追加しバイナリのまま保存します。
return TRUE;
}

DWORD配列みたいなのを作ってループ構造で各配列要素と比較ってできますか。
それとCGIでCって使えますよね?
どうやって使うんですか?CGI用のコンパイラとかあるんですか?
普段はVC++でWindowsのプログラム書いてるんですが、何故か急にCGIを書くことになりました。
それではよろしく。


536 名前:名無しさん 投稿日:2000/09/07(木) 05:34
535を書いた524です。
すいません。ちょっと長かった。
しかもタブ文字がHTMLで省略されて読みにくい。

537 名前:名無しさん 投稿日:2000/09/07(木) 14:49
>それとCGIでCって使えますよね?

標準入出力と環境変数の参照が使えれば何でもCGIになれます。
ただこの場合、CだろうがPerlだろうが DBM使うのがいいと思います。
(Winだと標準ではDBM無いですけどね、Cのみだと)

538 名前:名無しさん 投稿日:2000/09/07(木) 15:51
以下のことをやるPerlスクリプトは、
どう書くのですか?

テキストファイルを標準入力で読み込んで、
ある長さごと
(たとえば、全角1000文字ごととか、2000バイトごととか)
に分割して、別ファイルに書き出す。

別ファイルのファイル名は、
file_1、file_2、file_3、…
というような適当な名前でOK。

よろしくお願いします。

539 名前:名無しさん 投稿日:2000/09/07(木) 16:18
#! /usr/local/bin/perl

use FileHandle;

my $filePrefix = "test";
my $splitByte = 2000;

my $buf;
for(my $nth = 1;read(STDIN, $buf, $splitByte);$nth ++){
my $fh = new FileHandle();
$fh->open("${filePrefix}_$nth", "w") or die "Can't open file ${filePrefix}_$nth:$!\n";
print $fh $buf;
$fh->close();
}


540 名前:名無しさん 投稿日:2000/09/07(木) 16:45
httpsのサイトからデータを取るため、Crypt::SSLを使用したスクリプト
を書いているのですが、どうも連続でデータを取りに行くとプログラム
が落ちてしまいます。以下にサンプルを示します。


use LWP::UserAgent;
#use LWP::Debug qw(+);

sub get_html
{
my $ua = new LWP::UserAgent;
my $req = new HTTP::Request(GET => $_[0]);
my $res = $ua->request($req); //ここで落ちる
#以下省略
}


$url= "
https://www.asahi.com/"; //httpの場合
get_html($url); print "1\n"; //1回目OK
get_html($url); print "2\n";  //2回目OK

$url2= "https://www.nodeworks.com/splash.htm"; //httpsの場合
get_html($url2); print "3\n"; //1回目OK
get_html($url2); print "4\n"; //2回目NG


ということで最後の行を実行すると落ちてしまうのですが、なにかお気づき
の点がありましたら教えてください。

こちらの環境はActivePerl5.6 on Win2000でCrypt::SSLモジュールは
ppmでインストールしました。なおnodeworksというのはSSLのreadmeに
のってたアドレスで、httpsである以外特に意味はありません


541 名前:名無しさん 投稿日:2000/09/07(木) 16:52
>540
初心者コーナーの範疇を離れてると思う
地道にデバッガで追ってみてはどうでしょうか?

542 名前:名無しさん 投稿日:2000/09/07(木) 16:58
ちょっとした疑問ですが…
GETメソッドは URLに付加するから、
FORMタグで簡単にサーバー越せますよね。

そうすると…
POSTメソッドだと…STDINだから無理って事ですか?
それとも、それでもサーバーを越す方法があるのかな…。

Duke系の攻撃への防御を考えていて気付いたんですが。
もし越せないなら、メソッドをPOST限定にして作れば、
他サーバーからの攻撃は防げることになりますよね。

543 名前:名無しさん 投稿日:2000/09/07(木) 17:07
538から539さんへ。ありがとうございます。
すばらしい。早い、安い、うまい、ですね。
動かしてみたら、ちゃんと、ばっさり分割してくれました。
2バイトの漢字コードの途中で分割するので、
漢字の場合、読めなくなるんで、
その対策は、僕のほうで考えます。
お手数おかけしました。


544 名前:名無しさん 投稿日:2000/09/07(木) 17:14
>他サーバーからの攻撃は防げることになりますよね。
サーバーとクライアントの理解がごっちゃになってるな…。

545 名前:むぎ茶 投稿日:2000/09/07(木) 17:15
>メソッドをPOST限定にして作れば、
>他サーバーからの攻撃は防げることになりますよね。


アホだね。



546 名前:542 投稿日:2000/09/07(木) 17:46
マジアホでした。
別の板見ていて気付きました。

鬱だ氏のう…

547 名前:名無しさん 投稿日:2000/09/07(木) 23:04
>524=535

>DWORD配列みたいなのを作って
これはPerlじゃ効率よく作れないと思います。
データを1つの文字列にごそっと読み込んで、
先頭から4バイトずつ見ていくのが近いかな?
読み込んだデータを @array = unpack('N*', $data) で
先頭から4バイトごとに32ビット数値として配列に格納する
ことはできるけど、DWORDのまま扱うわけじゃないし。

>ループ構造で各配列要素と比較ってできますか。
そりゃできますけど、やっぱりperlでは素直にDBなり
ハッシュなり使うことを勧めます。
つーか、Cでも535にあるみたいなリニアサーチは
やんないほうがいいのでは・・・

548 名前:名無しさん 投稿日:2000/09/08(金) 00:26
524=535です。
どうもありがとうございました。

ところでさらに初歩的な質問ですが・・・
IP(例えば 127.0.0.1 )の4つの部分(127と0と0と1の部分)って
どういう規則性で割り振られているものなんですか?



549 名前:名無しさん 投稿日:2000/09/08(金) 01:00
jpnicに申請してみれ

550 名前:名無しさん 投稿日:2000/09/08(金) 01:13
>548
基本資料はこれかな?
http://ring.shibaura-it.ac.jp/pub/doc/RFC/rfc1466.txt
もう古い? 教えてjapuさんトカイッテミル

551 名前:名無しさん 投稿日:2000/09/08(金) 01:30
548です。
英語は基本的に読めないので何となくですが、最初の部分(127の所)は国とか広い地域で
下の桁に行くほど狭い地域になるってことですよね?



552 名前:japu 投稿日:2000/09/08(金) 03:46
とりあえず、アドレスのプレフィクスによってクラス何とかとして割り当てる方法は既に廃れて、現在はクラスの無い割り当て (CIDR) になっているはずです。

まだ私は読んでいませんが、RFC 1466 はすでに廃れたものになっているので、RFC 2050 を読むと良いかも:
http://rfc.asuka.net/rfc/rfc2050.html

553 名前:名無しさん 投稿日:2000/09/08(金) 07:01
>>121
121で出ている、rmtreeの使い方を知りたいんですが…
どなたかご存じ無いですか?

引数と戻り値(成功or失敗)が解ればOKです。

554 名前:名無しさん 投稿日:2000/09/08(金) 10:50
perldoc Path
によると
It returns the number of files successfully deleted.
Symlinks are treated as ordinary files.
だそうです
でも こいつエラーがでるとばしばし carp するから使いにくくて
きらい

555 名前:550 投稿日:2000/09/08(金) 16:33
>552
japuさんありがとーん。RFC2050もらいました。
ああ読むべきRFCがどんどん増える。全部読めるのはいつの日か

556 名前:名無しさん 投稿日:2000/09/08(金) 22:53
うお。初心者の質問かっていうのもあるな。
勉強になる。

557 名前:むぎ茶 投稿日:2000/09/09(土) 05:22
&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9617;&#9618;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;
&#9619;&#9619;&#9619;&#9617;&#9618;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9617;&#9618;&#9619;&#9619;&#9619;&#9619;&#9617;&#9618;&#9619;
&#9619;&#9619;&#9619;&#9617;&#9618;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9617;&#9618;&#9619;&#9617;&#9618;&#9619;&#9617;&#9618;&#9619;&#9619;&#9619;&#9619;&#9619;&#9617;&#9618;&#9619;&#9619;
&#9619;&#9617;&#9617;&#9617;&#9617;&#9617;&#9617;&#9618;&#9619;&#9619;&#9619;&#9617;&#9618;&#9619;&#9617;&#9618;&#9619;&#9619;&#9617;&#9618;&#9619;&#9619;&#9619;&#9619;&#9617;&#9618;&#9619;&#9619;
&#9619;&#9617;&#9618;&#9619;&#9619;&#9619;&#9617;&#9618;&#9619;&#9617;&#9617;&#9617;&#9617;&#9617;&#9617;&#9617;&#9617;&#9618;&#9619;&#9619;&#9619;&#9619;&#9619;&#9617;&#9618;&#9619;&#9619;&#9619;
&#9619;&#9617;&#9618;&#9619;&#9619;&#9619;&#9617;&#9618;&#9619;&#9619;&#9619;&#9617;&#9618;&#9619;&#9617;&#9618;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9617;&#9617;&#9618;&#9619;&#9619;&#9619;
&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9617;&#9618;&#9619;&#9619;&#9619;&#9617;&#9618;&#9619;&#9617;&#9618;&#9619;&#9619;&#9619;&#9619;&#9619;&#9617;&#9618;&#9617;&#9618;&#9619;&#9619;&#9619;
&#9619;&#9619;&#9619;&#9619;&#9619;&#9617;&#9618;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9617;&#9618;&#9619;&#9619;&#9619;&#9619;&#9617;&#9618;&#9619;&#9617;&#9618;&#9619;&#9619;&#9619;
&#9619;&#9619;&#9619;&#9619;&#9619;&#9617;&#9618;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9617;&#9618;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9617;&#9618;&#9619;&#9619;&#9619;
&#9619;&#9619;&#9619;&#9619;&#9617;&#9618;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9617;&#9618;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9617;&#9618;&#9619;&#9619;&#9619;
&#9619;&#9619;&#9619;&#9617;&#9618;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9617;&#9618;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9617;&#9618;&#9619;&#9619;&#9619;
&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;&#9619;

558 名前:名無しさん 投稿日:2000/09/09(土) 05:46
>むぎ茶

それ、やたら見かけるけど何?

559 名前:むぎ茶 投稿日:2000/09/09(土) 09:11
見てわからんやつには、言ってもわからん

560 名前:名無しさん 投稿日:2000/09/09(土) 15:35
まあそのとおりだが。UTF8 に対応してるブラウザで読め。>558

561 名前:名無しさん 投稿日:2000/09/09(土) 16:11
なんかハテナマークしか見えないんだけども…

562 名前:名無しさん 投稿日:2000/09/09(土) 16:27
UTF8 に対応してるブラウザで読め。>561

563 名前:名無しさん 投稿日:2000/09/09(土) 19:13
IE5.01じゃだめなの?

564 名前:名無しさん 投稿日:2000/09/09(土) 19:42
IE5.01だけど、残念ながら見られるよ。
はっきり言って「うざい」

565 名前:MM 投稿日:2000/09/10(日) 00:40
ド素人っす。
「名無しさん,北海道,26,男,よろしくお願いします。」
この文字列をカンマを区切りに
$name、$place、$age、$sex、$comment
に分割して代入するにはどのようにすればいいんでしょうか。
またデータの区切りにカンマは適当ですか。


566 名前:名無しさん 投稿日:2000/09/10(日) 00:50
($name,$place,$age,$sex,$comment)=split(/,/,"名無しさん,北海道,26,男,よろしくお願いします。");


567 名前:>565 投稿日:2000/09/10(日) 00:55
データにカンマを含まないなら適当。

568 名前:MM 投稿日:2000/09/10(日) 00:57
ありがとうございます!>566、567

569 名前:名無しさん 投稿日:2000/09/10(日) 02:09
データの区切りに\tは適当ですか?

570 名前:名無しさん 投稿日:2000/09/10(日) 02:34
私は \t にしてます。普通に使いたい時はスペースで代替してほとんど問題ないし、
カンマはけっこう使うことがあるから、ちょっと不便。



571 名前:名無しさん 投稿日:2000/09/10(日) 03:37
\tが一番いいよね
formでTAB入れるの難しいし(って、可能?)

572 名前:名無しさん 投稿日:2000/09/10(日) 03:44
>571
コピぺすれば誰にでも可能です。

573 名前:572 投稿日:2000/09/10(日) 03:49
プログラム系の掲示板だとよく使われるので
俺はTABはそのままログに書き込んで
表示させるルーチンにこんなの入れてます

$comment =~ s/\t/&nbsp;&nbsp;&nbsp;&nbsp;/g;

574 名前:572 投稿日:2000/09/10(日) 03:51
あ、実体参照そのまま書いちゃった(笑)
実際はこうです。

$comment =~ s/\t/&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/g;

575 名前:名無しさん 投稿日:2000/09/10(日) 03:57
「CGI」に使うデータの区切りなら<>が一番と誰かが
言ってましたが、本当ですか?
確かにデータ中には<>はもちろん、<や>自体も削除しちゃうので
分からないでもないですが、なんかイヤ

576 名前:名無しさん 投稿日:2000/09/10(日) 04:10
俺もその辺は昔悩みました・・・
566のようにして、フォームからの取得の時は
半角カンマを全角に置き換えるとか・・・。
でも、直接ログを見るとき見にくいので(そうそうないですけど)
今は<>でやってます。
うーん、やっぱ冗長かなー・・・。って今でも悩んでるや(w

577 名前:名無しさん 投稿日:2000/09/10(日) 04:19
結論
区切りは「<>」に決まり。

578 名前:名無しさん 投稿日:2000/09/10(日) 04:36
区切り\t見づらい?
掲示板なんかのデータ直で見るの、非常に見易いけど。
ズレが気になるならエディタのタブの長さ変えればいいし。
ついでに<>だと2バイトかかるけど\tだと1バイトですむ。


579 名前:よく読もう>578 投稿日:2000/09/10(日) 04:57
>半角カンマを全角に置き換えるとか・・・。

580 名前:名無しさん的 投稿日:2000/09/10(日) 13:32
\n と \t を区切り。特殊か?

保存時に文字列に \t が入っていれば全角スペースにする、
\n を含む複数行に渡る文字列なら先頭行に ¥t 入るように(s/\n/\n\t/)変換してる。
読む時は \t 削る。
一行一情報にはならんから面倒だけど $/ つかえば読む時に空改行が区切りになるし。
エディタでログいじりやすい。

581 名前:名無しさん 投稿日:2000/09/10(日) 16:13
俺は\0。

582 名前:名無しさん 投稿日:2000/09/11(月) 11:41
\0にいっぴょ。


583 名前:名無しさん 投稿日:2000/09/12(火) 18:54
wakwakざんまいでCGI設置するのに相対パス指定
を変えないといけないんですがrequire や open
の他に変えるとこあったら教えてください。

584 名前:名無しさん 投稿日:2000/09/12(火) 19:04
\0だとエディタで編集できなくない?


585 名前:名無しさん 投稿日:2000/09/12(火) 22:09
Perlでよそのサーバにあるhtmlファイルを読みたいのですが
どうしたらできますでしょうか?


586 名前:名無しさん 投稿日:2000/09/12(火) 22:38
参考 >>585
http://www.kakiko.com/check/sample.html

587 名前:名無しさん 投稿日:2000/09/13(水) 11:52
単にログファイルにIPアドレスを書き込ませるには
どうしたらいいですか?

588 名前:>587 投稿日:2000/09/13(水) 12:42
print FILE $ENV{'REMOTE_ADDR'};
です。

589 名前:名無しさん@9月病 投稿日:2000/09/13(水) 12:47
>>587
環境変数 REMOTE_ADDR に IPアドレス、
REMOTE_HOST にホスト名(たまに無かったりIPになったりする)がセットされているので
%ENV から読み出します。
$ENV{'REMOTE_ADDR'} の形で変数を保存すればいいかと。
ファイルへの保存方法はわかりますよね?

590 名前:mika 投稿日:2000/09/13(水) 13:05
初めてCGIを作りたいと考えてるものです。


何か初心者用で参考になる本とか教えて欲しいんですけど。
具体的でなく申し訳ないです。


591 名前:むぎ茶 投稿日:2000/09/13(水) 14:13



「初めてのPerl」
KENTやrescueの本はクソ 

592 名前:名無しさん 投稿日:2000/09/13(水) 15:11
クソっていうなウンコといえ!

593 名前:( ´∀`)さん 投稿日:2000/09/13(水) 16:24
>>590
できるだけ書店で立ち読んでから買えよ。本代高いから
http://www.kiwi-us.com/~gonosuke/cgibook/
http://www.att.or.jp/books/perlbook/

594 名前:( ´∀`)さん 投稿日:2000/09/13(水) 16:26
http://www.harukaze.net/~mishima/perl/books/books-perl.html

595 名前:587 投稿日:2000/09/13(水) 16:27
>>587-589
いまから実際にやってみます。ありがとうございます。

596 名前:585 投稿日:2000/09/13(水) 17:30
>>586さん
無事にサブルーチン化できました。
どうもありがとうございました。
一人じゃ絶対出来なかった・・・ほっ

597 名前:mika 投稿日:2000/09/14(木) 12:54
591さんありがとうございます。
これから私は591さんを目指してCGIの学習に励むことにします。

594さんもありがとうございます。感謝
593さん、ありがとう。ちゃんと立ち読みしてから買うからね。
みか

598 名前:ぽんきち 投稿日:2000/09/15(金) 13:56
すみません、みなさん。
教えてください。

<img src="〜.cgi></img>

を使ってHTMLにCGIを埋め込もうとしてますが、
どうしても画像が出てくれません。
エラーマークが出てしまいます。(涙)

下がソースです。

print "Content-type: image/gif\n\n";
print "Home.gif;

Home.gifは.cgiと同じディレクトリに入れてます。
ファイルがおかしいのでしょうか?
アップロードするサーバは、win2000です。

どうか、ご指導お願いします。

599 名前:ぽんきち 投稿日:2000/09/15(金) 13:59
print "Home.gif;→→print "Home.gif";

入力ミスです。
ごめんなさい。

ご指導お願いします。

600 名前:>598 投稿日:2000/09/15(金) 15:11
"Home.gif" という文字列を出力したって、画像が出るわけありません。

print "Content-Type: image/gif\n\n";
open GIF, "Home.gif" or die "can't open gif image : $!\n";
binmode GIF;
$/ = undef;
print <GIF>;
close GIF;

とか?


601 名前:ぽんきち 投稿日:2000/09/15(金) 15:46
600さん

どうも、ありがとうございます。
無事に出来ました。

2ちゃんねるってすごい・・・
実感しました。

感謝!

602 名前:> 投稿日:2000/09/16(土) 14:16
質問です。
よくCGIに使うPerlスクリプトがS-JISで書かれていると
「お子さま向け」とか、言われているようなのですが、
なぜなんでしょうか?
EUCの方が優れている点を教えてください


603 名前:名無しさん 投稿日:2000/09/16(土) 15:35
ruby の作者も見ている ruby 掲示板ってないですよね?
ML のほうに伝えてほしいのですが、
ruby 本の p.p.71
s.captialize -> s.capitalize
だということを。


604 名前:名無しさん 投稿日:2000/09/16(土) 21:16
>602
お子様向けなんて聞いたこと無いな。(w
>603
本の出版社に手紙を送っておけ。

605 名前:名無しさん 投稿日:2000/09/16(土) 22:46
>>602
http://www.din.or.jp/~ohzaki/perl.htm#JP_EUC_JP
あたりを読むと60%ぐらいは理解できるかも。

>>604
とりあえず聞いたことはある。氏かも他ならぬこの2chのどっかで。
# でも他では聞いたこと無い。

606 名前:名無しさん 投稿日:2000/09/16(土) 23:18
>>605
俺は、この板の「掲示板を作ろう」っていうスレで見た覚えが有るぞ(w

607 名前:名無しさん 投稿日:2000/09/17(日) 01:37
DBMのファイルの容量上限って、どれくらいなんですか?
あと、SDBMなどがあるそうですが、それはサーバによって変わるのですか。


608 名前:名無しさん 投稿日:2000/09/18(月) 01:40
>>602
一寸実際に落として説明。
EUCは文字コードとして2バイト文字と1バイト文字がかぶらないので、
文字化けのことを考えなくてよくなる。SJISだとその辺余計な手間が多くなる。

でもSJISは特にwindowsだとデータファイルとかを普通に
テキストエディタで書いておけば通るのでその辺は気楽。
EUCはコード変換とか必要になってうざい。
でもEUCの方がCGI本体は手堅いな。ってことで。

要するにSJISはCGIだけしか見てない近視眼的プログラミングゆえに
お子様と呼ばれるのではなかろうかと。

609 名前:名無しさん 投稿日:2000/09/18(月) 02:32
>602
> よくCGIに使うPerlスクリプトがS-JISで書かれていると
> 「お子さま向け」とか、言われているようなのですが、
配布対象が注意書きを全く読まない初心者だということでもあります。
EUC-JPのスクリプトを配布しているサイトのサポートBBSでは
次のような書き込みが激しく“既出”してますから。
「DLして解凍してメモ帳で開いたら文字化けしてます〜(>_<)」


610 名前:srandで 投稿日:2000/09/18(月) 02:50
初歩的な事ですみません。乱数を作る時に、
srand(time);を記述すると、乱数が殆ど変化しません。
srand;だけだと、結構変化します。時刻を乱数の種にしても意味が
ないのでしょうか?



611 名前:名無しさん 投稿日:2000/09/18(月) 05:48
>>610
perl5以上ならsrandしない方がいいと思うよ。俺は。

612 名前:名無しさん@9月病 投稿日:2000/09/18(月) 05:54
意味はあると思うんだけどなあ…。
srand だけだと基数が固定されてるはずだから実行中で1度目、2度目のrand 呼び出しで毎回同じ値が返るはず。
だから time でゆらぎを出すのが目的なはずだし…。
ほとんど変化しないというのは具体的にどういうことなのかな?
rand 呼び出し毎に同じ値ということならなんか別に問題がありそうなのだけど。

613 名前:名無しさん@9月病 投稿日:2000/09/18(月) 05:55
>>611
なにか問題あるんですか?

614 名前:611 投稿日:2000/09/18(月) 06:01
>>613
いや、ただ俺の好みなんで気にしないでくれ(w

615 名前:srandで 投稿日:2000/09/18(月) 06:40
>611さん
srand(time);
$ransuu=int(rand(100));
print "$ransuu \n";

こんな感じで乱数を表示させてます。
実行して75という結果が出た時、再実行するとまた75が出ます。
そして10秒程時間が経つと、76となります。一定の間隔で1づつ
増えてるような感じなのですが。srand;だけだと、数字がばらけます。
Perl5を使っています。


616 名前:名無しさん@9月秒 投稿日:2000/09/18(月) 06:55
>>614
了解!

>>615
らくだ本見たら srand; も srand(time); も同じみたいです。結局 time を引数にしてるようです。
time の値は1秒ごとに増えているので正常に動いているのなら1秒ごとに乱数の値も変わるはずなんですけどね。
小数点以下が変動してましたとかいうオチじゃないよなあ。
手元の Perl for win32 では問題ないみたいでした。

617 名前:名無しさん 投稿日:2000/09/18(月) 07:35
Windowsだと1回目のrandでは乱数が散らばらないことがあるらしいです。
バグかもしれません。ともかくそれを回避するために、これでどうでしょう。

srand(time);
$dmy = rand(1); #1回目のrandはうまく乱数が得られないらしい。
$ransuu=int(rand(100));
print "$ransuu \n";

618 名前:名無しさん 投稿日:2000/09/18(月) 15:50
perl5以降(マイナーバージョンは忘れた)は、
rand呼ぶ段階で勝手に種をセットしてくれます。
マニュアルで種仕込む必要はほとんどなし。

619 名前:名無しさん 投稿日:2000/09/18(月) 17:02
↓のように他のサーバーからファイルを読み込ませたいのですができませんでした
何が足りないのでしょうか?
ご教授お願いします

open(HTML,"
http://www.test.net/test.html");
@a = <HTML>;
close(HTML);
print @a;

620 名前:名無しさん 投稿日:2000/09/18(月) 17:12
わかる方がいましたら、教えてください。

.cgiを実行する際に、
履歴を消す(無効にする)方法・コードは
あるのでしょうか。
一度実行したcgiを、新たに実行したいのです。

cgi実行後、ホームサイトに戻り、またそのcgiを実行すると
以前に実行した時の変数が残っているようなのです。
きっとブラウザが履歴を参照しているせいだと思うのですが・・・

(うまく説明できなくて済みません。)

621 名前:名無しさん@9月病 投稿日:2000/09/18(月) 17:30
>>619
open に指定するファイルは仮想パス(http://ftp://)では読めません。
コンピュータ内の実際のパス(/home/username/HomePage/test.html とか?)にしないといけません。

>>620
一部の環境変数は固定になってるものもありますが
普段使うような変数は実行毎に初期化されてるはずです。
どこかで固定値を代入しているなどが考えられますがコード見ないとわかりません。

622 名前:名無しさん 投稿日:2000/09/18(月) 17:44
>>621
ブラウザのキャッシュに残ってるんじゃない?

623 名前: 投稿日:2000/09/18(月) 17:45
srand(time() ^ ($$ + ($$ << 15)));
ってやりかたを読んだ記憶が。

624 名前:620 投稿日:2000/09/18(月) 18:00
621さま、622さま。
気にかけて頂き、
ありがとうございます。

ホームサイトに戻った後
2度目にcgiを実行させる前に
ブラウザのキャッシュを消すと
うまくcgiが動きます。
やっぱりブラウザの履歴を2回目以降は
参照してしまうようです。

perlでブラウザのキャッシュを消す(無効にする)
方法・コード等がありましたら、教えてください。

コードは恥ずかしくて、皆さんに見せられたモノではありません。
不必要に長くて汚いコードなので・・・(^^;
ご容赦下さい。

625 名前:名無しさん 投稿日:2000/09/18(月) 18:21
CGIで他サーバのOS名を調べることは出来ますか?

626 名前:名無しさん 投稿日:2000/09/18(月) 18:23
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">

あと昔、この板のgif画像を再読み込みさせるという話のとき、
「有効期限を設定する」という方法があったような。
詳しくは忘れたけど。


627 名前: 投稿日:2000/09/18(月) 18:24
ヘッダに
Pragma: no-cache
ボディに
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
CGI引数に
DUMMY=time()
でどーだろ


628 名前:名無しさん 投稿日:2000/09/18(月) 19:17
特定の発言を禁止するPerlの書き方を教えてください。

if((投稿記事内容 =~ /htm/)){
HPの宣伝は禁止です;
exit;
}

こうしたのですがエラーになるんです。
どうすればいいか教えてください。


629 名前:620 投稿日:2000/09/18(月) 19:20
626さま、627さま

有り難うございました。
cgiのなかの HTML表示部分に
(printでタグを吐き出す部分です。)
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
を吐き出させたら、解決しました。
気にかけていただいた皆さまに感謝します。

私も”おしえて君”から卒業したいです。
失礼しました・・・・


630 名前:>628 投稿日:2000/09/18(月) 19:32
>こうしたのですがエラーになるんです。
ネタ?

631 名前:628 投稿日:2000/09/18(月) 20:10
まじです。
教えてください。


632 名前:名無しさん@9月病 投稿日:2000/09/18(月) 21:00
そうかブラウザのキャッシュだったのか。
さっきのカキコは勘違いしてました。

>>628
変数は理解されてます?$message とかに記事が入ってると思うんですが。
「投稿記事内容」というのが単にわかりやすく書いたおつもりなら
逆にわかりにくいだけなんでソースそのまんま書いてくださいね。
それを踏まえて書くと $message =~ /htm/ ですが、とりあえず書籍かPerlの支援サイトをよく読みましょう。

あと文字を表示させるには多分ヘッダも出してないでしょうから
print "Content-type: text/html\n\n";
print "HPの宣伝は禁止です";
としましょう。

633 名前:名無しさん 投稿日:2000/09/18(月) 21:08
http://dictionary.hypermart.net/pl/mkpwd.txt
の文字列を作った後a.txtとかに表示させたいのですが
どうすればいいですか?ちなみに文字列作るときはローカルでやってます

634 名前:srandで 投稿日:2000/09/18(月) 23:02
>616、617、618、ぽさん、ありがとうございます。
原因は不明ですが今日同じコードを実行したら10秒ごとに
乱数が増えるという変な現象が出なくなりました。
うちのWIN固有の問題だったようです。
お騒がせしました。

635 名前:丸々 投稿日:2000/09/18(月) 23:45
めちゃ初心者なんですが、質問があります。
WebサーバーがNT4.0で構築されてるんですが、フォームメールをperlで作りたいと思ってる
ですが、sendmailが使えません。この場合どのようなやり方があるんですか?
調べてみたところsendmail.pmとか使いなさい!ってあるですがDLしてきてはみたものの
インストールもできません。ActivePerlはインストールしてあるんですが、どうやっていいか教えてください。
sendmail.pm以外にも簡単にsendmailが使える方法もあったら教えてください。
よろしくおねがいします。

636 名前:せお 投稿日:2000/09/18(月) 23:58
1000hit/日程度のサイトを運営しています。
カウンタ&ログ取得にはteraco2を使用しております。
http://www.chibaken.net/cgi_s/teraco2/index.htm
これの1日1回カウント機能なのですが、これはどれぐらいサーバに負担をかける&
訪問者の読み込み時間に影響するものでしょうか。
大したことないのなら使いたいし、結構影響が大きいのだったら止めておきたいので。
よろしかったらご教授ください。

637 名前:名無しさん 投稿日:2000/09/19(火) 00:30
ホスト名→IPアドレス、のような変換はどうするのでしょうか?(gethostbyaddrの逆)


638 名前:名無しさん 投稿日:2000/09/19(火) 00:34
>637
getaddrbyhost

639 名前:名無しさん@9月病 投稿日:2000/09/19(火) 01:13
>>637
gethostbyname かな。
戻り値は gethostbyaddr と一緒。
(gethostbyname($name))[4] とかやれば一番目のIPアドレスが取得できます。
複数ある場合は [5] 以降にも入ってますけどね。

640 名前:MM 投稿日:2000/09/19(火) 23:08
ファイルロックについて伺います。
ロック→アンロックの間でファイルを読み、
加工して書きこむときに、
「一時ファイルに書きこみ→元ファイルにリネーム」
とするのが安全、とあったのですが何故でしょうか。
ロックされていれば最初から元ファイルに書きこんで問題ないのでは
ないのでしょうか。

641 名前:名無しさん@9月病 投稿日:2000/09/19(火) 23:23
>>640
ロックといっても完璧なものではないだろうからね。
ファイルへの致命的な打撃を避けようということじゃないかな。
リネームを使えば他のプロセスが書き換えるのはなるべく避けられるはずだから。
ロックの精度が高ければ元ファイルに書き込んでもいいと思う、
カウンタやチャットには flock だけだと不安だけど。

どの辺で妥協するかは精度とその人の性格じゃないかな。
私はそこまでしてませんが。

642 名前:MM 投稿日:2000/09/19(火) 23:40
どうもです。>>640

643 名前:MM 投稿日:2000/09/19(火) 23:43
失礼しました。642>641で。

644 名前:無名人 投稿日:2000/09/19(火) 23:44
フリーのサーバ上にて、常に動きつづける CGI を書きたいのですが、
(というと文句言われそうですが、負荷は殆ど無いものです)
なぜか半日程度で止まってしまいます。
シグナルをすべて無視してみましたが結果は同じでした。
繰り返す所を eval で実行するようにしてもエラーが拾えません。
他に何か考えられる事はありますでしょうか?
ゾンビタスクだと思われて殺されてる??
ちなみに、ちゃんと終了方法は持っています。


645 名前:無名人 投稿日:2000/09/19(火) 23:52
×タスク
○プロセス
だったっけ?

646 名前:>640 投稿日:2000/09/19(火) 23:52
・同じファイルを書き直す方法だと基本的にファイル全体をメモリに読み込んで
おかなくちゃならないので、サイズの大きいファイルのときはあまり良くない。

・複数ファイルを書き換えるとき、途中で処理が中断するとファイルの
同期がとれなくなるので、全部一時ファイルに書き出して一気にリネーム
すると、ちょっとだけその危険性が減る。


647 名前:名無しさん 投稿日:2000/09/20(水) 14:09
readme.txtに
ギコ猫
モナー
ゾヌ
-----
という3つの言葉が入っている場合に
↓のコードで実行したのですが、結果が

モナー
はいってよし

…というふうに、改行がされてしまいます。
chopを書く場所を間違えているのでしょうか?

open (FILE_HANDLE,"<readme.txt");
$count=0;
chop $nyuuryoku;
while ($nyuuryoku[$count]=<FILE_HANDLE>){
    chop $nyuuryoku; #chopでもchompでも同じ。
    $count=$count+1;
}
chop $nyuuryoku;
close (FILE_HANDLE);
print "$nyuuryoku[1]はいってよし。\n";

648 名前: 投稿日:2000/09/20(水) 14:29
chop $nyuuryoku;
じゃなくて
chop $nyuuryoku[$count]
ですね。
@nyuuryoku = grep(chop($_), <FILE_HANDLE>);
とかね。

649 名前:名無しさん 投稿日:2000/09/20(水) 15:07
遅まきながら一連のsrandについて。

perldoc -f srand読んでください。
最新のPerlではsrand(time);よりsrand;(または全然srandしない)の方が
よりランダムな初期値を与えます。

5.004以前では確かにsrand;はsrand(time);の意味でした。
perldoc -f srandにはそこらへんの経緯も書いてあるし、
>>623
> srand(time() ^ ($$ + ($$ << 15)));
はもう必要ないとも書かれています。

プロバイダーのperlが5.004以前(5.005未満)の場合は
今までの議論の方が成立します。

ちなみに「CGIではtime ^ $$はダメだよん」とも書いてあった。
やはりperldocは必読ですね。

650 名前:初心者 投稿日:2000/09/20(水) 17:37
初めまして、CGIプログラムを作っているます。
他のサーバーなど外部のHTMLファイルを読み込ませたいのですが、どのようにすればいいのでしょうか?

651 名前:ななしさん 投稿日:2000/09/20(水) 17:46
>647
データに改行が入ってるからでは?

>650
ソケットで検索してみそ

652 名前:名無しさん 投稿日:2000/09/20(水) 20:54
表示されたテキストを自動で保存したいんですが

653 名前:名無しさん 投稿日:2000/09/20(水) 23:27
ぽさん、ありがとうございます。
なるほどー。配列になってるのだから[$count]も必要ですよね
ずっと悩んでたので本当に助かりました。


654 名前:名無しさん 投稿日:2000/09/21(木) 03:48
しょうもない質問だったらすみません。
トクトクで「.cgiのパーミッションは700で」
とありますが、これは(自分以外の)閲覧者は実行不可→
CGIで表示させるページを見られない、ということなんでしょうか?
755で動作していますが。


655 名前:名無しさん 投稿日:2000/09/21(木) 04:07
>654
実験してみれば分るけど
パーミッションの変更だけでアクセス制限は出来ませんよ。

656 名前:>654 投稿日:2000/09/21(木) 04:13
つーかさ…自分で試してみれば済む事じゃない?


657 名前:しろうと 投稿日:2000/09/21(木) 05:00
チャットを移転したのですが、
CGIで他のアドレスに自動でジャンプさせるにはどうしたらいいのでしょうか?
(既存のCGIを置き換えたい)


658 名前:(既存のCGIを置き換えたい)ってのがよく分らないけど 投稿日:2000/09/21(木) 05:17
ロケーションで飛ばせば?

659 名前:>657 投稿日:2000/09/21(木) 05:19
print "Location: 移転先のURL\n\n";

つーかMETAじゃダメなの?

660 名前:名無しさん 投稿日:2000/09/21(木) 05:23
つーかチャットへリンクを貼っているHTMLを書き替えるだけじゃダメなのか?

そこまでしないといけないほど直リンクで来る人が多いのかな。

661 名前:657 投稿日:2000/09/21(木) 05:36
>>659
METAでやったんですが、うまくいかなかったんです。

>>658
既存のCGIを置きかえる、というのは、
infowebで運用してたYYCHATをwakwakに移転させたんです。
そこで、infowebのyychat.cgiにwakwakのyychat.cgiへ自動的に飛ばすcgiを作って、
ファイル名をyychat.cgiにしてinfowebに転送したかったんです。

HTMLなら、
<META HTTP-EQUIV="Refresh" Content="0; url=移転先">
で簡単なんですけどね。はぁ。



662 名前:657 投稿日:2000/09/21(木) 05:38
>>660
複数のWEB持ちでチャットを共同運営してるんです。
リンクを直してくれるまでの繋ぎです。


663 名前:名無しさん 投稿日:2000/09/21(木) 06:16
質問です。
 まるでうまくCGIが動かないとき、テンションが最高に
 下がって、もうファイル全部消して寝ようという気になります。
 仕事でもないので本当に寝てしまって、さっぱり進みません。
 なぜ皆さん完成させることができますか?

ネタ風だけど、そんな感じ… 質問じゃなくて愚痴ですね。すんまそん

664 名前:名無しさん 投稿日:2000/09/21(木) 06:23
>663
ヘボでもいいから動くようにする
→動いたら実際に使う
→使ってみるとヘボなので改良させようと思う
→改良させる

こんな感じ

665 名前:名無しさん 投稿日:2000/09/21(木) 06:34
>>654
あなたは自分が閲覧する時は、自分が管理者だと勘違いしていますね。
あなたも一般ユーザーと同じなんですよ。
自分が見られるなら他の人も大抵見られますよ。

666 名前:名無しさん 投稿日:2000/09/21(木) 06:47
デバッグが上手いひとと下手なひとって、居るよね。


667 名前:名無しさん 投稿日:2000/09/21(木) 12:49
0秒のrefreshはヤメテー。ブラウザのback効かなくなるよう。
「藤原博文の館」の「あきれたページ」参照。
http://www.pro.or.jp/~fuji/horrible/index.html


668 名前:名無しさん 投稿日:2000/09/21(木) 19:08
<META NAME="Location" CONTENT="http://ww.foo.com/">
使えるかな?

669 名前:654 投稿日:2000/09/22(金) 02:29
>655,656,665
そんな感じな気がしていました。
であれば、所有者とはFTPでつないできた人を指すのでしょうか?
700だと確かに実行できなかったのですが、つまりは
そのサーバではCGIを閲覧者に実行させないことを推奨している、
ということでしょうか?


670 名前:名無しさん 投稿日:2000/09/22(金) 04:10
>669
http://tako.2ch.net/test/read.cgi?bbs=perl&key=969323527

owner group nobody
最低限の意味くらい覚えよう。


671 名前:名無しさん 投稿日:2000/09/22(金) 06:20
NT系サーバで
chmod(0600,"$log_file");
とするとUNIX系と同じような動作をしてくれますか?

672 名前:名無しさん 投稿日:2000/09/22(金) 06:46
fork()というのは具体的にどの様な場面で使用するのでしょうか?

673 名前: 投稿日:2000/09/22(金) 10:59
スパゲティなんかを食べるときに.....

じゃなくて fork() すると そこでプロセスが2つに分かれます。
通常は どっちか片一方がすぐさま exec() して別プログラムを起動します。
・別プログラムを起動するときに使用する
がほとんどかなぁ
あとサーバーなんかでソケットに接続があった後でその処理に専念させる
プロセスを fork() したりもします。この場合はexec()せずに
同じプログラムのまま動作します。



674 名前:勉強中さん 投稿日:2000/09/22(金) 23:16
Perlでのメモリの破棄?について教えてください。
現在Perl勉強中です。
ネットで公開してるCGIソースを参考に勉強してたんですが、その中でファイルから変数に読み込んで処理をした最後に undef を使用していました。
本で調べたところ undef...変数などをクリアする って書いてあったんですが、これってメモリの破棄ってことですか?
今までは変数を使ったらそのまま放置してましたが、プログラム終了時などに破棄する必要ありますか?
教えてください。
参考にしたCGIソースはこんな感じでした。

  sysread(IN , $buf , $size);
  close(IN);
  |
  ここで色々処理
  |
  undef($buf);

675 名前:>674 投稿日:2000/09/22(金) 23:25
プログラム終了時には破棄する必要はありません。
あと、my変数はブロック終了時に破棄されます。

{
  my $buf;
  sysread( IN, $buf, $size );
  close( IN );
}

で、上記のコードと同じことになります。
こんなことしないけど。


676 名前:勉強中さん 投稿日:2000/09/22(金) 23:43
どうもありがとうございます。
追加の質問ですが・・・
例えばもともとデータの入っている変数に再度データを入れる場合は自動的に削除されますか?

$buf="データ1";
$buf="データ2";

こういった場合 データ1 は破棄されますか?


677 名前:名無しさん 投稿日:2000/09/23(土) 00:55
されます。
ついでに $buf .= 'データ2'; だと追加になりますね。

678 名前:> 投稿日:2000/09/23(土) 03:25
データ1が超巨大データで、データ2が小さなデータだった場合、
もう$bufに超巨大データを入れる予定がなければ、
いったんundefしたほうがいいかもね。

679 名前:名無しさん 投稿日:2000/09/23(土) 03:29
こういうのってPerlというより、OSの話だと思うけど、undefして解放されたメモリはどうなるの?
プログラム中で再利用されるの?


680 名前:■■■■ 投稿日:2000/09/23(土) 03:43
http://www.freeml.com/join_ml.php?ml=bitvalley

681 名前:勉強中さん 投稿日:2000/09/23(土) 23:05
>>677-680
>677
どうもありがとうございます。
>678
つまりメモリは破棄されるのではなく同じ領域に上書きされるってことですよね?
小さい場合は再確保されその領域にコピーされる?
ってことは $buf .= 'データ2' みたいに追加する処理を複数回行い変数のメモリサイズが増えていく場合、初めに $buf に十分なメモリを確保しておいた方が高速化される?
Perlで変数に指定したサイズのメモリを割り当てることってできますか?
>679
うっ・・自分には全く分かりません。
>680
これに参加しろってことですよね?
登録して気づいたんですがこれMLですよね?
自分は情報交換するほど知識ないんですけど入ってよかったのだろうか・・・


682 名前:名無しさん 投稿日:2000/09/24(日) 00:29
CGIのためのPerlという書籍付属のCDで
Perlをインストールして使っているのですが
Print命令を使うと日本語の表示が一部化けてしまいます。
PerlとJperlの最新版をインストールしようと思うのですが
上書きインストールで良いのでしょうか?

683 名前:名無しさん 投稿日:2000/09/24(日) 01:27
682です。上書きでアップグレードOKでした。
ですが、現象が改善されません。
print "表示 \n";だと「侮ヲ(ヲは半角)」と表示されます。
MS-DOSから実行しているだけなのですが…。




684 名前:名無しさん 投稿日:2000/09/24(日) 02:02
シフトJISで漢字コードの2バイト目がバックスラッシュ( \ )のコードと重複する文字を用いた時に発生します。
とほほのWWW入門を参考にするといいでしょう。
http://wakusei.cplaza.ne.jp/twn/www.htm
perlで日本語を扱うには
http://wakusei.cplaza.ne.jp/twn/wwwperl4.htm#Japanese

685 名前:672 投稿日:2000/09/24(日) 03:52
> 673さん
これから自分で色々と試して理解を深めたいと思います。
ご教授有り難う御座いました。

686 名前:名無しさん 投稿日:2000/09/24(日) 08:13
>684さん
文字化けは、実際にCGIをアップした後に発生する問題だと
思ってました。DOSで実行してるときも発生する可能性があるんですね。
教えて頂いたURL、ブックマークします。ありがとうございました。



687 名前:名無しさん 投稿日:2000/09/25(月) 16:55
あげとく

688 名前:名無しさん 投稿日:2000/09/26(火) 14:24
あやしいみたいなフォントって
どうやって設定するんですか?

689 名前:名無しさん 投稿日:2000/09/26(火) 19:01
あやしいみたいなフォントってナニ?

690 名前:688 投稿日:2000/09/26(火) 19:11
> あやしいみたいなフォントってナニ?
「ぁゃιぃ」のことです

691 名前:>688 投稿日:2000/09/26(火) 20:51
やっぱりそれは使ってるところに直接聞いたほうがいいでしょ。

692 名前:688 投稿日:2000/09/26(火) 21:30
「くずはすくりぷと」って言うんですが
現在配布先がつぶれてて....

あーゆー感じの文字をつかいたくて...

693 名前:>683 投稿日:2000/09/26(火) 21:44
\表\示
とかじゃだめ?

694 名前:名無しさん 投稿日:2000/09/26(火) 23:37
%conv_table = (
あ => ぁ
や => ゃ
し => ι
い => ぃ
);

とか変換してたりして。


695 名前:名無しさん 投稿日:2000/09/26(火) 23:48
macなのですが、ローカルでcgiを試したいときにmacjperlをどう使えばいいのでしょうか?
それとも出来ないのでしょうか?

696 名前:名無しさん 投稿日:2000/09/27(水) 01:45
>695
MacでローカルでCGI、な情報はとても少ないみたいですな。
http://st.sakura.ne.jp/~akehosi/maccgi.html
↑いっこ発見したけど、おれ残念ながらMacユーザじゃないので
これが役に立つサイトかどうかは判断できんです。

697 名前:MM 投稿日:2000/09/27(水) 06:23
$name="田中";
$pass="1234";
print "<a href=\"test.cgi?name=$name&pass=$pass\">クリック</a>\n";

として、クリックしてtest.cgiに値を渡すと、
$nameが「田・Epass=1234」となり、$passに値は入りません。
eucに変換しているのですが、何が原因でしょうか?

「?name=$name &pass=$pass」とスペースを置くと、
「&」をエスケープ?するのは避けられ$passに値が入りますが、
$nameの末尾の文字化けはそのままです。
どなたか対処法教えて頂けませんでしょうか。 



698 名前:名無しさん 投稿日:2000/09/27(水) 06:55
>>697
URL文字列には全角文字含んじゃいけませなん。
$name =~ s/([\w])/sprintf("%%%02X", ord($1))/eg
でとりあえず全角文字とかをエスケープしとけばいい。

699 名前:698 投稿日:2000/09/27(水) 06:57
$name =~ s/(\W)/sprintf("%%%02X", ord($1))/eg
の間違いだった。

700 名前:名無しさん 投稿日:2000/09/27(水) 07:36
>>695
http://tako.2ch.net/test/read.cgi?bbs=perl&key=965914710
『MacでUNIX向けのperlを動かすには?』も併せてどうぞ。
          

701 名前:名無しさん 投稿日:2000/09/28(木) 05:48
Win98、Perl5で
任意のディレクトリ内の複数htmlファイルのJavaScript記述を消去する
スクリプト、書いてみてください。




702 名前:名無しさん 投稿日:2000/09/28(木) 06:19
教えてくださいじゃなくて書いてみろってか?

703 名前:702 投稿日:2000/09/28(木) 06:24
一応書いておくと s/<script>[.\n]*</script>//g; とかか?
これだけじゃ不足だろうけどな。

704 名前:名無しさん 投稿日:2000/09/28(木) 17:55

置換じゃなくてファイルを編集する方法で書いてみた.


#!/usr/local/bin/perl
MAIN:
{
@all = ('test1.html','test2.html');
foreach $file (@all)
{
open(IN,$file);
@line = <IN>;
close(IN);
foreach (@line)
{
push(@out,$_) unless /<script .*/i .. /<\/script>/i;
}
open(OUT,">$file");
print OUT @out;
close(OUT);
@out=();
}

exit;
}


705 名前:名無しさん 投稿日:2000/09/28(木) 17:58
これ自動インデントされるんだね.

open(IN,$file);
while(<IN>)
{
push(@out,$_) unless /script .*/i .. /<\/script>/i;
}
close(IN);

この方が見栄えがいいかも。

706 名前:名無しさん 投稿日:2000/09/28(木) 18:11
<
script
>
とかに対応してないのでは?

707 名前:名無しさん 投稿日:2000/09/28(木) 18:12
あと
<body onload="...">
とか
<a href="javascript:...">
とかもあるよ

708 名前:名無しさん 投稿日:2000/09/28(木) 19:07
自分で書いてみてはいかが

709 名前:名無しさん 投稿日:2000/09/28(木) 19:40
>706
そんなチミにHTML::Parser。

package NoScriptParser;
use base HTML::Parser;
my $n = 0;
sub start {
    my ($self, $tag, $attr, $attrseq, $text) = @_;
    $n++ if ($tag eq 'script');
    print $text if !$n;
}
sub end {
    my ($self, $tag, $text) = @_;
    print $text if !$n;
    $n-- if ($tag eq 'script');
}
sub text {
    my ($self, $text) = @_;
    print $text if !$n;
}

package main;
$parser = NoScriptParser->new;
$parser->parse($_) while (<>);
$parser->end;

710 名前:701 投稿日:2000/09/29(金) 00:16
皆さんアイデア出していただいてありがとうございます。
実はhtmlファイル内の処理もさることながら、
任意ディレクトリ内を検索して複数htmlファイルをリストアップする
部分の記述方法でつまづいています。
巷の書籍ではCGI用途に関する記述が主で、ローカルでのディレクトリ
操作に関する記述が少なく、またわかりづらいです。
もし良書をご存知の方は教えていただけるとありがたいです。
また、上記を解決するスクリプト書ける人は、書いてみてください。

711 名前:名無しさん 投稿日:2000/09/29(金) 01:31
Win95にApacheを入れようと思うのですが、入りません。
apache_1_3_12_win32.exeはインストール完了するのですが
起動時に「プログラム開始エラー」だけのアラートが出ます。
順にバージョンを下げていったのですが、1_3_6に至っては
「return from extract=-7」というエラーでインストールも
できません。
一昨日Windowsの再インストールをしたのですが、その前までは
問題ありませんでした。
どなたかわかる方いらっしゃいましたらお教えください。


712 名前:名無しさん 投稿日:2000/09/29(金) 03:37
スレ・板違いでしたらすみませんが、
特定ユーザーからの投稿を拒否するスクリプトを組もうと思うのですが、
ダイヤルアップの場合、IPの下2桁はその時々でかわりますよね?
厳密にあるユーザー(PC)からだけ拒否するにはどうしたらいいのでしょうか?
できませんか?


713 名前:名無しさん 投稿日:2000/09/29(金) 04:18
Cookie 吐いて個別認識くらいかな。
マシンまで特定するならそれくらいしかできないんじゃないかな。
OFFにしてたら意味ないけど。

714 名前:リソース不足 投稿日:2000/09/29(金) 06:43
ActivePerlとAN HTTPDを使用してWindowsでCGIのテストを行っています。
質問なんですが、CGIプログラムを動かしていくと何故かWindowsのシステムリソースがどんどん減ってしまいます。
最終的にはシステムリソースが不足してWindowsを再起動しなくてはならなくなります。
この原因わかりますか?
CGIプログラムが間違ってるんでしょうか?それともActivePerlとAN HTTPDの設定が間違っているんでしょうか?
教えてください。

715 名前:名無しさん 投稿日:2000/09/29(金) 07:19
チャットの参加表示部分を掲示板に表示させたいのです。
チャットの参加者表示部分のソースが

require 'jcode.pl';
require 'cfx9def.pl';
##################################
dbmopen (%MEMBER, $Memdbm, 0644);
foreach (keys (%MEMBER)){ push (@name, $_); }
dbmclose (%MEMBER);
if($#name == -1){ $names = 'なし'; }
else{ $names = join (' ',@name); }
print "Content-type: text/html\n\n";
print "<font size=2>只今の参加者 : $names</font>\n";
exit(0);

の場合、掲示板の方にはどう追加すれば表示されるのでしょうか?
申し訳無いですが、御教授下さい。

716 名前:名無しさん 投稿日:2000/09/29(金) 07:41
これ、ほとんどそのままでしょ。
表示させたい行の間に下の追加するだけじゃないかな?
require ですでに掲示板内で定義されているのも削っていい。
とりあえずやってみてエラーでたらそのメッセージとか教えて。

require 'cfx9def.pl';
##################################
dbmopen (%MEMBER, $Memdbm, 0644);
foreach (keys (%MEMBER)){ push (@name, $_); }
dbmclose (%MEMBER);
if($#name == -1){ $names = 'なし'; }
else{ $names = join (' ',@name); }
print "<font size=2>只今の参加者 : $names</font>\n";

717 名前:715 投稿日:2000/09/29(金) 12:43
何度もすいません。
716さんの通りに挿入すると、そこから下が表示されなくなりました。
参考になるか分からないのですが
チャットと掲示板の位置はこうなってます。

掲示板::アカウント/xxx/kkk.cgi
チャット::アカウント/yyy/jjj.cgi
cfx9def.plもチャットと同じで::アカウント/yyy/cfx9def.pl
となってます。
掲示板とチャットでは「$name」のみだぶってます。
また、掲示板のcgi内では、require './aaa_bb.pl';という設定ファイルが
有効になっています。

よろしくお願い致します。

718 名前:名無しさん 投稿日:2000/09/29(金) 14:43
701=710>
Dosプロンプトでディレクトリを指定する事を考慮した場合、

$dir = $ARGV[0];
`cd $dir`;
@all = `dir /B *html`;

で指定のディレクトリにある全てのHTMLファイルを持って来れますよ。
あとは配列allを一つずつ回していけばいいだけ。
実行例は
C:\(スクリプトの置いてあるディレクトリ)> スクリプト名 ディレクトリパス(絶対パス)
C:\script\perl> test.pl c:\document\hoge
↑こんな感じ


719 名前:名無しさん 投稿日:2000/09/29(金) 14:59
>718
opendir(),readdir(),closedir()
または
DirHandle.pm


720 名前:名無しさん 投稿日:2000/09/29(金) 15:01
find.pl
または
File::Find.pm


721 名前:名無しさん 投稿日:2000/09/29(金) 16:01
>718
ハンドル使ってディレクトリオープンしても、
grepとかで拡張子*.htmlにマッチするかサーチしないといけないんじゃないの??


722 名前:名無しさん 投稿日:2000/09/29(金) 23:37
> 718
@all = <*.html>;
ディレクトリを変数展開したいなら
@all = glob("$dir/*.html");

723 名前:716 投稿日:2000/09/30(土) 00:39
>>717
>716さんの通りに挿入すると、そこから下が表示されなくなりました。
ちょっと考えが甘かったかもしれません。とりあえず以下のことをやってみてください。

>チャットと掲示板の位置
これは改めて指定しないといけないでしょうね。
同じアカウントでしょうから require '../yyy/cfx9def.pl';
としてチャットのディレクトリにあるこのファイルを読んでください。
もし、telnet が使えるのならCGIをtelnet上で実行してみてもらえれば問題がわかりやすいです。
require で読み込まれなかった場合にはファイルのエラーメッセージが表示されますから。
掲示板のディレクトリ xxx に jcode.pl がないのなら、require '../yyy/jcode.pl'; も指定してください。

>$name
これは挿入する部分だけ変えておいたほうがいいですね。
$chatname とでも変えておけば内容を書きかえられることもないでしょう。

>DBM
ところで $Memdbm の内容は多分、チャットの中でだけ定義されてますよね。
これも指定しておかないといけないので
チャットの方から $Memdbm に代入しているところを持って来てください。

724 名前:名無しさん 投稿日:2000/09/30(土) 03:20
Jperl使っています。Perlではそうならなかったのですが、Jperlだと
"\x82 " !~ /[^<]+ /;
が真のようなのですが、どうすればそうなるのか解りませんでした。
どなたか解説か、解説への誘導をお願いします。

725 名前:名無しさん 投稿日:2000/09/30(土) 04:34
>724
http://www.att.or.jp/perl/win/jperl.html
Jperlにもいろんな種類↑があるですが、どれを使ってるの?
同じの使ってる人がいればわかるかも。
うちのUNIX用jperl(Hirofumi_WatanabeバッチEUC版)だと
724はオリジナルperlと同じ結果になっちゃうので原因はわかりません。

726 名前:701 投稿日:2000/09/30(土) 04:39
>718,719,721,722
うまくいきました。 ありがとうございました。

>720
find.pl 今度はこれを使うように改良してみます。どうも。



727 名前:名無しさん 投稿日:2000/10/01(日) 00:57
ごめんなさい(汗)>725
とりあえずまずは私のJperlの出力を
>Jperl -v
This is perl, version 5.003_07
Copyright 1987-1996, Larry Wall
+ suidperl security patch
Win32 port Copyright (c) 1995-1996 Microsoft Corporation.
All rights reserved.
Developed by ActiveWare Internet Corp.,
http://www.ActiveWare.com
Perl for Win32 Build 316 - Built 12:27:52 Mar 17 1998
Japanization patch 4 by Yasushi Saito, 1996
Modified by Hirofumi Watanabe, 1996. jperl5.003_05.patch7_1
Modified for Win32 by @Tori, 1997
Ported by hizumi@yk.rim.or.jp. Build 117
SJIS version
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5.0 source kit.

ということは●Perl5.003(Perl for Win32)ベースなのでしょうか…(汗)
ドキュメントに載っている最新版の配布場所は、
http://www.yk.rim.or.jp/~hizumi/perl/index.html
を指しています。

728 名前:717 投稿日:2000/10/02(月) 17:37
>723さん
毎回、アドバイスありがとうございます。
以下のように、書き足してみました

require '../yyy/cfx9def.pl';
require '../yyy/jcode.pl';
##################################
$Memdbm = $Dbmdir . $Memberlst;
$Memberlst = 'MEMBERLIST';
$Dbmdir = '../yyy/dbms/';
$Charcode = 'sjis';

dbmopen (%MEMBER, $Memdbm, 0644);
foreach (keys (%MEMBER)){ push (@name, $_); }
dbmclose (%MEMBER);
if($#name == -1){ $chatname = 'なし'; }
else{ $chatname = join (' ',@name); }
print "<font size=2>【チャットの只今の参加者 : $chatname】</font>\n";

掲示板上に、【チャットの只今の参加者 : なし】 と表示されるように
なったのですが、チャットに入室があっても「なし」のまま、表示が
変わりません。
もうしわけないですが、もう少しお付き合い願いますか。

729 名前:名無しさん 投稿日:2000/10/02(月) 19:02
>728
通りすがりの名無しですが、これ
$Dbmdir = '...' と $Memberlst = '...' を設定してから
$Membdm = $Dbmdir . $Memberlst;
を実行しないとだめなんじゃないっすか?

730 名前:716=723 投稿日:2000/10/02(月) 19:16
>>728
おそらく 729 さんの通りでしょうね。
変数は、どこかで代入されていないとその値は空なので一部をコピーして持ってくる場合は、
使っている変数がそのスクリプトの中でちゃんと設定されているかはチェックしましょう。
そういうわけで $Dbmdir と $Memberlst の設定部分をチャットから持って来てください。
また指定ディレクトリが変わるかもしれないので、
ついでに指定方法も覚えてしまったほうがいいかもしれません。

どこかにディレクトリパスのうまい説明されてるサイトないかな?
もしよかったらどなたか教えてください。

731 名前:716=723 投稿日:2000/10/02(月) 19:21
この前のようにディレクトリの頭に "../" を付けるだけで済むのならそれで楽なのだけどね。

732 名前:728 投稿日:2000/10/02(月) 22:09
>716=723さん、729さん
ありがとうございました。
きちんと表示できました。本当に感謝します。
もっと、勉強してきます。

733 名前:名無しさん 投稿日:2000/10/02(月) 23:08
すばらしいカウンターを探しています。
親切な人教えてください!!!

734 名前:名無しさん 投稿日:2000/10/02(月) 23:22
KENTのASKA BBSで
gethostbyaddrでアドレスを取得するのと
$host = $ENV{'REMOTE_HOST'};
$addr = $ENV{'REMOTE_ADDR'};
で、取得するのは
何が違うんでしょうか?

735 名前:>733 投稿日:2000/10/02(月) 23:50
あちこちに書いてんじゃねぇ

736 名前:716=723 投稿日:2000/10/03(火) 01:19
>73
どういたしまして。頑張ってください。

>733
具体的になにが素晴らしいのか謎なんですが…

>734
gethostbyaddr はIPアドレスからホスト名を取得(逆引き)ができますが、
REMOTE_HOST で設定されてるならわざわざやる必要はありません。
REMOTE_ADDR を代入して戻ってくるホスト名とほぼ同じものです。
サーバによっては REMOTE_HOST を返さないものがあるのでその場合に受け取ればいいかと。

737 名前:734 投稿日:2000/10/03(火) 01:39
>>736
勉強になりました
そろそろ、掲示板を作って見ようとソースを読んでいて疑問に思っていました
ありがとうございました

738 名前:>607 投稿日:2000/10/03(火) 14:59
DBMは1レコードの長さが1KBまで、
ファイルのサイズは4KBまでです。
NDBMに関しては私も知らないので誰か教えてください。

739 名前:名無しさん 投稿日:2000/10/03(火) 19:59
referrerを見てhogehoge.netを含んでいたら拒否するということはhttpd.confの
設定で可能でしょうか?可能な場合の書き方がありましたら教えて下さい。
例として、2ちゃんねるに貼られた荒し依頼などをこちらのApacheで弾く。


740 名前:名無しさん 投稿日:2000/10/03(火) 22:36
>739
たとえばRewriteCondとRewriteRuleディレクティブを使えば
リファラ見て特別な処理させることも可能です。
でも、荒氏はふつうリファラーも偽装しますから、
それほどの効果はないんじゃないかと懸念されます。

741 名前:名無しさん 投稿日:2000/10/03(火) 23:57
>740
ありがとうございます。RewriteCond、RewriteRule 調べてみます。

>でも、荒氏はふつうリファラーも偽装しますから、
たしかに偽装できるようなやつなら、どんな対策でも効かないかもですね。
そのままクリックしてくる人を弾くだけでも負荷は軽減されるかなと思って。
2chに書かれると、とんでもない数飛んできそうで。


742 名前:名無しさん 投稿日:2000/10/04(水) 15:04
#!/usr/local/bin/perl

$hage = '
http://www.hoge.co.jp/|31yDeWzzZdoXc';

if ($hage =~ /([0-9a-zA-Z\/\.]{13})/){
print "Content-type: text/html\n\n";
print "$+";
}else{
print "Content-type: text/html\n\nNOMATCH";
}

31yDeWzzZdoXcにマッチさせたいんですけどどうしてこれだと駄目なの??

743 名前:AQ 投稿日:2000/10/04(水) 15:14
if ($hage =~ /([0-9a-zA-Z\/\.]{13})/){

if ($hage =~ /([0-9a-zA-Z]{13})/){


744 名前:名無しさん 投稿日:2000/10/05(木) 09:35
age


745 名前:DIL 投稿日:2000/10/05(木) 15:52
表示ようの文字数字を、計算で使用するために
数値へ変換するにはどうすれば良いのですか?
初歩的な質問で、すんまそん。

$moji = '10';
$val = $moji * 3; ←これはNGですよね。
print $val
30


746 名前:名無しさん 投稿日:2000/10/05(木) 16:05
アホですな

747 名前:DIL 投稿日:2000/10/05(木) 16:24
アホデスンマソン。
デモ、オセ〜テクダサイ。オネガイシマス。

748 名前:名無しさん 投稿日:2000/10/05(木) 16:46
は??
itteyosi とかを数値にってことか??>745

$moji = '10';
$val = $moji * 3; ←これはNGですよね。
print $val
それともこれが動かないっていうネタ??


749 名前:DIL 投稿日:2000/10/05(木) 16:56
いやいや。
文字列を数値に変換したいんです。
たとえば、"10"という文字列を10という値にしたいんです。
よろしくオネガイシマス。

750 名前:俺も知りたい 投稿日:2000/10/05(木) 17:06
俺も745と同じ方法を使って数値にしてる
$moji = '000010';
$moji = $moji + 0;
みたいな事やって $moji を 10 にしてる
745同様に誰かやり方教えて下さい。


751 名前:名無しさん 投稿日:2000/10/05(木) 17:21
$moji = '000010';
$moji += 0;
じゃだめ??

752 名前:750 投稿日:2000/10/05(木) 17:54
>751
もちろん $moji += 0; でもOK
と言うか俺も普段はこう書く。


753 名前:うざいのでマジレス 投稿日:2000/10/05(木) 17:54
Perlには文字列や数値などのデータの区別はありません。よって

$moji = '10';
$val = $moji * 3;

は何の問題もなし。ちゃんと$val は 30 になります。


754 名前:DIL 投稿日:2000/10/05(木) 17:55
>750 & 751
ありがとうございます。
出来たっす。感動っす。
よし、次のステップに進むぞ!!


755 名前:名無しさん 投稿日:2000/10/05(木) 18:00
これほどアホな奴等は珍しいですね

756 名前:>750 投稿日:2000/10/05(木) 18:08
こんな方法はいかが?

$moji = sprintf("%d",$moji);

757 名前:750 投稿日:2000/10/05(木) 18:21
>756
ナルホド!ありがとう


758 名前:名無しさん 投稿日:2000/10/05(木) 18:33
うざいからキエロ

759 名前:通りすがり 投稿日:2000/10/05(木) 19:05
>755、758
スレッドタイトル見てみろや!!
初心者はウザイに決まってんだろ!!
おまえが氏ね!!


760 名前:>759 投稿日:2000/10/05(木) 19:13
>初心者はウザイに決まってんだろ!!
お前どっちの見方だよ
755、758みたいな奴は無氏しときゃいいんだよ


761 名前:名無しさん 投稿日:2000/10/05(木) 19:33
それ以前に自分の言ってる余計な一言が一番ウザイことに気づいていない。


762 名前:名無しさん 投稿日:2000/10/05(木) 20:10
http://www.akubi.com/den/

763 名前:名無しさん 投稿日:2000/10/05(木) 23:32
ブラクラです!!

764 名前:名無しさん 投稿日:2000/10/06(金) 07:32
別に普通のサイト。
まあ全然面白くもなんともないからバナクリックの宣伝か。
行く意味なし。

765 名前:764 投稿日:2000/10/06(金) 07:32
sage損なった…。

766 名前:名無しさん 投稿日:2000/10/06(金) 07:47
pushで@petの中にどんどん突っ込んでいったのですが、
@pet = ('cat','cat','cat','cat','dog');
こんな感じで重複があります。重複を避け
@pet = ('cat','dog');
に変えるには、どうすれば良いでしょうか。
馬鹿みたいな質問ならスミマセン。

767 名前:弐ch編者 投稿日:2000/10/06(金) 10:58
>>766
つっこむ変数が$tukkomu
だとして#ループ始まり
foreach(@pet){if($_ eq $tukkomu){$switch=1;last;}}
unless($switch){push(@pet,$tukkomu);}
$switch=0;
#ループ繰り返し

んーなんかスマートじゃないような気がするけど
こんな感じかなぁ


768 名前: 投稿日:2000/10/06(金) 11:22
my %pet;
map($pet{$_} ++, @pet);
@pet = keys %pet;

769 名前:名無しさん 投稿日:2000/10/06(金) 13:12
perldoc -q uniqueの方法bより:
my %saw; @out = grep(!$saw{$_}++, @pet);

あるいは最初から@petに突っ込むんじゃなくて
%petに突っ込む($pet{$tukkomu}++);。
取り出すときに@pet = sort keys %pet;

>>768
voidコンテキストでmap使っちゃだめだよう。


770 名前: 投稿日:2000/10/06(金) 13:20
ごめんよう(TT>768


771 名前:766 投稿日:2000/10/06(金) 15:14
弐ch編者さん、ぽ さん、769さん、レスありがとうございます。
769さんの方法でやって見たところ、上手くいきました。
手元の初心者用書籍に載ってなくて、何日も冗長なソースを書いて
悩んでいたのですが、スッキリ解決ました。

>あるいは最初から@petに突っ込むんじゃなくて・・・
何だかスゴく勉強になって嬉しいです。
みなさん、どうもありがとう。

772 名前:名無しさん 投稿日:2000/10/06(金) 17:42
前も答えたけど、こんなのにgrepもmapもループも要りません。

my %temp;
@temp{@pet} = ( );
@out = keys %temp;


773 名前:名無しさん 投稿日:2000/10/06(金) 20:19
このスレかどうか忘れたけど自分、だいぶ前に766と同じ質問した事あります。

その際は772と同じ回答もらったよ。
772がその時の人かわからんけど感謝してます。

ありがとう、あの時の人。

774 名前:japu 投稿日:2000/10/07(土) 00:04
お久しぶりです。しばらく、新マシン (hostname = ecoco) の設定ではまっていました。

さて、私は一時変数を使わない方法を。
@majokko = qw[Mami Emi Mami Pelsia Momo Yumi Lala-z Void Mami Momo];
@uniq = keys %{ { map { ($_ => "moe") } @majokko } };
として萌えて下さい。:-)

775 名前:名無しさん 投稿日:2000/10/07(土) 05:33
@a = (0,1,2,3,4);
@b = (3,4,5,6,7);

両方に存在する要素のみ抜き出して配列@cに入れるにはどうすればいいか?

@c = (3,4);

@aと@bにはそれぞれ30程度の要素があるとする。



776 名前:今非常に眠いので試してないです 投稿日:2000/10/07(土) 05:46
>775
foreach $tmp (@a){
 foreach(@b){
  print $tmp if($tmp eq $_);
 }
}

777 名前:776 投稿日:2000/10/07(土) 05:47
あ、ごめん
>配列@cに入れるにはどうすればいいか
だったね。
printはpushにしてね。。ねむ。

778 名前:名無しさん 投稿日:2000/10/07(土) 12:20
my %temp;
@temp{@a} = ( );
@c = grep exists $temp{$_}, @b;

配列2つでしか使えない、お手軽な方法。@b の重複も検出しません。
そういや昔どっかの馬鹿がもめてたな。この質問。


779 名前:名無しさん 投稿日:2000/10/07(土) 16:32
質問です。
今レスキューの掲示板を使っているのですが、
デザイン変えるのに大変だからForm部を print等をはずして、
$FORM = <<"EOF"; EOF (ヒアドキュメントだっけ?)で囲みたいのですが、
EOF間に記述したらだめなものって何がありますか?
これを使うといつもエラーになってしまいます。

780 名前:>779 投稿日:2000/10/07(土) 16:49
半角の @ がある、に一票。

telnetか何か使えるんなら、perl -cw hoge.cgi でエラーメッセージを
見てみませう。


781 名前:779 投稿日:2000/10/07(土) 17:08
半角@はその間には使ってないです。

激初心者ゆえtelnetとかよく分かんないので、
これから調べに行ってきます。

ほかに使っちゃだめなのは何ですか?


782 名前:6 投稿日:2000/10/07(土) 17:13
"
に一票。

783 名前:782 投稿日:2000/10/07(土) 17:19
ん?これは大丈夫?

784 名前:名無しさん 投稿日:2000/10/07(土) 17:42
>>779
半角英字の手前に隣接するShiftJISのスペースはないですか?
「 sample」の2バイト目以降は「@sample」なのです。
          

785 名前:名無しさん 投稿日:2000/10/07(土) 18:51
つーか
<<"EOF"; でも
print ""; でも
ダブルクォート以外、エスケープの必要がある文字は同じだと思うんだが。


786 名前:弐ch編者 投稿日:2000/10/07(土) 19:38
うちにくれば教えてあげるよ

787 名前:弐ch編者 投稿日:2000/10/07(土) 23:41
>>779
おれが今までヤッタ失敗としては
EOFのあとちゃんと改行してないとか、、行頭にかいてないとか、、、

788 名前:779 投稿日:2000/10/08(日) 01:49
レスありがとうございます。いろいろいじってたらエラーはなくなりました。
その部分を新たに書き直したのでどこを変えたのか自分でもよくわかんないです。
でも今度は別の問題がでできてしまいました。
FORMにクッキーの情報が出ないんです。
クッキー自体は作られていたので、セットされないということでしょうか?


789 名前:あっくん 投稿日:2000/10/08(日) 02:36
以下のように、Unix Mailbox 形式のテキストファイルをニュースに投稿(ihave)するスクリプトを作ろうとしましたが、うまく動いてくれません。

#! /usr/bin/perl

if (<> =~ /^From </) {
&nbsp;&nbsp;while (<>) {
&nbsp;&nbsp;&nbsp;&nbsp;if($_ =~ /^From </){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$i++;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;open(OUT, "| /usr/sbin/mail2news.pl ais.test");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print OUT $mail;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;close (OUT);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$mail = "";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;$mail .= $_;
&nbsp;&nbsp;}
} else {
&nbsp;&nbsp;print "Not Unix mbox format.\n";
}

エラーログは、
Oct 8 02:18:11 ryan innd: localhost connected 18 streaming allowed
Oct 8 02:18:11 ryan rnews: bad_article missing Path
Oct 8 02:18:11 ryan rnews: cant read after 0 Bad file descriptor
Oct 8 02:18:11 ryan rnews: cant rename /usr/tmp/39df5ad3iH3JyU to /var/spool/news/incoming/39df5ad34ESZWE Permission denied
Oct 8 02:18:11 ryan innd: localhost:18 readclose
Oct 8 02:18:11 ryan innd: localhost:18 closed seconds 0 accepted 0 refused 0 rejected 0

という感じで、たぶん open(OUT, "| /usr/sbin/mail2news.pl ais.test"); の部分が間違っているんだと思うのですが、ほかのスクリプトにひとつの引数と、標準出力を渡すには、どうすればよいのでしょうか?

mail2news.pl は、
http://www.linux.or.jp/JF/JFdocs/Mail2News.html に付属するものを少し変更したものです。


790 名前:あっくん 投稿日:2000/10/08(日) 02:50
えっと、上のようなスクリプトが必要なわけは、
MailingList <-> NetNews <-> WebBBS
なシステムがすでに出来上がっていて、そこに
過去の ML のアーカイブも入れたいと思ったからです。

例をあげると、Datula-ML みたいな感じで、そこに
過去のアーカイブを一気に投稿するスクリプトです。
そういうのって、きっと今までにも誰かが書いてるんじゃ
ないかなぁと思うんですけど、、


791 名前:nanasi 投稿日:2000/10/08(日) 03:43
>rnews: bad_article missing Path

これがまず気になる。
メインの '/usr/sbin/mail2news.plの内容が分からんのだが
mail2news.pl の単体でテスト記事を投稿してみるが基地か。


792 名前:あっくん 投稿日:2000/10/08(日) 03:58
>>791
ML -> NetNews は成功しています。
MBOX -> NetNews のスクリプトを書こうとして、失敗しています。
mail2news.pl は、先ほども書きましたが、http://www.linux.or.jp/JF/JFdocs/Mail2News.html に付属しています。

よくわかってないのですが、mail2news.pl のなかでも、

open (INEWS, "| $inews $iopts") ......
while (<STDIN>) { ........

みたいな部分があって、そこで rnews という記事投稿用プログラムに
標準出力の結果をパイプで渡しています。
そういうスクリプト(mail2news.pl)に対して、さらにパイプで処理を渡そうとすることが間違っているのかな?


793 名前:nanasi 投稿日:2000/10/08(日) 04:20
# 関係ないことだが個人的意見としては 2ch で敬語は要らんと思う。

書いてから思ったんだがユーザとかグループのパーミッションが
かなり気になる。
mail2news.pl が成功している時と、動かしているユーザが
違うということはなかろーか。



794 名前:souieba 投稿日:2000/10/08(日) 04:59
cat mailbox |formail (-Y?) -s mail2news.pl newsgroup
のような感じでも出来るかも知れない。


795 名前:あっくん 投稿日:2000/10/08(日) 11:14
>>793
># 関係ないことだが個人的意見としては 2ch で敬語は要らんと思う。
でも、たずねてるのに「教えろや、ゴルァ」だとやっぱ教えてもらえないんじゃ、、

>ユーザとかグループのパーミッション
これは、chmod u+s して root で動くようにしてます。
-rwsr-xr-x 1 root root 290 Oct 8 02:27 mbox2news.pl

>>794
>cat mailbox |formail (-Y?) -s mail2news.pl newsgroup
こんなのがあったとは!でも、このままだとエラー
mail2news.pl: "/usr/bin/rnews" died prematurely!
が出るので、man を見てみます。

>rnews: bad_article missing Path
なんとなくこれ、Path: ヘッダを mail2news.pl でつける前に rnews に送ってるのが原因のような気もする。


796 名前:名無しさん 投稿日:2000/10/08(日) 12:26
># 関係ないことだが個人的意見としては 2ch で敬語は要らんと思う。

どこに「敬語」があるんだよ(^^;ワラ

797 名前:敬語の種類は3つ 投稿日:2000/10/08(日) 13:37
話題になっている人を敬う「尊敬語」
話し手を貶めることで間接的に尊敬を表す「謙譲語」
話し相手を敬う「丁寧語」

あっくんのは一応「丁寧語」(「です・ます」調、敬体) ですから
敬語になります。796は出直してきてください。
ちなみに「だ・である」調(常体)は敬語ではありません。


798 名前:名無しさん 投稿日:2000/10/08(日) 18:05
>>796
本物のアホだね。
はぁ・・・
小学生?

799 名前:nanasi 投稿日:2000/10/08(日) 21:32
まあ「教えれ」という便利なローカル用語があるということでやね。
(以下略)


800 名前:質問君 投稿日:2000/10/08(日) 23:47
$host=$ENV{'REMOTE_HOST'};
でリモートホスト情報がとれないのですが、
どういうわけでしょうか?
$ip=$ENV{'REMOTE_ADDR'};
これはきちんと取れる。

もうひとつ質問
$|=1;
ってどういう意味ですか?

801 名前:名無しさん 投稿日:2000/10/09(月) 00:05
>800
そりゃ、鯖が逆引きしてくんないからでしょ?
gethostbyaddrかなんかで取れるんとちなう?


802 名前:質問君 投稿日:2000/10/09(月) 00:09
ほう、やってくれない鯖ってのもあるのですか。
gethostbyaddrって初耳。ちょっと調べてみます。

803 名前:名無しさん 投稿日:2000/10/09(月) 00:10
>800
$host=gethostbyaddr(pack("C4",split(/\./,$ENV{'REMOTE_ADDR'})),2);

$|=1;
出力の自動掃き出し

804 名前:質問君 投稿日:2000/10/09(月) 00:13
おお、調べる前に書いてくれている。
ありがとう。助かりました。感謝。

805 名前:むぎ茶 投稿日:2000/10/09(月) 06:43



相当なアホだな。ここで質問する前に自分で勉強しろよ。



806 名前:名無しさん 投稿日:2000/10/09(月) 11:28
Perl/Ruby Conference, Linux Conference 2000
http://perlruby-con.opensource.gr.jp/
これなんですけど、Perl リソースキットをゲットするには
11月29日の何時ごろに受付に行けばいいんでしょうか?
やっぱ9:30前にはいっとかないとかなりの人出だから
すぐになくなってしまうんでしょうか。
いつも行ってる方とかの解説きぼー


807 名前:名無しさん 投稿日:2000/10/09(月) 19:36
本屋で買えや

808 名前:名無しさん 投稿日:2000/10/09(月) 23:50
先着1,000名までですが、15,000円の本が入場料2,000円(学生)のみに
なるからほしいと思いました。15,000円は書籍代としてはかなり高いと
思いますが、806さんにとってはそうではないのでしょうか。


809 名前:名無しさん 投稿日:2000/10/09(月) 23:51
s/806さん/807さん/g;
すみません。

810 名前:名無しさん 投稿日:2000/10/10(火) 01:01
徹夜で並べ。つーか2chで煽りにイチイチ反応してたら身がもたないぞ。


811 名前:むぎ茶 投稿日:2000/10/10(火) 02:58


貧乏人はがんばって並んでください。ださ

812 名前:名無しさん 投稿日:2000/10/10(火) 04:37
ファイルの作り方教えてください。
if(open(FH , ">$filename"))
でやってたんですが、自分のパソコンではこれで良かったんですが
アップしてサーバーで動かしたらエラーになりました。
書き込みファイルをあらかじめ作っておけば(FTPで)動くんですけど・・・
これってこういうものなんですか?
open で新規ファイルって作れないんですか?

813 名前:名無しさん 投稿日:2000/10/10(火) 04:43
ディレクトリの権限はどうなってる?>812

814 名前:東京kitty 投稿日:2000/10/10(火) 05:14
パーミッションをいじれば解消することが多い。
パーミッションの設定は、サーバごとに違うから、
よく見といたほうがいいかもな。
>812

815 名前:名無しさん 投稿日:2000/10/10(火) 05:35
とりあえず707

816 名前:812 投稿日:2000/10/10(火) 05:53
レス遅くなってすいません。
こんなに早く返事もらえるとは思ってなかったので回線切ってました。
パーミッションを 707 にすればいいってことですか?
今は 755 になってました。
早速試してみます。

817 名前:812 投稿日:2000/10/10(火) 06:04
707 にしてみたら動きました。
ありがとうございます。
それと、できればパーミッションについて教えてください。
いままで本などを見て適当に設定してたんですけど・・・
オーナー、グループメンバ、その他の人、ってどの人ですか?
よろしかったら教えてください。
また落ちますので返事遅れます。

818 名前:名無しさん 投稿日:2000/10/10(火) 08:25
オーナー>自分
グループ>オーナーと同じサーバを使ってる人達
その他>別サーバからの人達(ブラウザでサイト見てる人もその他)

819 名前:818 投稿日:2000/10/10(火) 08:36
実行>1
書込>2
読込>4

上の3つのメンバーに与えるパーミッションの属性の数字は
この3つの数の合計になってる。
7てことは1+2+4で全部OKってことだよな。
読込だけさせたければ4を指定すればいい。
読み書きなら6な。これでわかるかな。

820 名前:>812 投稿日:2000/10/10(火) 18:14
open(FH, ">$filename");

ファイルを新しく作る
=>ファイルを作るディレクトリに書く
=>ディレクトリに書く(2)パーミッションが必要

755で動かんつーのはcgiがnobody(818の言うその他)で動いてるって事。
freewebかい?

821 名前:812 投稿日:2000/10/10(火) 23:50
818さんありがとうございます。
パーミッションたいぶ分かってきました。
820さん正解です。 freewebです。

822 名前:大阪の初心者 投稿日:2000/10/11(水) 01:12
ディレクトリ名の変更で悩んでいます。
新名作成→旧名削除の手順を踏まず、直接変更する方法は、有るのでしょうか?
もし、有るなら教えて欲しいのですが。お願いします。

823 名前:>822 投稿日:2000/10/11(水) 01:27
FTPだったら「リネーム(名前変更)」、
シェルだったら「mv」、
perlだったら「rename」
で可能。

824 名前:大阪の初心者 投稿日:2000/10/11(水) 01:53
>perlだったら「rename」
823さん ありがとうございます。
ディレクトリ名の変更も「rename」で良いんですね。
さっそく試してみます。


825 名前:むぎ茶 投稿日:2000/10/11(水) 03:37


そのくらい自分で調べろよ。



826 名前:名無しさん 投稿日:2000/10/11(水) 16:16
同感。

827 名前:名無しさん 投稿日:2000/10/11(水) 19:20
@hogeの要素は@hoge[1]と$hoge[1]のどっちが正しいのでしょう。
どう違うのかがわからなくて悩んでます。

828 名前:名無しさん 投稿日:2000/10/11(水) 19:49
リストとスカラ。


829 名前:名無しさん 投稿日:2000/10/11(水) 19:57
@hoge = ("a","b","c");
という配列があったときに、
@hoge[1]も$hoge[1]も"b"ですよね。両者の違いがわからないのです。
スカラとして解釈すると(?)$hoge[1]と書くという
ことなのでしょうか?



830 名前:名無しさん 投稿日:2000/10/11(水) 20:19
@hoge[1] は配列 ( "b" )
$hoge[1] はスカラー "b"

ほとんどの操作で違いはありませんけど、例えば

$new = $hoge[1]; # "b" が入る
$new = @hoge[1]; # "b" ではなく "1" が入る

などの違いはあります。


831 名前:名無しさん 投稿日:2000/10/11(水) 20:26
あ、肝心の「どっちが正しいか」というと、$hoge[1] です。
@hoge[1] なんて使っちゃだめです。Perlのコンパイラにも怒られます。


832 名前:名無しさん 投稿日:2000/10/11(水) 20:29
>@hoge[1] は配列 ( "b" )
>$hoge[1] はスカラー "b"
なるほど! ありがとうございます。

>$new = @hoge[1]; # "b" ではなく "1" が入る
むむむ。こっちはよくわからないです。涙。
@hoge = ("a","b","c");
$new = @hoge[1];
print $new;
だと b と表示されるけど試し方が間違ってるのかな。



833 名前:830 投稿日:2000/10/11(水) 20:45
ああ、ごめん。勉強不足でした。

@hoge[1] の最後の要素(つまり、$hoge[1] そのもの)がスカラー
$new に入るので、間違ってませんです。


834 名前:829 投稿日:2000/10/11(水) 21:05
なるほど。ありがとうございます。嬉しいです。

835 名前:名無しさん 投稿日:2000/10/11(水) 22:29
>829,830
おれも上の読んで勉強になったよ。
perldocで確認したことをまとめておくよ。
(1) $scalar = @array; の場合は配列の要素数を代入。
(2) $scalar = (リスト); の場合はリストの最終要素を代入。
(3) @hoge[1] のような配列スライスは、リスト表記の一種
  というか略記法であり、この場合は ($hoge[1]) に等しいため
  上記(2)が適用される。

836 名前:名無し 投稿日:2000/10/11(水) 23:18
(1.5) ($scalar) = @array の場合は @arrayの最初の要素を代入。
(2)は初めて知りました。


837 名前:835 投稿日:2000/10/11(水) 23:34
>836
フォローありがと。ちなみに835の(2)の出典は、
perldoc perldata の "List value Constructors"のとこっす。

838 名前:あっくん 投稿日:2000/10/11(水) 23:53
$script_name = pop(split(/\//,__FILE__);
のsplit()の戻り値がスカラーではなく配列になってほしいのですが、
いちいち@tmpとかに代入することなく実現することはできますか?


839 名前:>838 投稿日:2000/10/12(木) 00:15
split の戻り値は元々配列だけど…。何がやりたいのかわからん。


840 名前:名無しさんぽい 投稿日:2000/10/12(木) 00:22
お。(2)は俺も始めて知った。便利あげ。

841 名前:japu 投稿日:2000/10/12(木) 00:39
もしかして、
$script_name = (split /\//, __FILE__)[-1];
とやりたいのかな。

コードを示すのも良いけど、何をやりたいかまで示しましょう。

842 名前:あっくん 投稿日:2000/10/12(木) 00:43
split()の戻り値はスカラーと配列の両方があり、
スカラーの場合は分割された個数を返します。で、
$script_name = pop(split(/\//,__FILE__);
だと、実行したときに、スカラーはpopできないというエラーメッセージが出ます。


843 名前:あっくん 投稿日:2000/10/12(木) 00:50
>>841さん、まさにそれでした。すみません。
欲しいのはフルパスのファイル名から
ふつーのファイル名を得るスクリプトです。


844 名前:関係ないけど 投稿日:2000/10/12(木) 00:55
なんか今日は書き込み多いね。ちょと嬉しい。

845 名前:>842 投稿日:2000/10/12(木) 01:01
リストと配列の違いなんだけど…説明が難しい (°Д °)
@array = ( 'a', 'b', 'c' );
とあったとき、右の ( 'a', 'b', 'c' ) という「リスト」は、まだ
pop 等の操作ができない。
@array という「配列」に代入して、初めて操作可能になる、という…。
う〜ん。

つーか、それをやるなら split は遅いので
( $script_name ) = __FILE__ =~ /([^\/]*)$/;
の方が良いと思うけど。


846 名前:名無しさん 投稿日:2000/10/12(木) 01:03
驚きっぱなしも間抜けなので新テクを一つ。
同じく perldata からです。

@x = qw(a b c d e f g);
@y = @x[-1,5];
print "@y\n";

g a b c d e f

847 名前:846 投稿日:2000/10/12(木) 01:07
>@y = @x[-1,5];
-> @y = @x[-1..5];
の間違いです。

あと新テクというには(藁


848 名前:名無しさん 投稿日:2000/10/12(木) 01:11
>>847
5の所に$#とか使うと結構使えるかもね

849 名前:名無しさん 投稿日:2000/10/12(木) 02:03
>845
正規表現よりsplitの方が早いと思ってたんだけど
反対なの?

850 名前:AQ 投稿日:2000/10/12(木) 03:37
なんか827からの話題ってすべてEffectivePerlに書いてあることばっかり。
この本Perlをある程度書けるようになってから読むとすごく勉強になるので
お勧めです。

ちなみに正規表現のほうが早いです。
>>849
でも読みやすさを優先させればsplit。個人的には好みで好きなほう使えば良いと思う。




851 名前:名無しさん 投稿日:2000/10/12(木) 04:22
なんか1からの話題ってすべてman perlに書いてあることばっかり。

852 名前:名無し 投稿日:2000/10/12(木) 04:52
理解に苦しみます。

perl -e '@x=qw(a b c d e f g); $y = [@x[1..3]]; print "@$y\n";'

b c d

perl -e '@x=qw(a b c d e f g); $y = \@x[1..3]; print "$$y\n";'

d



853 名前:名無し 投稿日:2000/10/12(木) 08:23
極当り前でした。


854 名前:名無しさん 投稿日:2000/10/12(木) 16:42
ファイルAの後に
ファイルBを連結する
エレガントなやり方は?
OS依存しない場合は?


855 名前:名無しさん 投稿日:2000/10/12(木) 18:00
open(B, "$fileb");
open(A, ">>$filea");

while(<B>) {
print A $_;
}


856 名前:便乗 投稿日:2000/10/12(木) 18:21
exec 'cp a b';
exec 'cat c >> b';
とやると、同期とれてない感じに動いて
bにcが足されてない。なじぇ?
(v5.6.0 built for MSWin32-x86-multi-thread)



857 名前:名無しさん 投稿日:2000/10/12(木) 18:58
system 使え。exec だと制御が戻ってこない。

858 名前:名無しさん 投稿日:2000/10/13(金) 01:47
ミリ秒単位で時間を得るにはどうすればよいでしょうか?

859 名前:名無しさん 投稿日:2000/10/13(金) 02:02
>858
select(undef,undef,undef,0.1);
で0.1秒待つよ。これ利用してみては?

860 名前:名無しさん 投稿日:2000/10/13(金) 02:22
説明不足ですみません。
$start = time;
(何らかの処理)
$end = time;
$cost = $end - $start;
というふうに、処理時間のコストを出したいんです。
上のようにすると、
$start = 971370103.1, $end = 971370103.9 -> $cost = 0
$start = 971370103.9, $end = 971370104.1 -> $cost = 1
のようになる気がするんですけど。
小数点以下は説明のためにつけました。
伝わりますでしょうか?実際には time で得られる値が整数なので
結果が違ってくるんだと思うんです。


861 名前:名無しさん 投稿日:2000/10/13(金) 02:23
時間を測る方なら Time::HiRes death.



862 名前:名無しさん 投稿日:2000/10/13(金) 02:29
http://search.cpan.org/doc/DEWEG/Time-HiRes-01.20/HiRes.pm
まさにこれです、どうもありがとう!

863 名前:名無しさん 投稿日:2000/10/13(金) 10:17
Time::Hiresはperldoc -q secondで出てくるよ。

プログラム全体のどこが一番時間を食ってるか知りたければ
perldoc -q profileを見てDevel::DProfを知るよろし。

いろんな方法を比べるならBenchmark(これもperldoc -q profile)。


864 名前:名無しさん 投稿日:2000/10/13(金) 10:52
perldoc ってどうやって読むんですか?
perldoc -q profile | pod2text | more
でいいのでしょうか?


865 名前:名無しさん 投稿日:2000/10/13(金) 11:03
既存のエクセルファイルを開いて、中身の値を修正して保存したいです。
KbExcelで読み込んでSpreadsheet::WriteExcelで書き出そうと
考えましたが、罫線やマクロまで取り込めません。
何か良い方法無いでしょうか?


866 名前:名無しさん 投稿日:2000/10/13(金) 11:20
my $hoge;
my $hoge=undef;
my $hoge='';
変数の宣言としてはどれがいいですか?

867 名前:名無しさん 投稿日:2000/10/13(金) 11:32
初めて使うときの直前に my で宣言するとあとから見やすいような。。
my $hoge=undef; <- これ、意味あんの?

868 名前:名無しさん 投稿日:2000/10/13(金) 12:37
>>864
テキスト形式がよければperldoc -t -q profileかな。
より詳しくはperldoc perldocを見よ。

perldoc -fとかperldoc -qでtext形式に整形しない
(POD形式でそのまま出る)のは
わざとなのかバグなのかはよくわかんない。

869 名前:名無しさん 投稿日:2000/10/13(金) 19:19
別のホストからhtmlや、cgiの出力するhtmlを
読むにはどうすればいいのでしょうか?


870 名前:>869 投稿日:2000/10/13(金) 19:52
激しくがいしゅつ。
過去ログ読みあされ。

871 名前:名無しさんぽい 投稿日:2000/10/13(金) 19:54
どっかにソケット使って読むソース見た気がするが…気のせいだったかな。

872 名前:名無しさん 投稿日:2000/10/13(金) 20:20
http://www.kakiko.com/check/sample.html

873 名前:名無しさん 投稿日:2000/10/13(金) 20:50
DNS の逆引きができないIPアドレスでも、whoisすればネットワークアドレスがわかる場合がありますよね?
whoisサーバをJPNIC->InterNIC->その他という順番で検索してくれるwhoisモジュールってありますか?
http://search.cpan.org/doc/DHUDES/Net-Whois-1.9/Whois.pm
これはInterNIC用のようです。ソケットを使って一からというのは、、


874 名前:869 投稿日:2000/10/13(金) 22:17
ども、872さんの見ました。
これの、HTTP::Requestというのは標準で入っているものなのでしょうか?
環境はjperl5.005_03-990822なのですが、使えませんでした。
動かしたいところが勝手にいじられないので、
モジュール以外のソケット等の他の方法はないでしょうか?

875 名前:>874 投稿日:2000/10/13(金) 23:06
http://x68000.startshop.co.jp/~68user/net/

ここ見て勉強。解らなきゃ、んなことやろうとする資格なし。


876 名前:>875 投稿日:2000/10/14(土) 01:20
ありがとうございます。
おかげさまでできました。
フリーサーバーではSocket使えませんでしたが...

877 名前:名無しさん 投稿日:2000/10/14(土) 02:38
IRCにスクリプトを組み込みたいんですが、
どこか良い解説サイトありませんか?

878 名前:xxx 投稿日:2000/10/14(土) 02:38
初投稿です。よろしくです。
perlをwindowsに入れて、
ローカルサーバでcgiを動かせる様にしたいのですが
perlの頭に書くパス(#!…)の書き方が分かりません..

DOS/Vでcドライブに入れたときは分かるのですが、
例えばd:\perl/bin/perl/に入れた場合は
パスの書き方はどうなるんでしょう???

よろしくお願いします。


879 名前:名無しさん 投稿日:2000/10/14(土) 02:43
根本的な質問をさせて下さい…
接続元のホストって、偽装できるのですか?

880 名前:名無しさん 投稿日:2000/10/14(土) 03:03
>878
そのままd:\perl/bin/perlと書けばいいはずだけど・・・。


881 名前:名無しさん 投稿日:2000/10/14(土) 03:12
ローカルでテストする時はそれでいいんけど、
アップロードする時には忘れずに /usr/bin/perl とか に戻しておこうね。

882 名前:名無しさん 投稿日:2000/10/14(土) 04:13
書きかえるのが面倒だからc:\usr\bin\にインストールするのが1番早い

883 名前:名無しさん 投稿日:2000/10/14(土) 07:39
win2kでローカルのWEBサーバーを作ってCGIのテストをしようと思ったのですが、
いざやってみると、CGIをダウンロードしてしまいます。

本を見ると、そういう場合は「ファイルタイプの設定」で
「MS-DOSパッチファイル」の内容の種類を「text/plain」にしろということらしいのですが
「MS-DOSパッチファイル」というファイルタイプが見つかりません。
如何すればいいんでしょうか?

884 名前:あげ 投稿日:2000/10/14(土) 08:51
根本的な質問をさせて下さい…
接続元のホストって、偽装できるのですか?


885 名前:名無しさん 投稿日:2000/10/14(土) 09:51
初歩的な質問ですが……。
スカラー変数の小数点以下を切り落とすのには、どうすればいいのでしょう?

886 名前:名無しさんとも言える 投稿日:2000/10/14(土) 10:10
>>885
$int = int($float);


887 名前:885 投稿日:2000/10/14(土) 10:20
>>886
ありがとうございました。
早速試してみます。

888 名前:名無しさん 投稿日:2000/10/14(土) 11:44
>>883
WEBサーバーは何ですか?
ApacheかAN-HTTPdならCGIを動作させるのも簡単だよ。
IISは、よくわからない・・・。

889 名前:名無しさん 投稿日:2000/10/14(土) 15:24
AddHandler cgi-script .cgi???
っていうかサーバーソフトだね。

890 名前:名無しさん 投稿日:2000/10/15(日) 00:17
しつもんです。
クッキーを無効にしてるユーザーを検出するにはどうすればいいんでしょう?

$oldcookie = $ENV{'HTTP_COOKIE'};
print "Set-Cookie: 〜 \n\n";
if ( $oldcookie eq $ENV{'HTTP_COOKIE'} ){
  # クッキーが更新されてない (=無効?)
}

こんなことやってみましたが、if文はいつでも真になっちゃいました。


891 名前:名無しさん 投稿日:2000/10/15(日) 01:04
>>890
サンプルは、print文までとif(〜)はセッションが別ですか?
cookieを設定したあと、ブラウザがCGIを呼び直さないと、
$ENV{HTTP_COOKIE}は更新されていません。

JavaScriptでcookieの有効・無効を検出した方が楽なのでは?
document.cookieになんか設定してすぐ読み出してみたら?

892 名前:xxx 投稿日:2000/10/15(日) 01:05
>880〜882

ありがとうございます!
しかし、やっぱりCGIが動きません..
パスの問題ではないのかなあ。


893 名前:名無しさん 投稿日:2000/10/15(日) 01:18
クッキーの扱いはよく分らないけど、
>>890 だとどう考えてもif文は真になるよ。よく見てみな。

if($ENV{'HTTP_COOKIE'}){
  #クッキーが検出できたときは
  #クッキーOKの場合の処理
 }else{
  #クッキーが検出できない(空の)場合は
  #クッキーを一度渡してもう一度検出
print "クッキーを渡す";
if($ENV{'HTTP_COOKIE'}){
  #クッキーOKな場合の処理
  }else{
  #クッキー無効な場合の処理
  }
 }


よくわかんないけどこんな感じではいかが?
間違ってたらごめん。。。

894 名前:890 投稿日:2000/10/15(日) 02:31
>>891
なるほど、別セッションにしなきゃだめなんですね。了解です。
JavaScriptと併用でどうにかしてみます。

>>893
すいません、よくわかんなかったです…。890のソースを
 $a = $b;
 $b = "test";
 if ( $a eq $b ){ # $b(cookie)の更新に失敗 }
と考えれば、いちおう「常に真」にはならないのでは?
もっとも891さんによれば、実行中に@ENVは変わらないとのことなので
無駄な話になっちゃいますけど。


895 名前:通りす狩り 投稿日:2000/10/15(日) 03:13
%ENVだよ。
それと、891が言ってるのは$ENV{HTTP_COOKIE}の値が変わらないのではなく
クッキーそのものが更新されてないって事だと思うよ。

896 名前:エクステンションを.shtmlに変更して、、、 投稿日:2000/10/15(日) 07:39

エクステンションって何だがや? 教えてちょ

897 名前:名無しさん 投稿日:2000/10/15(日) 09:41
>>896
拡張子のことだろ?
.htmlとか.plみたいに、ファイル名の後ろにくっついてるヤツ。
この場合、ファイルを"file.shtml"にすればいいんじゃねーの?
っつーか、このスレで聞く質問か?

898 名前:>896 投稿日:2000/10/15(日) 12:57
ホームページ板かパソコン初心者板で修行してきなさい。

899 名前:名無しさん 投稿日:2000/10/15(日) 21:27
表示部がHTMLの掲示板を作ってるんですが、
javascriptを使ってcookieを取得して、
選択フォーム にクッキーの値を入れたいのですが出来ません。
↓みたいにしました。アドバイスお願いします。

<SCRIPT LANGUAGE="JavaScript">
&lt;!--
document.form1.SELECT1.value = No2;
// --&gt;

<FORM name=form1>
<SELECT NAME="SELECT1">
<OPTION VALUE="No1" >選択肢その1
<OPTION VALUE="No2" >選択肢その2
<OPTION VALUE="No3" >選択肢その3
</SELECT>
</form>


900 名前:名無しさん 投稿日:2000/10/15(日) 23:10

ValueOfCookie = 0; // 「選択は何番目か」をクッキーに保存
document.form1.SELECT1.options[ValueOfCookie] = true;

順序が変わっても良いようにしたいなら、<OPTION name="No2"> とし

ValueOfCookie = "No2"; // 「何という名前のオプションが選択されていたか」をクッキーに保存


901 名前:名無しさん 投稿日:2000/10/16(月) 00:25
age

902 名前:↓これが動きません 投稿日:2000/10/16(月) 00:53
&lt;!--#exec cgi="/cgi-bin/accesslog.cgi"--&gt;
ダイレクトにaccesslog.cgiを開くと動くんですが…教えてちょ

903 名前:名無しさん 投稿日:2000/10/16(月) 01:10
>>902
エラーメッセージ出てないのかな。
パスは http://www.NANTOKA.ne.jp/cgi-bin/accesslog.cgi で開くわけだよね?

904 名前:902@初心者 投稿日:2000/10/16(月) 01:57
The server encountered an internal error or misconfiguration
and was unable to complete your request.
です。… .shtmlでやってもダメなんです。

905 名前:名無しさん 投稿日:2000/10/16(月) 02:35
実はトップが
http://www.NANTOKA.ne.jp/~kantoka/
だったりして。

906 名前:名無しさん 投稿日:2000/10/17(火) 09:09
public_html 以下に存在する全てのファイル一覧を取るには?

今は
opendir(DIR,".");
@dir = readdir(DIR);

として,@dir全てに-dのファイルテスト演算子をためしてディレクトリがあったらまたopendirって非効率な事してんだけど…
誰か助けてプリーズ

907 名前:名無しさん 投稿日:2000/10/17(火) 09:24
>>906 そのほうが色々と安心だよ。<*>
まあ俺だったら grep(-d $_ && $_ ne '.' && $ne '..', readdir(DIR)); ってやるかな。
closedirが抜けてるのは省略してるだけだと思うけど良く忘れるので注意。

908 名前:907 投稿日:2000/10/17(火) 09:25
書き損なった・
<*> だと見落とすことがあるし。って書こうとしていた。

909 名前:名無しさん 投稿日:2000/10/17(火) 09:30
find が入ってれば
$pid = open FILES, "find /path/to/publc_html -type f -print|";
@files = <FILES>;
close FILES;
みたいなことすれば少し速くなると思う。
ただそれほど変わらないんじゃないかな。


910 名前:名無しさん 投稿日:2000/10/17(火) 10:58
これ面白いよ
http://k-basser.com/dorama/dorama.cgi
掲示板でドラマ作るらしい
ソースも公開されてるから挑戦してみたら

911 名前:名無しさん 投稿日:2000/10/17(火) 11:08
おもろない…。宣伝か?

912 名前:名無しさん 投稿日:2000/10/17(火) 11:39
>>906
標準モジュールFile::Findを使ってみよう。
perldoc File::Find参照。

913 名前:906 投稿日:2000/10/17(火) 13:20
>>907 >>909 >>912
あんな駄質問に答えてくれるとは、ホントいい人だ。ありがとありがと。

ひとまずperldoc読んでみるです。
標準ならラクダ本にもあるかな…

914 名前:へたれ 投稿日:2000/10/17(火) 13:55
gzipのパスってどうやって調べるのですか?
教えてくだされ。
勿論うちはtelnet使えます
へたれな質問ですまんす

915 名前:名無しさん 投稿日:2000/10/17(火) 14:37
which gzip

916 名前:名無しさん 投稿日:2000/10/17(火) 14:41
ややウケ >>914-915
って言うかPerlに関係ねーだろ >>914

917 名前:名無しさん 投稿日:2000/10/17(火) 16:20
$ whereis gzip

918 名前:名無しさん 投稿日:2000/10/17(火) 17:55
$ mail webmaster
Subject: 教えろや、ゴラァ!
gzipのパスわからん
教えろや、ボケ
^D
Cc:


919 名前:へたれ 投稿日:2000/10/17(火) 18:53
ありがとごじゃります>みなさま

http://members3.cool.ne.jp/~cool_online/index.html
ここに書いてあることを試したかったのです



920 名前:名無しさん 投稿日:2000/10/17(火) 19:25
それを先に言えシリーズ >>919
日本シリーズ


921 名前:名無しさん 投稿日:2000/10/17(火) 21:34
+<などでファイルをopenしたとして
現在のファイルポインタ以降をファイルから削除することはできますか?

922 名前:名無阿弥陀仏 投稿日:2000/10/17(火) 23:33
そろそろ移る準備はじめよう。

923 名前:名無しさん 投稿日:2000/10/17(火) 23:34
>921
truncateでし。


924 名前:名無しさん 投稿日:2000/10/18(水) 00:04
>918
この板で始めてウケた(藁

925 名前:921 投稿日:2000/10/18(水) 00:18
ありがとうございます。調べてみます。>923

926 名前:名無しさん 投稿日:2000/10/18(水) 01:14
読み書き両用のファイルオープンなんですが、書き込む時は追加で行う場合、

open(LOG, "+>>./log.dat");

で良いんでしょうか?


927 名前:名無しさん 投稿日:2000/10/18(水) 06:13
>>926
OKです。


ついで。
> 上書き(元ファイルがあっても内容を破棄)
>> 追加書き
< 読み
(未指定) 読み

上記の頭に + を付けると元のモードが読み書き兼用になる。
当然ながら +> で開くと元ファイルがあっても強制的に内容が消される。
+> 上書き(読み書き兼用)
+>> 追加書き(読み書き兼用)
+< 読み(読み書き兼用)
ちなみに
|$cmd だとコマンド $cmd へのパイプ書き込み
$cmd| だとコマンド $cmd からのパイプ読み込み


あと、900越えたので新スレ立てました。
ぼちぼち移動お願いします。
http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087&ls=100

928 名前:名無しさん 投稿日:2000/12/14(木) 23:00
guest

929 名前:厨房です。 投稿日:2000/12/15(金) 01:53
PerlでXML::DOMを使ってファイルをパースするときは、

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

でいいんだけど、CGIで同様のことをやる場合どうすればいいのでしょうか?
(ちなみにsample.xmlはスクリプトと同じディレクトリにあるとします。)


930 名前:厨房です。 投稿日:2000/12/15(金) 01:54
あ・・書くとこ間違えた・・。

931 名前:名無しさん 投稿日:2000/12/16(土) 23:46
初めてこの板来たんだけど、レス総数が1桁のスレッドばかりだね…

932 名前:名無しさん 投稿日:2000/12/17(日) 11:32
ペールって何が面白いの?

933 名前:名無しさん 投稿日:2000/12/17(日) 19:12
local @val;

この使い方は合ってますか?

934 名前:名無しさん 投稿日:2000/12/17(日) 22:14
あってますけど。何か疑問な点でも?


935 名前:名無しさん 投稿日:2000/12/17(日) 22:19
>931 先生のお越しをお待ちしてました。
  わかりやすくレスしてくださいね!                 (氏ね

936 名前:名無しさん 投稿日:2000/12/18(月) 00:21
あえていうなら、なぜ local。
localが必要な局面は、あんまりないでしょ。
myつかおう。


937 名前:名無しさん 投稿日:2000/12/18(月) 01:38
新スレ使え
http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087&ls=50


938 名前:933の名無しさん 投稿日:2000/12/20(水) 03:16
localって使わない?
myを使う場合って?
ご教授よろしく。

939 名前:japu 投稿日:2000/12/20(水) 03:42
localを使う場合。
1. $_ などの特殊変数に対して。
2. ファイルハンドルを局所したい場合。local *HOGE;

2. は use FileHandle; して my $fh = new FileHandle; とかする方が良いけどね。

940 名前:936 投稿日:2000/12/20(水) 06:52
japuさん サンクス。

941 名前:933の名無しさん 投稿日:2000/12/20(水) 11:08
今、本を読んだらmyの方がイイね。
ありがとう。

942 名前:Dest 投稿日:2000/12/23(土) 15:37
AnHTTPD を使ってるんすけど, AnHTTPD から CGI を実行させても CGI 内
に記述した SSI を実行してくれないんですよね.

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

943 名前:名無しさん 投稿日:2000/12/23(土) 17:23
942はマルチ野郎。
相手にする必要なし。
どうしてもってやつは、下のスレでやってくれ。

http://tako.2ch.net/test/read.cgi?bbs=perl&key=977553926

944 名前:名無しさん 投稿日:2000/12/24(日) 04:11
$| = 1;
てバッファをフラッシュさせるって良く聞けど
どういう意味なの?

またどんな時に使うと宜しいの?

945 名前:944 投稿日:2000/12/24(日) 05:18
http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087
このスレの492〜を見て。

というより、初心者コーナーは上記スレに引越してるので
このスレは使わないように。

946 名前:945 投稿日:2000/12/24(日) 06:52
945は944に向けた発言でした。
スマソ。

947 名前:ぶくぶく 投稿日:2001/02/23(金) 22:39
掲示板に、外部の画像を張りたいんですけど、
どうすればよろしいのですか
やさしい方教えてください。

948 名前:名無しさん 投稿日:2001/02/23(金) 23:03
>>947
氏ねて。

949 名前:ぶくぶく 投稿日:2001/02/23(金) 23:47
おしえてくださいよ

950 名前:名無しさん 投稿日:2001/02/23(金) 23:52
>>949
このスレ終了してるんだって。





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