■過去ログ倉庫めにゅーに戻る■
【Perl】 初心者コーナー
- 1 名前:名無しさん 投稿日:2000/05/02(火) 04:23
- とにかく、初めて来た方、初心者は、このスレッドから
始めよう。。。
いらっしや〜〜〜い。(三日以内には、レス付くと思うよ、誰かから)
過去ログ全部とは言わないが、このスレッド一回は、全部読んでから書きこんでネ。
- 2 名前:Perl見習い 投稿日:2000/05/02(火) 07:48
- Perlの板ができたことを契機にこれからPerlを独学してみようかと思います。
- 3 名前:CGI童貞 投稿日:2000/05/02(火) 16:46
- 先日意を決してCGIというものに手をだしてみました。
レスキューとかKENTWEBとかをたよりに何とかアップすることに成功し、
勿論出来合いのものですが、とりあえずアクセス解析のプログラム
をつけてみようと試みました。
パーミッションの設定もしっかりやり、.htaccessも何とかうまくいき
いざ、起動してみたころどうにかうまくいったみたいです。
ただ、しかし時刻の設定が、海外のサーバーだけに日本の時間になっていないのが
難点で、この修正方法がどこかに載っていたのは見たことがあったのですが、
どうしても現時点で自力で解決出来ないのです。
全部でなくていいので、ここを見れば書いてあるぜとか、ここをこうしてみろ
っていう有り難いご意見を伺えれば幸いです。どうか宜しくお願いします。
ちなみに使ったプログラムは、http://www.rescue.ne.jp/cgi-rescue/cgi?analyzeの
ログアナライザというやつです。
- 4 名前:3 投稿日:2000/05/02(火) 18:52
- ホームページ板のほうで教えてくださった人がいて解決できました。
お騒がせしました。
- 5 名前:Cも初心者だけど 投稿日:2000/05/16(火) 23:27
- Cと違ってPerl独特の表現?がわかりにくいです。
他人のスクリプト読むのが難しいです。
慣れですか?Cと一番違う表現って何なんでしょう?
- 6 名前:ぴょん基地 投稿日:2000/05/17(水) 16:32
- 正規表現
- 7 名前:名無しさん 投稿日:2000/05/18(木) 06:24
- 文字列の比較
- 8 名前:名無しさん 投稿日:2000/05/18(木) 07:02
- Perl初心者が参考にできる(初心者でも読みやすい)
スクリプト置いてある所教えてください。
- 9 名前:ひっぱりあげ 投稿日:2000/06/19(月) 17:07
- ちょっと新しいスレはなんなので・・・
.$a. って表記の「.」ってなんの意味があるのですか
誰か暇な人教えて〜
- 10 名前:名無しさん 投稿日:2000/06/19(月) 17:23
- 文字列連結演算子。左辺と右辺の文字列を連結する。
$a = "omae";
$b = "mona-";
$c = $a . $b;
print $c; # omaemona- と出力される。
まあ、この例なら
print "omae", "mona-";
の方が自然だが。
- 11 名前:名無しさん 投稿日:2000/06/19(月) 18:42
- Perlマニアは逆にC風の書き方を嫌う・・・
- 12 名前:9 投稿日:2000/06/19(月) 19:17
- "action=normal&hoge1=.$hoge1.&hoge2=.$hoge2.&hoge3=.$hoge3"
ってのがあったから聞いたんですけど
これで$hoge3の後ろとnormalの前後にはつかない
ってのがよく分かりました。ありがとうございます
ところで$c = $a $b;って書くのはダメなの??
んーーー???
- 13 名前:9 投稿日:2000/06/19(月) 19:18
- あ、だめやん
printと勘違い
さげー
- 14 名前:名無しさん 投稿日:2000/06/19(月) 20:55
- まったくの初心者(Cも知らない)でも分かる本ないですか?
初心者向けっていっても本当の初心者には分からない事ばかりです。
- 15 名前:改造くん 投稿日:2000/06/19(月) 23:21
- 「Perlで作るCGI入門」はどう?
http://www.hyuki.com/
- 16 名前:名無しさん 投稿日:2000/06/20(火) 17:16
- print と echo のの違いがいまいちわかりません。
- 17 名前:名無しさん 投稿日:2000/06/20(火) 17:31
- Perl に echo はありませんが。
- 18 名前:名無しさん 投稿日:2000/06/20(火) 18:19
- 「?0秒たったよー」ってなのを
一定時間ごとに出させようとおもい、
----time.pl
#!/usr/bin/perl
print "Content-type: text/html\n\n";
foreach $time(10,20,30,40,50){
print<<"EOF";
<html><head><title>時間</title></head>
<body>
$time秒たったよー
</body></html>
EOF
sleep(10);}
exit;
--------
これでは全然うまくいきませんでした
ある段階で一度全部出力させてってのは
どう書けば良いのですか?
あと、特に時間に正確にこだわるわけでは
ないです
- 19 名前:七 投稿日:2000/06/20(火) 20:45
- CGIとJavaアプレット間でデータの送受をしたいのですが、
やり方がわからず悩んでいます。
わかる方よろしくおねがいします
http://saki.2ch.net/test/read.cgi?bbs=prog&key=961501426&ls=50
- 20 名前:七 投稿日:2000/06/20(火) 20:46
- >18
違ってたらごめんなさい
$|=1; を指定するとか?
あと、</body></html>で閉じちゃうとだめのような気が
- 21 名前:名無しさん 投稿日:2000/06/20(火) 21:11
- >18
そういうのは良くない、というのはさておき、CGIにやらせるのは無理です。
1回のりクエストに対して1つの返答を表示して終了、という機構なので。
おとなしく JavaScript を使うか(サーバと、接続時間を考えるとこれが一番妥当)、
出力される html に
<meta http-equiv="Refresh" content="10;url=(CGIのURL)">
を入れるか、でしょうね。
アプレットでもできるかもしりませんが私は経験ないので知らず…。
- 22 名前:名無しさん 投稿日:2000/06/20(火) 21:34
- >18
できるよ。普通やんないけど。
$| = 1;
$uniq = "((($$ 他と重複しない文字列 $^T)))";
print "Content-Type: multipart/mixed; boundary=$uniq\n\n";
foreach $time(10,20,30,40,50) {
print "--$uniq\n";
print "Content-type: text/html\n\n";
print "<html><head><title>時間</title></head><body>\n";
print "$time秒たったよー\n";
print "</body></html>\n";
sleep(10);
}
print "--$uniq--\n";
- 23 名前:18 投稿日:2000/06/20(火) 22:33
- >20、21、22
さんくすー
$| = 1; これ初めてみました
調べてみます
- 24 名前:名無しさん 投稿日:2000/06/21(水) 04:33
- sleep(10); で何回も回したら http のリクエストで
ブラウザがタイムアウトにならないんですか?
- 25 名前:名無しさん 投稿日:2000/07/01(土) 01:11
- age
- 26 名前:お悩み相談者 投稿日:2000/07/01(土) 01:55
- SQLでDBからレコードを抽出します。
「ID,時間,その他情報」を時間(昇順)で取ってきます。
----------------------
ID00,01:00,情報A,情報B
ID11,02:00,情報C,情報D
ID33,02:00,情報E,情報F
----------------------
その中で、一番古い時間(01:00,02:00...とかだったら01:00)のレコードを出力したいです。
もちろん、抽出されるIDも時間も情報は、毎回違います。
僕は、どうしたらイイでしょうか?
- 27 名前:名無しさん 投稿日:2000/07/01(土) 03:10
- 抽出データって配列なんかにセットしてるんじゃないの?
もういっかいsqlなげたら?
select * from table_name order by time desc;
とか
- 28 名前:japu 投稿日:2000/07/01(土) 03:18
- SELECT *
FROM moe m
WHERE m.foo < ALL (SELECT foo FROM moe n WHERE m.foo <> n.foo);
SQL はあまり得意ではないので、もっと良い方法があるのかもしれないけど。
(foo = 時刻情報)
- 29 名前:お悩み相談者 投稿日:2000/07/01(土) 04:08
- 最初にDBからガポっと必要な情報を取ってきます。
3つのテーブルから取って、WHERE条件を5つぐらい並べて、時間と他1つフィールドを昇順で並べてる。
更に、そこからフラグを見て、情報を2つに割ってます。で、更に古い時間のレコードのみ出力。
現時点でのソースは↓こんな感じです。(SQL文は長いので省略)
$dbh = DBI->connect ($dbname, $dbuser, $dbpass, $dbd);
$cur = $dbh->prepare($SQL);
$cur->execute();
die "Prepare error: $DBI::err .... $DBI::errstr" if $DBI::err;
while (($ID, $TIME, $DATA, $Flag) = $cur->fetchrow) {
if ($Flag == 0) {
print "$ID, $TIME, $DATA";
}
elsif ($Flag == 1) {
print "$ID, $TIME, $DATA";
}
}
$cur->finish();
- 30 名前:お悩み相談者 投稿日:2000/07/01(土) 04:14
- 言い忘れました。1つの情報を2つに割ることで、1番古い時間のレコードは
2行になります。従って、この2行のみを出力しなくてはなりません。
場合によっては、3行になるかもしれないし、4行になるかもしれません。
- 31 名前:名無しさん 投稿日:2000/07/02(日) 04:19
- ちょっと聞きたいんですが、
正規表現で、oオプションするとパターン展開が
一回しか行われなくなり高速になりますが、
その際、mod_perlだと動作がおかしくなります。
(前のパターンが残る)
たぶん、展開したパターンの結果がなんかの
特殊グローバル($^Tとか)に保持されてると思うんですけど、
どうやって初期化するべきでしょう?
- 32 名前:>26 投稿日:2000/07/02(日) 07:24
- つうか SQL をみんな知らんのか?。Perl より全然簡単だぞ。手続きじゃなくて
集合演算だから勝手が違うだけで。
で、SQL サーバーには何を使っている?> 26
実装にもよるが、あるテーブル中にある全データの中から、タイムスタンプが
一番古いレコードを選択するだけなら、
SELECT id, time, data FROM your_table WHERE time =
(SELECT MIN(time) FROM your_table);
で OK だろ?。sub select(括弧 () の中にクエリーを書いて、抽出された
レコードをクエリーの対象や条件として用いること)が実装されてないなら、
$dbh = DBI->connect ($dbname, $dbuser, $dbpass, $dbd);
$cur = $dbh->prepare("SELECT MIN(time) FROM your_table");
$cur->execute();
$mintime = $cur->fetchrow;
$cur2 = $dbh->prepare("SELECT id,time,date FROM your_table WHERE time = ?");
$cur2 = execute($mintime);
という風に、2回に分けてクエリーを実行せよ。
# perl 初心者なんで上のコードが間違っていたらごめんな。
データはデリミタで区切ってあるんだろ?。こんな風に "data1,data2,date3..."
だったら split 使えばいいじゃん。
- 33 名前:31 投稿日:2000/07/03(月) 14:42
- あげとくよ?
- 34 名前:31 投稿日:2000/07/04(火) 16:13
- まだ?
- 35 名前:31 投稿日:2000/07/04(火) 20:05
- 早く答えろや!!こらぁ!!
もうさげ。
つーか、この板もう駄目だ。
- 36 名前:お悩み相談者 投稿日:2000/07/05(水) 03:03
- おかげさまで、できました。
最初に時間を取ってきて、それを条件にして情報を取りました。
SQLを2回投げればヨカッタのですね。
- 37 名前:名無しさん 投稿日:2000/07/05(水) 03:50
- >31
質問するときは自分でスレッドを立てて質問しなさい。そうしないと
この板が寂れます。スレッドを立てると活気付きます。
そもそもこんなスレッドに書き込んでも質問しているかどうか他の
人には気づきにくいので無視されても文句は言えません。
-----------------------完------------------------
- 38 名前:名無しさん 投稿日:2000/07/05(水) 09:54
- 人がたくさんいるページだと無闇にスレッド立てると怒られるけどね。
ここは人がいないから少しぐらい立てすぎる方がいいのかな?
- 39 名前:>35(=31) 投稿日:2000/07/05(水) 12:48
- ダメなのはあなたの頭である事が無事判明致しました
- 40 名前:名無しさん 投稿日:2000/07/05(水) 15:53
- SQL ってなに?
うんこ?
- 41 名前:初心者です。。 投稿日:2000/07/05(水) 17:06
- >40
尊敬します。
そういうの。
- 42 名前:名無しさん 投稿日:2000/07/08(土) 17:04
- この内容で初心者ですか・・・僕の先が思いやられます。
ちなみに、みなさんはシンプルな掲示板のスクリプトを理解するのにどのくらい
かかるのでしょうか。宜しければお聞かせ下さい。
- 43 名前:>42 投稿日:2000/07/09(日) 00:33
- すぐ
- 44 名前:>42 投稿日:2000/07/09(日) 00:52
- スクリプトの美しさに因る
- 45 名前:42 投稿日:2000/07/09(日) 01:06
- >43
すぐとおっしゃいますと、どのくらいでしょうか。
因みに僕の場合Perlの本を読み始めて1週間になるのですが、簡単なスクリプトでもちんぷんかんぷんです。
やはり、これでは遅過ぎるでしょうか。まだ本を読み終わってないせいもあるのですが。
>43
例えばYY-BOARDのスクリプトを理解するのにどのくらいかかりましたでしょうか。
それから、「かかるのでしょうか」ではなく「かかったのでしょうか」の方が適切でした。
すみません。つまり、超初心者の時といいますか・・・。
- 46 名前:43 投稿日:2000/07/09(日) 01:36
- 解説書に載ってるようなモンなら、解説読みながらあそんでたら
自然と理解できたもんだが・・・・。
YY-BOARDはソース見たこと無いです。
個人差ですから、諦めずがんばりましょう。
- 47 名前:初心者 投稿日:2000/07/13(木) 07:28
- はじめまして。
サーバにおいてあるテキストファイルを、一行一行printで表示
させると、「鉄鋼」という字が「鉄香e」みたいに化けてしまいます。
文字コードの関係かと思い、jcode.plをインクルード(でいいですか?)
させて、sjis2eucで保存、euc2sjisで展開させて、printで表示させても
結果は同じでした。結局、printの時にシフトJISを表示させてはいけない
ようなんですが・・・これをなんとか回避する方法はありませんでしょうか。
任意に\を入れて直す、という方法はとれないので(テキストの中身が
常に変わるため)、御教授宜しくお願い致します。
- 48 名前:>47 投稿日:2000/07/13(木) 07:35
- jperl を使う
- 49 名前:名無しさん 投稿日:2000/07/13(木) 07:44
- 途中で変な処理かましてるんじゃないの?
ふつうにファイル読んでメタ文字解釈されることはないと思うけど?
- 50 名前:初心者 投稿日:2000/07/13(木) 08:22
- >48&49
お答えくださりありがとうございます。
jperlはインクルードファイル(?)ですか?
49さん、特に変な処理はしていないと思うんですが、perlは
全然自信がないので、ひょっとしたらしているかもしれません。
今手元にソースがないので、後で書かせていただきます。
- 51 名前:名無しさん 投稿日:2000/07/13(木) 08:30
- >50
> jperlはインクルードファイル(?)ですか?
いや、言うなれば「perl日本語版」みたいなものです。
- 52 名前:初心者 投稿日:2000/07/13(木) 11:37
- ソースは下のような感じです。
open(REC,">>$id");
print REC "「鉄鋼」の字が化けるテスト\n";
print REC "なんで化けるのぉ?!\n";
close(REC);
open(HTML,"$exhtml");
@lines = <HTML>;
close(HTML);
print 'Content-type: text/html; charset=Shift-jis \n\n';
foreach $line (@lines)
{
$line =~ s/[\r|\n|\r\n]//g;
print $line;
print "\r\n";
}
質問ばかりで大変恐縮ですが、どうか宜しくお願い致します。
>51
なるほど、日本語版Perlというものがあるのですね。
残念ながら、レンタルサーバに依存してしまうので、こちらでは
選択肢がないのです。情報ありがとうございました。
- 53 名前:初心者 投稿日:2000/07/13(木) 11:38
- げっ、ソース間違えてました(^^;;;
こちらです。
open(REC,">test.txt");
print REC "「鉄鋼」の字が化けるテスト\n";
print REC "なんで化けるのぉ?!\n";
close(REC);
open(HTML,"test.txt");
@lines = <HTML>;
close(HTML);
print 'Content-type: text/html; charset=Shift-jis \n\n';
foreach $line (@lines)
{
$line =~ s/[\r|\n|\r\n]//g;
print $line;
print "\r\n";
}
- 54 名前:初心者 投稿日:2000/07/13(木) 11:39
- たびたびすいません・・・あれれ?
ええっと、オープンさせてるところがバケちゃってますね(^^;;
@lines = <HTML>
です。
スレ汚してすいません・・・
- 55 名前:japu 投稿日:2000/07/13(木) 11:57
- まず、根本的な間違いから。
> print 'Content-type: text/html; charset=Shift-jis \n\n';
1. '...' (または q/.../) では「\\¥、「\'」以外の処理は行われないので改
行が出力されません。(変数展開も行われない。)
2. Shift-jis は不正な指定です。Shift_JIS が正しい。(ハイフンではなくて、
アンダーバー) なお、7ビットJISはISO-2022-JP、日本語EUCはEUC-JPとなる。
3. 文字化けの理由は分からないけど不正な文字セットを指定しているので、ブ
ラウザが発狂している、に3000点。
----
次に改善した法が良い点を。
> @lines = <HTML>;
とするのは非効率です。
while(<HTML>) {
...;
}
としましょう。(今回の場合はほとんど違いは出ませんが。)
- 56 名前:初心者 投稿日:2000/07/13(木) 12:50
- ご丁寧な指摘をしていただき、本当にありがとうございます!
早速試してみましたが・・・ブラウザベースだとうまくいきました。
が、VBのopenURLで取得すると、やはり文字化けしてしまいました。
結果はこんな感じです。
【元のテキスト】
硬めの鉄鋼テスト。鉄鋼鉄鋼鉄鋼鉄鋼鉄鋼鉄鋼鉄鋼鉄鋼鉄鋼鉄鋼鉄鋼鉄鋼鉄鋼鉄
【CGIを通して呼び出したテキスト】
硬めの鉄鴻eスト。鉄酷S酷S酷S酷S酷S酷S酷S酷S酷S酷S酷S酷S酷S・
「てっこう」と読めなくないですが、これでは「テスト」が「スト」
になってしまいますので・・・しかも、鉄鋼を繰り返すと、鉄のあとに
「酷S」という怪しい文章に・・・
もうどうしたらよいものか・・・それこそ酷な状況です。
何度もすいません。どうか宜しくお願い致します。
- 57 名前:japu 投稿日:2000/07/13(木) 16:03
- それは単にVBで作ったプログラム(?)が悪いのでは?
- 58 名前:名無しさん 投稿日:2000/07/13(木) 18:13
- $line =~ s/[\r|\n|\r\n]//g;
↓
$line =~ s/\r|\n|\r\n//g;
- 59 名前:名無しさん 投稿日:2000/07/13(木) 20:48
- print REC "「鉄鋼」の字が化けるテスト\n";
print REC "なんで化けるのぉ?!\n";
↓
print REC '「鉄鋼」の字が化けるテスト',"\n";
print REC 'なんで化けるのぉ?!',"\n";
を試してみて♪
- 60 名前:初心者 投稿日:2000/07/13(木) 21:06
- >57、58、59
レスありがとうございます!
VBのプログラムが悪いのかと思い、改めてブラウザからCGIを
呼び出してみたところ・・・化けてしまいました。
記録してあるファイル自体が悪いのかもしれないと思ってチェック
してみたら、そちらは大丈夫でした。
改行コードの除去は[]がいらないのですね。ありがとうございます。
59さん、早速いまから試してみます!
2ちゃんねるの他の板やスレでは、こんなに親切にしてもらったこと
ないだけに、感激ひとしおです。本当に嬉しいなぁ。
- 61 名前:初心者 投稿日:2000/07/13(木) 21:53
- その後・・・お陰さまで解決しました!
なんと、原因は改行コードの取り除きかたにありました。
$line =~ s/\r|\n|\r\n//g; を、
$line =~ s/\n//g; に変えたら治ってしまいました(^^;;
うーん、でもどうして、 CR LF CR+LF の全部を取り除くって
やると化けるのか未だに不思議です。
S-JISにこれらのコードが重複しているのでしょうか?!
(そんなはずないですよねぇ??)
しかし、昨日からずっと悩んでいただけに、解決して本当にホッと
しています。
皆様、ありがとうございました!(^O^)
- 62 名前:japu 投稿日:2000/07/13(木) 22:32
- あ、見逃していた。正規表現中で s/[\r|\n|\r\n]//g; としたら、CR, LF, 「|」を削除しちゃうからなぁ。(文字クラスの内部ではほとんどの文字はメタ性を失う) てなわけで、tr/\r\n//d; としましょう。
(蛇足)
"「鉄鋼」の字が化けるテスト" は Shift_JIS では
0000000 201 u 223 S 215 | 201 v 202 314 216 232 202 252 211 273
0000020 202 257 202 351 203 e 203 X 203 g
で、「|」を含んでいるので。
- 63 名前:名無しさん 投稿日:2000/07/13(木) 22:36
- リロードするのが面倒で、スレッドに新しい書きこみがあったら
表示するのを作っているのですが、perlの作法がいまいち判りません。
下のような書き方でいいのでしょうか?
$server='mentai.2ch.net';
$board='mona';
$thread='960867157';
$cpath='/home/yamasaks/2ch_cnt';
$cntfile="${board}-${thread}.cnt";
$logfile="${board}-${thread}.log";
$waitcnt=120;
$wget_addr="'http\:\/\/${server}\/test\/read.cgi\?bbs\=${board}\&key\=${thread}\&ls\=2'";
$wget_file="read.cgi\?bbs\=${board}\&key\=${thread}\&ls\=2";
while(True){
print "check!\n";
$|=1;
`wget --output-file=wget.log ${wget_addr}`;
rename($wget_file,$logfile);
open(INFILE,$logfile) || die "log-file open error\n";
while(<INFILE>){last if(/^.title./);}
/^.title.(.*)/;
$title=$1;
while(<INFILE>){last if(/^.dt./);}
$_=<INFILE>;
close INFILE;
($cnt,$author,$time,$res)=/^.dt.(\d+) .*\<font.*\<b\> (.*) \<\/b\><\/font\> (.*)\<br\>\<dd\>(.*)\<br\>\<br\>\<br\>/;
$oldcnt=`cat ${cpath}/$cntfile`;
if($cnt>$oldcnt){
`echo ${cnt}>${cpath}/$cntfile`;
print "New message No.[ ".$title." :".$cnt." ]\n";
print " [ ".$author." ]";
print " ".$time."\n";
$res=~s/\&gt;/>/;
$res=~s/\&lt;/</;
$res=~s/\&amp;/&/;
$res=~s/\s*\<br\>\s*/\n/g;
print $res."\n";
}
sleep $waitcnt;
}
- 64 名前:初心者 投稿日:2000/07/13(木) 22:40
- >62japuさん
なるほど、そういうことだったんですね。
S_JISのコードまで書いてくださるなんて、本当に御親切にありがとう
ございました(^O^)
見た目だと、s/[\r|\n|\r\n]//g; なら、CRLFをとってくれそうに
見えるんですけど、こういう場合の「2文字(?)」を取り除くって
いうやり方はダメなんですか?
しかし、クラス内部でメタ性を失うのって、昔チックでいいですね。
かつての某パソ通みたいに、全角に対してBSキーを押したら、奇妙な
消え方をするのを思い出しました。
- 65 名前:名無しさん 投稿日:2000/07/14(金) 19:50
- s/[\r|\n|\r\n]//g;
は 「\r と | と \n と \r\n を ヌル文字列に置きかえる」
「\r と \n と \r\n を ヌル文字列に置きかえる」なら
s/[\r\n]//;
でも perl メモには
s/\r//;
s/\n//;
s/\r\n/;
のほうが速いとかいてあったぞ♪
- 66 名前:japu 投稿日:2000/07/14(金) 23:48
- (FYI)「削除する」だけなら、tr/\r\n//d; が一番高速だと思う...
#! /usr/local/bin/perl
use Benchmark;
$CRLF = "\r\n";
timethese(100000, {s0 => q{ $_ = $CRLF; s/[\r\n]//g },
s1 => q{ $_ = $CRLF; s/\r//; s/\n// },
tr => q{ $_ = $CRLF; tr/\r\n//d }} );
__END__
Benchmark: timing 100000 iterations of s0, s1, tr...
s0: 8 wallclock secs ( 4.35 usr + 0.00 sys = 4.35 CPU)
s1: 7 wallclock secs ( 5.22 usr + 0.02 sys = 5.24 CPU)
tr: 4 wallclock secs ( 3.03 usr + 0.01 sys = 3.04 CPU)
うぐぅ。マシンパワーが...
- 67 名前:名無しさん 投稿日:2000/07/15(土) 00:56
- IPでアクセス制限をしたいのですが・・・。
方法がわかりません
ご指導をおねがいします。
- 68 名前:名無しさん 投稿日:2000/07/15(土) 01:24
- exit if ($ENV{'REMOTE_ADDR'} =~ m/$ip_list/);
- 69 名前:名無しさん 投稿日:2000/07/15(土) 01:49
- IPはどこに書き込むのでしょう・・・。
あと、どこに記述すれば?
もうしわけないのですが
よろしくおねがいします。
- 70 名前:初心者 投稿日:2000/07/15(土) 02:49
- すみません。質問させてください。
"Abcdef"と言う文字列があって、これを
"ABCDEF"と言う風に、小文字のアルファベットを全部大文字に変換する方法があれば教えてください
- 71 名前:>70 投稿日:2000/07/15(土) 02:51
- tr/a-z/A-Z/
- 72 名前:70 投稿日:2000/07/15(土) 02:58
- >71
2分後とは早いですね。
どうも、ありがとうございました。
- 73 名前:japu 投稿日:2000/07/15(土) 04:19
- 別解
$var = "Sakura Moe";
$uvar = uc $var;
print "$var\n$uvar\n";
この方法だと、ロカール情報まで考慮されて高速に処理されるはず。
- 74 名前:japu 投稿日:2000/07/15(土) 11:02
- 一応、やってみました。
#! /usr/local/bin/perl -w
use Benchmark;
$STR = "Sakura-chan Moe";
timethese(100000, {tr => q{ $x = $STR; $x =~ tr/a-z/A-Z/ },
uc => q{ $x = uc $STR }} );
__END__
Benchmark: timing 100000 iterations of tr, uc...
tr: 12 wallclock secs ( 9.19 usr + 0.02 sys = 9.21 CPU)
uc: 2 wallclock secs ( 0.83 usr + -0.01 sys = 0.82 CPU)
- 75 名前:>74 投稿日:2000/07/15(土) 15:48
- ucって聞いた事ないっす。
変数に高速にアクセスできるようになるんですか?
- 76 名前:monalove 投稿日:2000/07/15(土) 16:02
- 手元のFreeBSDだと、ほとんど違いがありません。
japuさんの試されたperlはHAS_SETLOCALEではないのでしょうか?
tr: 1 wallclock secs ( 1.38 usr + 0.00 sys = 1.38 CPU)
uc: 1 wallclock secs ( 0.98 usr + 0.02 sys = 0.99 CPU)
- 77 名前:>75 投稿日:2000/07/15(土) 16:05
- man perlfuncすると載っています。
要はC言語のtoupper()です。
- 78 名前:75 投稿日:2000/07/15(土) 18:49
- なんだ、、、大文字にするだけの関数か、、
- 79 名前:名無しさん 投稿日:2000/07/15(土) 23:37
- 別海
$str = "Fuckin Sakura";
print "\U$str\E";#この場合\Eは要らないけど、いちおー
- 80 名前:70 投稿日:2000/07/16(日) 01:42
- 次の日になってびっくり。
いろんな方々がさまざまな別解を考えてくださいまして、
感謝感謝です。
あと
>tr: 1 wallclock secs ( 1.38 usr + 0.00 sys = 1.38 CPU)
>uc: 1 wallclock secs ( 0.98 usr + 0.02 sys = 0.99 CPU)
のような測定ができることも初めて知りました。
個人的にしてみたいので、調べてみます。
どうも、ありがとうございました。
- 81 名前:japu 投稿日:2000/07/16(日) 02:33
- ある程度高速なマシンだとほとんど差が出ないようですね。(うちのパソコン、
ボロいもんで。)
ロカールに関しては、「考慮されることもある」程度の意味です。場合によっ
ては "a" に "'" が付いた文字が "A" に "'" が付いた文字に変換されること
が期待できそうってことで。日本語を処理する場合に関しては tr/a-z/A-Z/
と変わらないでしょうけど。
- 82 名前:名無しさん 投稿日:2000/07/20(木) 19:52
- カール板が動かないんですけど,,,
何回やっても駄目なんです。
どうしたらいいですか?
- 83 名前:japu 投稿日:2000/07/20(木) 23:05
- 82:
その情報から可能なアドバイスは以下の通り:
1. 祈る
2. 念じる
3. 勉強する
4. お金で解決
# 嬉しい回答は良い質問から。
- 84 名前:monalove 投稿日:2000/07/21(金) 00:09
- 5.あきらめる
- 85 名前:名無しさん 投稿日:2000/07/21(金) 00:26
- 6.マシンをかるく叩いてみる
- 86 名前:japu 投稿日:2000/07/21(金) 01:29
- 85: 斜め45度から食らわすのがコツです。
- 87 名前:名無しさん 投稿日:2000/07/21(金) 16:14
- 1:ささやき
2:詠唱
3:祈り
4:念じよ!
カール板は灰になりました
- 88 名前:超初心者 投稿日:2000/07/21(金) 20:32
- すみません、本当に初心者なんですけど、、
掲示板とかを自分のHPに設置して動きを見るときって、
どうしても電話代がかかってしまって、、。
オフラインでそういうテストをできるようなツールって
あるんでしょうか。。
探してみたんですが、よくわかってないのもあって、
見つけられませんでした。。
すみません、教えてくださいませんか。。
- 89 名前:名無しさん 投稿日:2000/07/21(金) 21:18
- 初心者というくらいだからWindowsだよね?
1. http://www.activestate.com/Products/ActivePerl/Download.html
で、Windows用ActivePerlを手に入れ、インストールしよう。Windows Users: という
注意書きがあるので、そこのソフトを先にダウンロード&インストールするのを忘れずに。
2. AN HTTPD というソフトをどうにかして手に入れ、インストール&設定しよう(URL忘れた)。
3 ブラウザから http://localhsot/(何とかかんとか)/test.cgi などと指定すればオッケーだ!
2 と 3 の間が難しいかも。AN HTTPD の説明書など読んでがんばってくらさい。
あと flock とか symlink 使ってるCGIは動かないので注意。
- 90 名前:あ 投稿日:2000/07/21(金) 21:20
- Macだったかな…。
- 91 名前:あっ 投稿日:2000/07/21(金) 21:21
- 3 は "localhost" でした。
- 92 名前:japu 投稿日:2000/07/21(金) 21:25
- Windows なら、AN HTTPD でしょうな。
結構セキュリティホールが発見されているようだけど。
オススメなのはFreeBSDなどのPC UNIX。
Apache入れればほぼプロバイダと同じ環境で実験できるはず。
- 93 名前:超初心者 投稿日:2000/07/21(金) 21:53
- >89,92
めちゃめちゃありがとうございました。
今、ANHTTPDというソフト探してみてます。。
ActivePerlはそこの、WindowsUsers:の先から
落としました。
聞いてみて良かったです。。。
- 94 名前:名無しさん 投稿日:2000/07/21(金) 22:22
- kent-webにオフラインでCGIの説明があったと思う。
行ってみてください。
http://www.kent-web.com/
- 95 名前:名無しさん 投稿日:2000/07/21(金) 23:17
- カドルト
- 96 名前:名無しさん 投稿日:2000/07/22(土) 00:24
- 二つ質問があるのですが
<Form Method="Get" Action="./Test.cgi">
<Textarea Name="value" Cols="60" Rows="6"></Textarea>
<Input type=submit value=submit></Form>
こんなフォームで
あいうえお
かきくけこ
って感じで入力されてきたのをcgi-lib.plを使わずに処理する(デコード?)
にはどうすればいいですか?
もう一つは上の場合で改行で区切るのはどうすればいいのですか?
多分splitを使うのだと思うのですが区切り文字\nでは無理でした・・。
よろしくお願いします。
- 97 名前:マルチ@超初心者 投稿日:2000/07/22(土) 01:14
- 日本語の無料HPサービスで、CGIが設置できるトコありませんでしょうか?
勉強がてら、いろいろ試してみたいのですが。。。
- 98 名前:>97 投稿日:2000/07/22(土) 01:23
- http://tadamono.to/
ここ見るとわかるかも。
- 99 名前:97 投稿日:2000/07/22(土) 02:03
- >98 ありがとうございました。
- 100 名前:わん 投稿日:2000/07/22(土) 02:09
- >97
いろいろ試すなー
お願いだから、ANHTTPDでやってくれ〜
- 101 名前:名無しさん 投稿日:2000/07/22(土) 02:23
- Macの場合はMacJPERL5.2かMacPERL
ここからダウンロードが可能
ただし、線がかなり細いので注意
http://world.std.com/~habilis/macjperl/MacJP5.j.htm
おろしにくいのでこれを使うのが良い
http://www.vector.co.jp/soft/mac/net/se083423.html
シェアウェアなのが痛いが・・・
- 102 名前:97 投稿日:2000/07/22(土) 02:30
- >100 申し訳ないJMFI Webに登録しちゃいました
- 103 名前:すいません 投稿日:2000/07/22(土) 03:48
- http://www.nihen.com/
ここで、板の名前をどこでも良いのでクリックすると、2chみたいに
板に移動します。例えば一番上の「オロスコ」板をクリックします。
そして、オロスコ板に行った状態でIEでリロードすると、また
トップのページ(http://www.nihen.com/headline.html)に
戻ってしまいます。そうではなくて、リロードしてもオロスコ板が
表示されるようにするにはどうすればよいのでしょうか?
真剣に悩んでいます。マジレスお願いいたします。
HP板で書いたのですが、なかなかうまくいかないので
御教示お願いします。
- 104 名前:名無しさん 投稿日:2000/07/22(土) 05:53
- 質問です:
cgiにつくらせたフォルダとファイルの所有者がnobodyになってしまいました
(他のファイルはmaster)
ファイルを消すことができない状態です
nobodyをmasterにするにはどうしたらいいんでしょうか?
ちなみにffftpを使っています
よろしくお願いします
- 105 名前:名無しさん 投稿日:2000/07/22(土) 05:59
- telnetのchownコマンドをつかうんでしょうか?
- 106 名前:名無しさん 投稿日:2000/07/22(土) 06:14
- > 104
ファイルを削除するCGI使って消すべし
> 105
通常のUNIX系OSの場合、chownはrootでないと使えない。
- 107 名前:名無しさん 投稿日:2000/07/22(土) 06:31
- >>106さん
telnetコマンドについていろいろ調べたんですが無駄だったようですね...
質問に質問を重ねてしまうんですが、ファイルを削除するcgiは作れるんでしょうか?
- 108 名前:名無しさん 投稿日:2000/07/22(土) 08:47
- >107
perl の組込み関数 unlink をお使いください。
- 109 名前:>107 投稿日:2000/07/22(土) 10:25
- #!/usr/local/bin/perl
$query = $ENV{QUERY_STRING};
$query =~ s/[^\w.-]//g;
print "Content-Type: text/html\n\n";
print "<html><body>\n";
if( -f $query or -l $query ){
if( unlink $query ){ print qq|"$query" の削除に成功しました。\n| }
else{ print qq|"$query" は何故か削除できませんでした。\n| }
}
else{ print qq|"$query" は削除しないほうがいいです。\n| }
print "</body></html>\n";
exit;
こんな感じ? テストしてないけど。
del.cgi とでも名前を付けて、del.cgi?log.dat とでも指定してみてください。
- 110 名前:名無しさん 投稿日:2000/07/22(土) 23:19
- ありがとうございます!
とりあえず試してみます
- 111 名前:名無しさん 投稿日:2000/07/23(日) 04:12
- >>109
インターナルサーバーエラーがでました
#!/usr/local/bin/perl
$query = $ENV{QUERY_STRING};
$query =~ s/[^\w.-]//g;
unlink $query
これくらいまで減らして試してみたんですが動かなかったです……
状況を説明すると、掲示板用に作成したフォルダがあって、そのフォルダと中のファイルの所有者がnobodyになっています
フォルダにはアクセスできるんですが、削除はできません
フォルダ内に削除用のcgiをアップロードすることさえできません
どうにかなりませんでしょうか……
わかる方よろしくお願いします
- 112 名前:余計なお世話君(一号 投稿日:2000/07/23(日) 04:16
- 109さんのスクリプトは
消したいファイルと同じディレクトリに置くんですよ♪
- 113 名前:名無しさん 投稿日:2000/07/23(日) 04:18
- unlink $query;
- 114 名前:余計なお世話君(一号 投稿日:2000/07/23(日) 04:23
- >112
111さんの投稿を確認出来ずに投稿したため
外した発言になってしまいますた。
- 115 名前:名無しさん 投稿日:2000/07/23(日) 04:26
- 消したいフォルダの中に入れるのではなく、
消したいフォルダの1つ上に入れるわけだが、
理解できているだろうか。
- 116 名前:名無しさん 投稿日:2000/07/23(日) 04:29
- http://mentai.2ch.net/test/read.cgi?bbs=hp&key=961096548&ls=50
- 117 名前:名無しさん 投稿日:2000/07/23(日) 04:30
- っていうかこれだけでいいんじゃない?
#!/usr/local/bin/perl
unlink "ファイル名";
- 118 名前:117 投稿日:2000/07/23(日) 04:31
- あ、>フォルダ内に削除用のcgiをアップロードすることさえできません
読んでなかった。。。スマソ(^^;
- 119 名前:117 投稿日:2000/07/23(日) 04:33
- じゃ、これは?
unlink "フォルダ名/ファイル名";
- 120 名前:117 投稿日:2000/07/23(日) 04:35
- んで、その後
rmdir "フォルダ名";
- 121 名前:名無しさん 投稿日:2000/07/23(日) 04:53
- >>117
rmtreeを使えば一発、というのが116。
- 122 名前:117>121 投稿日:2000/07/23(日) 05:03
- なぬっ、そんな関数があったのか(^^;
っていうか、俺が持ってるリファレンス本に載ってないよぅー(泣
- 123 名前:名無しさん 投稿日:2000/07/23(日) 05:11
- 消せました!
>>116さん >>117さんのやり方どっちでもよかったようです
ありがとうございました
というか、みなさん親切すぎます
ここは本当に2chなんでしょうか(笑)
- 124 名前:13 投稿日:2000/07/23(日) 05:33
- いや、俺も1つ勉強になったです(^^;
- 125 名前:17 投稿日:2000/07/23(日) 05:33
- いや、俺も1つ勉強になったです(^^;
- 126 名前:117 投稿日:2000/07/23(日) 05:35
- 124=125
あぅ、中止ボタン間に合わなかった(藁
別スレで13だったから。。(^^;
っていうか17でもなくて117じゃん。。
あぁ、、、なんか鬱だ。。。(ワラ
- 127 名前: