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の ログアナライザというやつです。
ホームページ板のほうで教えてくださった人がいて解決できました。 お騒がせしました。
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
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
20 :
七 :2000/06/20(火) 20:46
>18 違ってたらごめんなさい $|=1; を指定するとか? あと、</body></html>で閉じちゃうとだめのような気が
>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; とか
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回投げればヨカッタのですね。
>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> です。 スレ汚してすいません・・・
まず、根本的な間違いから。 > 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」という怪しい文章に・・・ もうどうしたらよいものか・・・それこそ酷な状況です。 何度もすいません。どうか宜しくお願い致します。
それは単に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^)
あ、見逃していた。正規表現中で 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/\>/>/; $res=~s/\</</; $res=~s/\&/&/; $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/; のほうが速いとかいてあったぞ♪
(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分後とは早いですね。 どうも、ありがとうございました。
別解 $var = "Sakura Moe"; $uvar = uc $var; print "$var\n$uvar\n"; この方法だと、ロカール情報まで考慮されて高速に処理されるはず。
一応、やってみました。 #! /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) のような測定ができることも初めて知りました。 個人的にしてみたいので、調べてみます。 どうも、ありがとうございました。
ある程度高速なマシンだとほとんど差が出ないようですね。(うちのパソコン、 ボロいもんで。) ロカールに関しては、「考慮されることもある」程度の意味です。場合によっ ては "a" に "'" が付いた文字が "A" に "'" が付いた文字に変換されること が期待できそうってことで。日本語を処理する場合に関しては tr/a-z/A-Z/ と変わらないでしょうけど。
82 :
名無しさん :2000/07/20(木) 19:52
カール板が動かないんですけど@`@`@` 何回やっても駄目なんです。 どうしたらいいですか?
82: その情報から可能なアドバイスは以下の通り: 1. 祈る 2. 念じる 3. 勉強する 4. お金で解決 # 嬉しい回答は良い質問から。
5.あきらめる
6.マシンをかるく叩いてみる
85: 斜め45度から食らわすのがコツです。
1:ささやき 2:詠唱 3:祈り 4:念じよ! カール板は灰になりました
88 :
超初心者 :2000/07/21(金) 20:32
すみません、本当に初心者なんですけど、、 掲示板とかを自分のHPに設置して動きを見るときって、 どうしても電話代がかかってしまって、、。 オフラインでそういうテストをできるようなツールって あるんでしょうか。。 探してみたんですが、よくわかってないのもあって、 見つけられませんでした。。 すみません、教えてくださいませんか。。
90 :
あ :2000/07/21(金) 21:20
Macだったかな…。
91 :
あっ :2000/07/21(金) 21:21
3 は "localhost" でした。
Windows なら、AN HTTPD でしょうな。 結構セキュリティホールが発見されているようだけど。 オススメなのはFreeBSDなどのPC UNIX。 Apache入れればほぼプロバイダと同じ環境で実験できるはず。
93 :
超初心者 :2000/07/21(金) 21:53
>89@`92 めちゃめちゃありがとうございました。 今、ANHTTPDというソフト探してみてます。。 ActivePerlはそこの、WindowsUsers:の先から 落としました。 聞いてみて良かったです。。。
94 :
名無しさん :2000/07/21(金) 22:22
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
99 :
97 :2000/07/22(土) 02:03
>98 ありがとうございました。
100 :
わん :2000/07/22(土) 02:09
>97 いろいろ試すなー お願いだから、ANHTTPDでやってくれ~
101 :
名無しさん :2000/07/22(土) 02:23
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は作れるんでしょうか?
>107 perl の組込み関数 unlink をお使いください。
#!/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 とでも指定してみてください。
ありがとうございます! とりあえず試してみます
111 :
名無しさん :2000/07/23(日) 04:12
>>109 インターナルサーバーエラーがでました
#!/usr/local/bin/perl
$query = $ENV{QUERY_STRING};
$query =~ s/[^\w.-]//g;
unlink $query
これくらいまで減らして試してみたんですが動かなかったです……
状況を説明すると、掲示板用に作成したフォルダがあって、そのフォルダと中のファイルの所有者がnobodyになっています
フォルダにはアクセスできるんですが、削除はできません
フォルダ内に削除用のcgiをアップロードすることさえできません
どうにかなりませんでしょうか……
わかる方よろしくお願いします
109さんのスクリプトは 消したいファイルと同じディレクトリに置くんですよ♪
113 :
名無しさん :2000/07/23(日) 04:18
unlink $query;
>112 111さんの投稿を確認出来ずに投稿したため 外した発言になってしまいますた。
115 :
名無しさん :2000/07/23(日) 04:26
消したいフォルダの中に入れるのではなく、 消したいフォルダの1つ上に入れるわけだが、 理解できているだろうか。
116 :
名無しさん :2000/07/23(日) 04:29
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が無視されちゃうんですが…
上のコード実行したら、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
やっぱ関数がきっちり載ってる本かわないとダメですね。 入門書だけだとキツいっす。
@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"); で >の数が違うのは何か意味があるんですか?
あります。詳しくはマニュアル参照。
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 冷たい人だね
もうちょっと自分で勉強する努力をしなさい。 なんでも聞いてると上達しないよ。 本を一冊買うか、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'); 配列内の順番はどうなっても良いです。
@temp{@A} = (); @A = keys %temp; なんてどうかな。
155 :
153 :2000/07/28(金) 02:20
>154さん できました! @temp{@A} = (); こんな書き方もあるんですね~ ハッシュはまだ全然使いこなせてないのでもっと勉強します。 本当にありがとうございました。
156 :
名無しさん :2000/07/28(金) 02:33
ファイルロックってひとつずつやらなければならないのでしょうか? ファイルロック開始; ファイルA操作; ファイルB操作; ファイルC操作; ファイルロック解除; てなことは良くないのですか?
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]
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
167 :
ラプ :2000/08/01(火) 12:06
今、パールを勉強してるのですが、 デバックが快適にできなくて悩んでます。 参考書をそのままコーディングしただけでも、 エラーが出てしまい。どこがエラーなのかも解からないし、 何個エラーがあったのかも解りません。 デバックの仕方を教えて下さい。宜しくお願いします。 OSはウインドウズ95を使っています。
168 :
>165 :2000/08/01(火) 14:37
PocketDOS入れてPerl使え
perl -cw test.pl で見てわからん? 英語がわからないとかいうのは論外だけど…。
171 :
ラプ :2000/08/01(火) 16:05
>169 perl -cw test.pl を どの様にすると、わかるのでしょうか? いつもは、コーディングが終わったら、FTPで送って ブラウザで開いてみます。 で、internal server error というログが出ると、 ああ、またバグがあるのだな。 と考え、参考書とソースを交互に見比べて、 何処が違うのか捜しています。 ひつこく(しつこい?)て、申し訳ありませんが、 もう少しだけ詳しく教えて下さい。 もしくわ、説明の乗ってるHPをご存じなら URLを教えて下さい。 >170 べんりな物がある見たいですね。 でも、基本的な事がキット解ってないと思うので、 ツールを使わなくても、バグってる箇所がわかる方法を 知りたいと思っています。 その後にツールへチャレンジしてみたいと思っています。 ありがとうございます。
↑ >171の間違い
174 :
ラプ :2000/08/01(火) 16:34
>172 そうですネ。 読んでやってみます。 いつも、つなぎっぱなしなので、 ローカルで出来るとスゴク良いと思います。 ありごとうございます。
175 :
名無しさん :2000/08/03(木) 12:30
誰か、164さんの質問答えてあげてください。 (ごめんなさい、私はわかりません)
176 :
名無しさん :2000/08/03(木) 13:11
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
いやマジです。
perlより相対パスをお勉強しましょう
181 :
名無しさん :2000/08/04(金) 00:56
なにー! PERLの問題じゃないのー? あ、ちなみにpublic_htmlはaaでもlogでもなんでもいいです。 ドキュメントルートなどは無視して考えてください
182 :
名無しさん :2000/08/04(金) 00:57
無視ってのもへんだからドキュメントルートはusrrootね
やっぱりパスのお勉強だねー それに opendir と chdir のどちらでもよい っていう状況がわからんな(藁
184 :
名無しさん :2000/08/04(金) 01:12
えー そうなのかー。ま、いいや
とりあえず、 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};
#! /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を動かす?呼び出す?にはどのようにすればよいでしょうか。
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 。 >(コマンドラインやテキストファイルから取得するため) これの意味がよくわからない…。大抵、置換の方が楽なものだけれど。
$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は使えると思うのですが、何処を直せばうまく動作する様になるのでしょうか?
ここは"人間初心者コーナー"じゃないよ
202 :
名無しさん :2000/08/08(火) 07:20
>197-199 有難うございます
203 :
203 :2000/08/09(水) 12:04
204 :
>203 :2000/08/09(水) 12:43
これは古いバージョンのログファイルを最新のものに対応するようにコンバートするものじゃないのか?
改造ネタはそれ用のスレッドがあるからそこでお願いね。
206 :
203 :2000/08/10(木) 09:44
>204 あ、勘違いしてました。すいません。 >205 了解しました。 あ、気にせず続けてください。
207 :
名無しさん :2000/08/10(木) 11:24
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参照)。
おぼーん
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は、メモリ上で配列をいじるだけ。 その配列データをファイルに書いたりするのはまた別の仕事。
test
234 :
名無しさん :2000/08/14(月) 15:40
数値を3桁ごとに区切りたいです。 12345 → 12@`345 …ってな具合にしたいんですが、全く分かりません。 どなたか助けて下さい。 よろしく、お願いします。
235 :
名無しさん :2000/08/14(月) 16:36
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
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 こんなふうにしたんだけど、これも空白文字が作られないみたいだし。 どうなんでしょう。お願いします。
#! /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さん ありがとうございます! 助かりました。
それは、HTMLだったら半角スペースは1文字に圧縮されるのでは? 全角を使うか、PREを使うかしないと…。 あと、s/PATTERN/REPLACEMENT/ の REPLACEMENT は 正規表現ではないので、\s とか \w とか使えません。
249 :
245 :2000/08/16(水) 01:50
むーぅ。微妙にムずい。preもなんだか変。
#!/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
252 :
>232 :2000/08/16(水) 15:50
>>229 >いやunshiftや、shift@`push@`pop@`spliceは、メモリ上で配列をいじるだけ。 >その配列データをファイルに書いたりするのはまた別の仕事。 unshiftとは、何をしているのですか? メモリ上の配列とは何ですか? ごめんなさい。初めてのプログラム言語覚えようって思っている んです。
@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
256 :
名無しさん :2000/08/17(木) 11:25
上の文章、&が&amp;に変換されたりされなかったりで読みづらいですね。 すみません。
& は %26 だけど…。 %81って? newsgroup=datulaQ%26A&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
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;
$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<ネタだな
ネタにしてももう少しひねってくれ。
板違いだし
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コマンドを実行したとき その出力を変数で受けることは可能ですか? 出来ればファイルに書き出す前に出力を加工したいためです
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/";
すみません。斜め読みで回答してしまって…。 $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の権限を自分のアカウントと同様にしたいのですが どうすればいいのでしょうか。
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
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
317 :
310 :2000/08/23(水) 11:10
>309=312 $SIG{'QUIT'}@`$SIG{'INT'} を調べるといいよ。
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"; } }
ああ、何かいい加減にして欲しいよなぁ。 口調だけは謙ってるけど「慇懃無礼」の典型だな。全然本気で勉強して無さそうだし。 何でもすぐ人に頼るなよ。少しは自分で悩んで解決しろ。
328 :
名無しさん :2000/08/25(金) 05:18
ソケットってなんですか? 概念が良くわかりません どう言うことをするものなのか、 どういう物を指すのか等。 教えてください
入口出口
330 :
名無しさん :2000/08/25(金) 10:53
このスレッドを読んでいるとPerlが以下に出来の悪い中途半端な 言語であるかよくわかります
331 :
名無しさん :2000/08/25(金) 15:38
アプローチがたくさんあって、ビギナープログラマーには優しくないのに、 CGI言語ゆえにネット利用者にいちばん身近って点では不幸だわな。
>ビギナープログラマーには優しくないのに 何と比べて言ってるの? Perlほど簡単で、「動く」ものがすぐに書ける言語も少ないだろ。 ビギナーには最適だ。 中途半端といえばそうだけど、簡便さと機能と速度のバランスは 取れているよ。
333 :
??? :2000/08/25(金) 17:11
つーか凝り出すといくらでも凝れてしまうというのが。。。 スバラシイ(げら ところで CPAN の *.pm 初めて使う時に楽に導入する TIPS なんかないもんかね? 結局ソースに逝き着くのかという感じはしてきたんだが。。
334 :
名無しさん :2000/08/25(金) 18:59
>何と比べて言ってるの? C、C++、VB、VBA、JScript、コボル、sed、桐…くらい。
ひろっちだ。 少なくとも文字列の扱いにおいて C より perl のほうが明らかにビギナー向けであるから 331=334の比較は偽である。 以上。
336 :
名無しさん :2000/08/25(金) 22:08
文字列がどうとかなんて本質じゃないよ。 実際、文字列を扱えても、そこからさきは「プログラムとは なにかすごいグレートな呪文がふにゃふにゃと集まってる」 ようなイメージしか持ってないんじゃないのかね。 この板見てるとそう思うよ。
何事も自分が出来ないことは難しく見えるものである。
ひろっちだ。 ビギナー向けかどうか、についての基準について 議論の余地があるようだが 不毛なのでやめようね。 くだらないし。 以上。
339 :
名無しさん@指にウンコ付いてた :2000/08/26(土) 02:34
簡単に動かせるのは事実。 N88-BASICより更に簡単
>>336 は他の言語は使ったことはないの?(C/C++/Basic/Pascal/etc...)
他のに比べると標準で使える文字列関係の関数にはかなり便利なものがたくさんあるよ。
むしろ、あなたがプログラムに不向きなのかもね。
341 :
名無しさん :2000/08/26(土) 04:40
334=336だ。スキルは知らんが対人関係は確かにプログラマ向きではないな。 言語に便利なファンクションがあるのは当たり前だろう。あほか? ifなどの文法、それから派生する手法がトリッキーだっつーの。 違うってんならシュウォーツ変換ばりの記述がある言語と例をあげてくれ。 俺が勉強不足なだけかも知れないからな。
シュウォーツって、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 ほっかいどう@`くしろ@`くっちゃん@` やまがた@`さかた@`しんじょう@` かごしま@`まくらざき@`ちらん@`
#! /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
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の中に、コメントでキーワードを二つ入れる。 (<!-- はじめ -->と<!--おわり-->) ・フォームで新たに文章を入力すると、そのタグの 間が書き換わって出力される。他の部分は変わらない。 ということをやりたいのですが、なかなか上手く行きません。 どうやったらよいか、教えてください。 よろしくおねがいします。
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 "<!-- はじめに -->\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>
<!-- new -->
<!-- 新規書き込み用FORM -->
<tr>
<form method=POST action="./bbs.cgi">
<!-- ↑ cgiを指定する。htmと同じ場所の場合は変更しない -->
<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/</\<\;/g;
$value =~ s/>/\>\;/g;
$value =~ s/\"/\"\;/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 "<!-- new -->\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勉強していきたいです。 もう一度、本当にありがとうございました。
> 掲示板の 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
372 :
名無しさん :2000/08/29(火) 12:54
>>371 Perlでだろ
chmod(mode@` file)
373 :
379 :2000/08/29(火) 13:50
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
377 :
名無しさん :2000/08/29(火) 16:15
($b = $a) =~ s|/[^/]+$|/|; で どうだろう?
378 :
364すげーな :2000/08/29(火) 16:17
あんたすごいよ。 他に作品が見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい 見たい見たい見たい見たい見たい 見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい 見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい 見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい 見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい見たい
コピペ(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
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; にせれ
こう? #!/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
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
ブラウズ、です(^^;;失礼しました。
カール板にアイコン…
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__'; ↑これが全角スペースだから
ノ(´д`)ありゃ、、 ありがとうございました
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世紀初頭にピエール伯爵が考案したことからこの名が付けられました。
ペルリを推奨。
ActivePerl のアイコンって、モロに真珠じゃん。
うちの会社ではペルールですね。 正式名称は何でしょうか?
ペール
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てん
>428 ネタか?
431 :
名無しさん :2000/09/01(金) 23:27
>428 一応マジレス。 Virtualは、リモホ取れなくなったぞ。
432 :
428 :2000/09/02(土) 01:41
Virtualaveで、どこのプロバイダから接続しているかどうかを調べるというのはもう絶対無理なんでしょうか? 何か方法があれば教えてください。 (つまり428で書いた方法以外があれば…ということになります)
433 :
名無しさん :2000/09/02(土) 01:57
× $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すると重くなるから やらなんだよ。>リモホ取れなくなった理由 やりたきゃ上のようにするしかないね。
たしかにREMOTE_ADDRで解決しました。 アドバイスありがとうございました。
439 :
陽介 :2000/09/02(土) 17:19
CGIのなかで、GET ACTIONを使用しなければ、 $buffer = $ENV{'QUERY_STRING'}; の一行は消してもいいと聞いたんですが、消せますか? KENTのYYBBSです。
んなもんもともと必要なし。消せ消せ
441 :
名無しさん :2000/09/02(土) 17:26
>>439 実際に掲示板を設置して、いかなるURLの末尾に "?" が
付かなければ必要ありません。
「次ページ」に進む手段などで、
http://hogehoge.com/cgi-bin/yybbs.cgi?next=5
~~~~~~~
みたいなのが無ければOKです。
ズレた。スマソ。
GETっつってるだろ、あまえの頭はタコか?
タコれ~す
445 :
名無しさん :2000/09/03(日) 22:46
お時間のある方、ご教授ください。 アクセスしてきた人のリファーを 前10アドレス位、URLを習得できないでしょうか。 JavaScriptでdocument.referrerだと1つ前は取れるのですが、 history.go だと アドレスを表示出来ないのです。 収集するつもりは無いので、データをサーバに保存することは 考えていないのですが。 観覧者がIE5以降でもURLを習得する方法はありませんか?
446 :
名無しさん :2000/09/03(日) 23:30
保存しなければ無理 保存するときに、一番古いのを削って新しいのを加えればよい
ヽ(´ー`ー´)ノアホカ
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の方はあんまし知らないので もしできるんだったらスマソ(;´Д`)
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>;
あ、「最後の何行」じゃなくて単なる行数か。
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○. 見たいにエラーがでてくるんですがこれって何の意味があるんでしょうか? 解決策を教えてください。よろしくおねがいします。
読んで字のごとく "HTML"という文の終わりがどこにも見つからない。
print <<"END_OF_HTML"; <html> | </html> END_OF_HTML
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
469 :
467 :2000/09/04(月) 17:17
>>465 あと、それだと日本語に含まれる文字もエスケープコードみたいなの以外消えちゃいますね。
470 :
名無しさん :2000/09/04(月) 18:27
>462 終りを示すHTMLは行頭から書いているか、 行末によぶんなもの(スペースとかタブとか)が ついてないかを確認せよ。 # \rが悪さするなんてこたあねえよな??
よく考えてみたら 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
my ($ret) = @_; my $entity = qr/(#\d{1@`4}|#[xX][a-fA-F\d]{1@`4}| nbsp|iexcl|cent|pound|curren|yen|brvbar|sect|uml|copy| ordf|laquo|not|shy|reg|macr|deg|plusmn|sup2|sup3|acute)/; $ret =~ s/&/&/g; if ($ret =~ /&.+;/) { $ret =~ s/&($entity)/&$1/g; } 正規表現の中でパターンが上のようにとても長い(まだつづく)のですが、このままだと、'nbsp' にもマッチしてほしいのに、改行したりしているため "\n\s+nbsp" にマッチしてしまいます。 見易さのために適当なところで改行を入れたいのですが、うまい方法はないでしょうか?
ぐは、&amp;と&が混じって見づらい。。 まぁ、本題とは別のところなのでいいか。
483 :
名無しさん :2000/09/05(火) 00:44
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などを参照のこと。
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さん アドバイス大変参考になりました。 ありがとうございました。
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は放置~
入力フォーム部と過去ログ表示部が分かれてるやつでしょ? お知らせ用に管理者が使うような。 改造なら簡単だけど。探せば専用のものもあるよ。
504 :
501 :2000/09/06(水) 13:08
>503さま その通りです。 そういったモノの検索サイトってあるのでしょうか?
505 :
toc :2000/09/06(水) 13:17
表示部のCGIでリファラが入力用フォームからのものかチェックし、 入力用フォームからそのCGIを呼び出すだけでいいんじゃないの?
まず適当な板を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捜しています。
頑張ってください!
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で保存。
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> と排出させるやつを考えているのですが 今までデザインを変えるくらいしか やったことないので どうか教えてください。
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
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>"; が無いんじゃないか?(笑)
>>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
551 :
名無しさん :2000/09/08(金) 01:30
548です。 英語は基本的に読めないので何となくですが、最初の部分(127の所)は国とか広い地域で 下の桁に行くほど狭い地域になるってことですよね?
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
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░▒▓▓▓▓▓▓▓▓ ▓▓▓░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓░▒▓▓▓▓░▒▓ ▓▓▓░▒▓▓▓▓▓▓░▒▓░▒▓░▒▓▓▓▓▓░▒▓▓ ▓░░░░░░▒▓▓▓░▒▓░▒▓▓░▒▓▓▓▓░▒▓▓ ▓░▒▓▓▓░▒▓░░░░░░░░▒▓▓▓▓▓░▒▓▓▓ ▓░▒▓▓▓░▒▓▓▓░▒▓░▒▓▓▓▓▓▓░░▒▓▓▓ ▓▓▓▓▓▓░▒▓▓▓░▒▓░▒▓▓▓▓▓░▒░▒▓▓▓ ▓▓▓▓▓░▒▓▓▓▓▓▓▓░▒▓▓▓▓░▒▓░▒▓▓▓ ▓▓▓▓▓░▒▓▓▓▓▓▓░▒▓▓▓▓▓▓▓▓░▒▓▓▓ ▓▓▓▓░▒▓▓▓▓▓▓░▒▓▓▓▓▓▓▓▓▓░▒▓▓▓ ▓▓▓░▒▓▓▓▓▓▓░▒▓▓▓▓▓▓▓▓▓▓░▒▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
>むぎ茶 それ、やたら見かけるけど何?
559 :
むぎ茶 :2000/09/09(土) 09:11
見てわからんやつには、言ってもわからん
560 :
名無しさん :2000/09/09(土) 15:35
まあそのとおりだが。UTF8 に対応してるブラウザで読め。>558
なんかハテナマークしか見えないんだけども…
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/ /g;
574 :
572 :2000/09/10(日) 03:51
あ、実体参照そのまま書いちゃった(笑) 実際はこうです。 $comment =~ s/\t/&nbsp;&nbsp;&nbsp;&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 削る。 一行一情報にはならんから面倒だけど $/ つかえば読む時に空改行が区切りになるし。 エディタでログいじりやすい。
俺は\0。
\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ファイルを読みたいのですが どうしたらできますでしょうか?
587 :
名無しさん :2000/09/13(水) 11:52
単にログファイルにIPアドレスを書き込ませるには どうしたらいいですか?
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の本はクソ
クソっていうなウンコといえ!
593 :
( ´∀`)さん :2000/09/13(水) 16:24
594 :
( ´∀`)さん :2000/09/13(水) 16:26
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 本の出版社に手紙を送っておけ。
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
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
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
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
637 :
名無しさん :2000/09/19(火) 00:30
ホスト名→IPアドレス、のような変換はどうするのでしょうか?(gethostbyaddrの逆)
>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
643 :
MM :2000/09/19(火) 23:43
失礼しました。642>641で。
644 :
無名人 :2000/09/19(火) 23:44
フリーのサーバ上にて、常に動きつづける CGI を書きたいのですが、 (というと文句言われそうですが、負荷は殆ど無いものです) なぜか半日程度で止まってしまいます。 シグナルをすべて無視してみましたが結果は同じでした。 繰り返す所を eval で実行するようにしてもエラーが拾えません。 他に何か考えられる事はありますでしょうか? ゾンビタスクだと思われて殺されてる?? ちなみに、ちゃんと終了方法は持っています。
×タスク ○プロセス だったっけ?
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は必読ですね。
初めまして、CGIプログラムを作っているます。 他のサーバーなど外部のHTMLファイルを読み込ませたいのですが、どのようにすればいいのでしょうか?
>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で動作していますが。
>654 実験してみれば分るけど パーミッションの変更だけでアクセス制限は出来ませんよ。
つーかさ…自分で試してみれば済む事じゃない?
657 :
しろうと :2000/09/21(木) 05:00
チャットを移転したのですが、 CGIで他のアドレスに自動でジャンプさせるにはどうしたらいいのでしょうか? (既存のCGIを置き換えたい)
ロケーションで飛ばせば?
659 :
>657 :2000/09/21(木) 05:19
print "Location: 移転先のURL\n\n"; つーかMETAじゃダメなの?
つーかチャットへリンクを貼っている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
669 :
654 :2000/09/22(金) 02:29
>655@`656@`665 そんな感じな気がしていました。 であれば、所有者とはFTPでつないできた人を指すのでしょうか? 700だと確かに実行できなかったのですが、つまりは そのサーバではCGIを閲覧者に実行させないことを推奨している、 ということでしょうか?
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
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
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
\表\示 とかじゃだめ?
%conv_table = ( あ => ぁ や => ゃ し => ι い => ぃ ); とか変換してたりして。
695 :
名無しさん :2000/09/26(火) 23:48
macなのですが、ローカルでcgiを試したいときにmacjperlをどう使えばいいのでしょうか? それとも出来ないのでしょうか?
696 :
名無しさん :2000/09/27(水) 01:45
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の末尾の文字化けはそのままです。 どなたか対処法教えて頂けませんでしょうか。
>>697 URL文字列には全角文字含んじゃいけませなん。
$name =~ s/([\w])/sprintf("%%%02X"@` ord($1))/eg
でとりあえず全角文字とかをエスケープしとけばいい。
$name =~ s/(\W)/sprintf("%%%02X"@` ord($1))/eg の間違いだった。
700 :
名無しさん :2000/09/27(水) 07:36
701 :
名無しさん :2000/09/28(木) 05:48
Win98、Perl5で 任意のディレクトリ内の複数htmlファイルのJavaScript記述を消去する スクリプト、書いてみてください。
教えてくださいじゃなくて書いてみろってか?
一応書いておくと 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
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 の設定部分をチャットから持って来てください。
また指定ディレクトリが変わるかもしれないので、
ついでに指定方法も覚えてしまったほうがいいかもしれません。
どこかにディレクトリパスのうまい説明されてるサイトないかな?
もしよかったらどなたか教えてください。
この前のようにディレクトリの頭に "../" を付けるだけで済むのならそれで楽なのだけどね。
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'}; で、取得するのは 何が違うんでしょうか?
あちこちに書いてんじゃねぇ
736 :
716=723 :2000/10/03(火) 01:19
>732 どういたしまして。頑張ってください。 >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
アホですな
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 と言うか俺も普段はこう書く。
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 ナルホド!ありがとう
うざいからキエロ
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
ブラクラです!!
764 :
名無しさん :2000/10/06(金) 07:32
別に普通のサイト。 まあ全然面白くもなんともないからバナクリックの宣伝か。 行く意味なし。
sage損なった…。
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に突っ込むんじゃなくて・・・ 何だかスゴく勉強になって嬉しいです。 みなさん、どうもありがとう。
前も答えたけど、こんなのにgrepもmapもループも要りません。 my %temp; @temp{@pet} = ( ); @out = keys %temp;
このスレかどうか忘れたけど自分、だいぶ前に766と同じ質問した事あります。 その際は772と同じ回答もらったよ。 772がその時の人かわからんけど感謝してます。 ありがとう、あの時の人。
お久しぶりです。しばらく、新マシン (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にしてね。。ねむ。
my %temp; @temp{@a} = ( ); @c = grep exists $temp{$_}@` @b; 配列2つでしか使えない、お手軽な方法。@b の重複も検出しません。 そういや昔どっかの馬鹿がもめてたな。この質問。
779 :
名無しさん :2000/10/07(土) 16:32
質問です。 今レスキューの掲示板を使っているのですが、 デザイン変えるのに大変だからForm部を print等をはずして、 $FORM = <<"EOF"; EOF (ヒアドキュメントだっけ?)で囲みたいのですが、 EOF間に記述したらだめなものって何がありますか? これを使うといつもエラーになってしまいます。
半角の @ がある、に一票。 telnetか何か使えるんなら、perl -cw hoge.cgi でエラーメッセージを 見てみませう。
781 :
779 :2000/10/07(土) 17:08
半角@はその間には使ってないです。 激初心者ゆえtelnetとかよく分かんないので、 これから調べに行ってきます。 ほかに使っちゃだめなのは何ですか?
782 :
6 :2000/10/07(土) 17:13
" に一票。
ん?これは大丈夫?
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 </) {
while (<>) {
if($_ =~ /^From </){
$i++;
open(OUT@` "| /usr/sbin/mail2news.pl ais.test");
print OUT $mail;
close (OUT);
$mail = "";
next;
}
$mail .= $_;
}
} else {
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 で敬語は要らんと思う。 どこに「敬語」があるんだよ(^^;ワラ
話題になっている人を敬う「尊敬語」 話し手を貶めることで間接的に尊敬を表す「謙譲語」 話し相手を敬う「丁寧語」 あっくんのは一応「丁寧語」(「です・ます」調、敬体) ですから 敬語になります。796は出直してきてください。 ちなみに「だ・である」調(常体)は敬語ではありません。
>>796 本物のアホだね。
はぁ・・・
小学生?
まあ「教えれ」という便利なローカル用語があるということでやね。 (以下略)
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; すみません。
徹夜で並べ。つーか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
とりあえず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な。これでわかるかな。
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
ディレクトリ名の変更で悩んでいます。 新名作成→旧名削除の手順を踏まず、直接変更する方法は、有るのでしょうか? もし、有るなら教えて欲しいのですが。お願いします。
FTPだったら「リネーム(名前変更)」、 シェルだったら「mv」、 perlだったら「rename」 で可能。
824 :
大阪の初心者 :2000/10/11(水) 01:53
>perlだったら「rename」 823さん ありがとうございます。 ディレクトリ名の変更も「rename」で良いんですね。 さっそく試してみます。
825 :
むぎ茶 :2000/10/11(水) 03:37
↑ そのくらい自分で調べろよ。
同感。
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]と書くという ことなのでしょうか?
@hoge[1] は配列 ( "b" ) $hoge[1] はスカラー "b" ほとんどの操作で違いはありませんけど、例えば $new = $hoge[1]; # "b" が入る $new = @hoge[1]; # "b" ではなく "1" が入る などの違いはあります。
あ、肝心の「どっちが正しいか」というと、$hoge[1] です。 @hoge[1] なんて使っちゃだめです。Perlのコンパイラにも怒られます。
>@hoge[1] は配列 ( "b" ) >$hoge[1] はスカラー "b" なるほど! ありがとうございます。 >$new = @hoge[1]; # "b" ではなく "1" が入る むむむ。こっちはよくわからないです。涙。 @hoge = ("a"@`"b"@`"c"); $new = @hoge[1]; print $new; だと b と表示されるけど試し方が間違ってるのかな。
ああ、ごめん。勉強不足でした。 @hoge[1] の最後の要素(つまり、$hoge[1] そのもの)がスカラー $new に入るので、間違ってませんです。
なるほど。ありがとうございます。嬉しいです。
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とかに代入することなく実現することはできますか?
split の戻り値は元々配列だけど…。何がやりたいのかわからん。
840 :
名無しさんぽい :2000/10/12(木) 00:22
お。(2)は俺も始めて知った。便利あげ。
もしかして、 $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 さん、まさにそれでした。すみません。
欲しいのはフルパスのファイル名から
ふつーのファイル名を得るスクリプトです。
なんか今日は書き込み多いね。ちょと嬉しい。
リストと配列の違いなんだけど…説明が難しい (°Д °) @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依存しない場合は?
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
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を 読むにはどうすればいいのでしょうか?
激しくがいしゅつ。 過去ログ読みあされ。
どっかにソケット使って読むソース見た気がするが…気のせいだったかな。
873 :
名無しさん :2000/10/13(金) 20:50
874 :
869 :2000/10/13(金) 22:17
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/に入れた場合は パスの書き方はどうなるんでしょう??? よろしくお願いします。
根本的な質問をさせて下さい… 接続元のホストって、偽装できるのですか?
880 :
名無しさん :2000/10/14(土) 03:03
>878 そのままd:\perl/bin/perlと書けばいいはずだけど・・・。
ローカルでテストする時はそれでいいんけど、 アップロードする時には忘れずに /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は変わらないとのことなので
無駄な話になっちゃいますけど。
%ENVだよ。 それと、891が言ってるのは$ENV{HTTP_COOKIE}の値が変わらないのではなく クッキーそのものが更新されてないって事だと思うよ。
896 :
エクステンションを.shtmlに変更して、、、 :2000/10/15(日) 07:39
エクステンションって何だがや? 教えてちょ
897 :
名無しさん :2000/10/15(日) 09:41
>>896 拡張子のことだろ?
.htmlとか.plみたいに、ファイル名の後ろにくっついてるヤツ。
この場合、ファイルを"file.shtml"にすればいいんじゃねーの?
っつーか、このスレで聞く質問か?
ホームページ板かパソコン初心者板で修行してきなさい。
899 :
名無しさん :2000/10/15(日) 21:27
表示部がHTMLの掲示板を作ってるんですが、 javascriptを使ってcookieを取得して、 選択フォーム にクッキーの値を入れたいのですが出来ません。 ↓みたいにしました。アドバイスお願いします。 <SCRIPT LANGUAGE="JavaScript"> <!-- document.form1.SELECT1.value = No2; // --> <FORM name=form1> <SELECT NAME="SELECT1"> <OPTION VALUE="No1" >選択肢その1 <OPTION VALUE="No2" >選択肢その2 <OPTION VALUE="No3" >選択肢その3 </SELECT> </form>
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
<!--#exec cgi="/cgi-bin/accesslog.cgi"--> ダイレクトにaccesslog.cgiを開くと動くんですが…教えてちょ
903 :
名無しさん :2000/10/16(月) 01:10
904 :
902@初心者 :2000/10/16(月) 01:57
The server encountered an internal error or misconfiguration and was unable to complete your request. です。… .shtmlでやってもダメなんです。
906 :
名無しさん :2000/10/17(火) 09:09
public_html 以下に存在する全てのファイル一覧を取るには? 今は opendir(DIR@`"."); @dir = readdir(DIR); として@`@dir全てに-dのファイルテスト演算子をためしてディレクトリがあったらまたopendirって非効率な事してんだけど… 誰か助けてプリーズ
>>906 そのほうが色々と安心だよ。<*>
まあ俺だったら grep(-d $_ && $_ ne '.' && $ne '..'@` readdir(DIR)); ってやるかな。
closedirが抜けてるのは省略してるだけだと思うけど良く忘れるので注意。
書き損なった・ <*> だと見落とすことがあるし。って書こうとしていた。
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
おもろない…。宣伝か?
912 :
名無しさん :2000/10/17(火) 11:39
>>906 標準モジュールFile::Findを使ってみよう。
perldoc File::Find参照。
>>907 >>909 >>912 あんな駄質問に答えてくれるとは、ホントいい人だ。ありがとありがと。
ひとまずperldoc読んでみるです。
標準ならラクダ本にもあるかな…
914 :
へたれ :2000/10/17(火) 13:55
gzipのパスってどうやって調べるのですか? 教えてくだされ。 勿論うちはtelnet使えます へたれな質問ですまんす
which gzip
$ whereis gzip
$ mail webmaster Subject: 教えろや、ゴラァ! gzipのパスわからん 教えろや、ボケ ^D Cc:
919 :
へたれ :2000/10/17(火) 18:53
921 :
名無しさん :2000/10/17(火) 21:34
+<などでファイルをopenしたとして 現在のファイルポインタ以降をファイルから削除することはできますか?
922 :
名無阿弥陀仏 :2000/10/17(火) 23:33
そろそろ移る準備はじめよう。
923 :
名無しさん :2000/10/17(火) 23:34
>921 truncateでし。
>918 この板で始めてウケた(藁
925 :
921 :2000/10/18(水) 00:18
ありがとうございます。調べてみます。>923
読み書き両用のファイルオープンなんですが、書き込む時は追加で行う場合、 open(LOG@` "+>>./log.dat"); で良いんでしょうか?
927 :
名無しさん :2000/10/18(水) 06:13
guest
929 :
厨房です。 :2000/12/15(金) 01:53
PerlでXML::DOMを使ってファイルをパースするときは、 my $doc = $parser->parsefile ("sample.xml"); でいいんだけど、CGIで同様のことをやる場合どうすればいいのでしょうか? (ちなみにsample.xmlはスクリプトと同じディレクトリにあるとします。)
あ・・書くとこ間違えた・・。
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
あってますけど。何か疑問な点でも?
>931 先生のお越しをお待ちしてました。 わかりやすくレスしてくださいね! (氏ね
936 :
名無しさん :2000/12/18(月) 00:21
あえていうなら、なぜ local。 localが必要な局面は、あんまりないでしょ。 myつかおう。
938 :
933の名無しさん :2000/12/20(水) 03:16
localって使わない? myを使う場合って? ご教授よろしく。
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の方がイイね。 ありがとう。
AnHTTPD を使ってるんすけど, AnHTTPD から CGI を実行させても CGI 内 に記述した SSI を実行してくれないんですよね. .htaccess ファイルもダメで,どうにかならないものですか. レジストリもいろいろやってみましたがダメでちた
944 :
名無しさん :2000/12/24(日) 04:11
$| = 1; てバッファをフラッシュさせるって良く聞けど どういう意味なの? またどんな時に使うと宜しいの?
945は944に向けた発言でした。 スマソ。
掲示板に、外部の画像を張りたいんですけど、 どうすればよろしいのですか やさしい方教えてください。
おしえてくださいよ