【Perl 】初心者コーナーPart7
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい
01/09/12 13:04ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。
参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://corn.2ch.net/test/read.cgi?bbs=php&key=988809842&ls=50
CGIの質問はこちら【CGIだけど、なんか質問ある?part3】
http://corn.2ch.net/test/read.cgi?bbs=php&key=988727833&ls=50
過去ログ、その他の役立ち情報は>>2-5を見よう。
0504FREAKES
01/10/03 02:32ID:iOlT3Zggうまく掲示板のCGIが動作しません
どうしてでしょう、自分では、みれるのに
0505名無しさん@お腹いっぱい。
01/10/03 02:38ID:???0506名無しさん@お腹いっぱい。
01/10/03 03:42ID:???マルチポストうざい。
0507名無しさん@お腹いっぱい。
01/10/03 05:39ID:xNIE/jvQしかし以下のようなスクリプトだとどうもうまく行きません。
$counterlogのファイルを作成して一度目、二度目は1、2とカウントされ、表示
もされるのですが、三回目はいきなり13となります。4回目は1214、5回目は
12131215という具合です。
sub counter {
open(COUNTER, "+<$counterlog");
$counter = <COUNTER>;
++$counter;
print COUNTER $counter;
close(COUNTER);
}
どこがおかしいのか分かりません。
よろしくお願いします。
0508名無しさん
01/10/03 05:52ID:xwMhor1s0509名無しさん@お腹いっぱい。
01/10/03 06:27ID:7VPeoMkk0510名無しさん@お腹いっぱい。
01/10/03 07:00ID:???投稿したあとで検索エンジンで調べてみるとtruncate(COUNTER, 0);と
seek(COUNTER, 0, 0);との組合せを発見しました。
seek(COUNTER, 0, 0);だけでもいいのか・・・。
いろいろ試してみます。
ありがとうございます。
0511名無しさん@お腹いっぱい。
01/10/03 07:03ID:1Z0sNt2wWindows用のgzipをGETせよ → http://www.gzip.org/
0512名無しさん@お腹いっぱい。
01/10/03 07:12ID:???『出来る』と答えりゃ良いのか?
えすぱってみると、mod_gzipかCygwin辺り?
何をしたいのか書いとらんから、さぱ〜り分らん。
> 良い回答は良い質問から
>>1 を良く読んでくれ。
0513509
01/10/03 07:32ID:7VPeoMkk0514509
01/10/03 08:46ID:???apache for win32を入れないと駄目なのでしょうか?
0515名無しさん@お腹いっぱい。
01/10/03 09:20ID:???ANHTTPDは触ったことないんですけど、
Win2000 + Apache for Win32 ならmod_gzip入れるのは簡単ですよ。
ていうか513を読んで、試しに↓からダウンロードしてみたら
あんまり簡単に動いてびっくりした。
http://www.remotecommunications.com/apache/mod_gzip/
0516ファイルの新規作成
01/10/03 12:36ID:???まだ存在しないので open ができずファイルハンドルが
取得できません。
0517516
01/10/03 12:41ID:???他のエラーが原因でした。
0518えび
01/10/03 12:41ID:tut8CQIEseek(COUNTER, 0, 0);で良いと思います。
seek(COUNTER, 0, 0);はファイルポインタを先頭までまき戻す。
truncate(COUNTER, 0);はファイルを0バイトまで切り詰める。
という処理ですが、
カウンターファイルに新しく数値を記入する場合であれば
seekで先頭にまき戻して新しいカウントの数を上書きすれば良いと
思います。
カウンターは桁が増えても桁が減るという事はないので
以前のデータから上書きしても以前のデータの切れ端とかが
残る事はないのでseekだけで問題はないでしょう。
0519初心者だけど検索くらいは出来る人
01/10/03 12:49ID:???0521名無しさん@お腹いっぱい。
01/10/03 12:54ID:???ブチュゥ〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
0522名無しさん@お腹いっぱい。
01/10/03 13:34ID:6LJeEkqsまじで背筋がゾッとしたからやめてくれ
理想ならその業界の技術書を熟読するのが一番なの。
サバ構築だって然り。ネットとは何か?と言うこと。
書店にあるものを読んでるうちは中級どまり。
高校の微積分を学ぶときは決してニュートンやライプニッツの原書を読まないのは単に難易度の問題。
機会があれば読むべき。
0524名無しさん@お腹いっぱい。
01/10/03 14:20ID:???ハードにはしぶしぶ使う。
けどアキバで部品単位でBSテレビが作れるなら
それに超したことはない
故障のたんびに悪対応の窓口は死ね!
0528名無しさん@お腹いっぱい。
01/10/03 14:43ID:???0529名無しさん@お腹いっぱい。
01/10/03 15:01ID:HFewZhw6これってcgiファイルの文字は検索対象に入らないのでしょうか?
掲示板の書き込みとかもトップページから検索できるようにしたいので。
どなたかご存じの方は教えて下さい。
05301
01/10/03 15:11ID:1nsRDm4c0531名無しさん@お腹いっぱい。
01/10/03 15:57ID:???スレ違い。つかマルチポスト死ね。
0532名無しさん@お腹いっぱい。
01/10/03 16:41ID:???0533丸出し
01/10/03 17:23ID:eJHCCMAcところで話を戻しますが、
なんかナイスタイミングで529と似てるんですけど
文字列検索する時って正規表現じゃなくて
index使う利点ってあるんですか?
これだと大文字小文字区別しない風にできないと
今の知識だと思うんですけども…?あほな事いってます?
0534a'x
01/10/03 17:35ID:???0535名無しさん@お腹いっぱい。
01/10/03 17:40ID:???0536a'x
01/10/03 17:43ID:???ら辺読め。
0537名無しさん@お腹いっぱい。
01/10/03 17:44ID:???カウンタは自前で用意する必要がありますか?
$xxx みたいにあらかじめ使える変数が用意されているとか
ないですか?持っている本には出ていないのですが
あればいいなと。
0538名無しさん@お腹いっぱい。
01/10/03 17:46ID:???0539名無しさん@お腹いっぱい。
01/10/03 17:46ID:???0540名無しさん@お腹いっぱい。
01/10/03 17:46ID:???ないよん。
0541名無しさん@お腹いっぱい。
01/10/03 17:47ID:???Benchmarkやindexの使い方分からない猿 ププ
0542名無しさん@お腹いっぱい。
01/10/03 17:48ID:???>>541
そんな奴いない。
0543名無しさん@お腹いっぱい。
01/10/03 17:51ID:???0544名無しさん@お腹いっぱい。
01/10/03 18:02ID:???半角カナで入力された場合、全角カナに自動的に直して
表示する環境変数を教えて下さい。バイト数をチェックすれば
いいんでしょうか?
0545名無しさん@お腹いっぱい。
01/10/03 18:02ID:???use Benchmark;
open FH, "./seek.dat";
@lines = <FH>;
close FH;
timethese(16, {
'REGEXP ' => \&find_by_regexp,
'INDEX ' => \&find_by_index,
} );
sub find_by_regexp {
my $count = 0;
foreach (@lines) {
if (/an/) {
$count++;
}
}
}
sub find_by_index {
my $count = 0;
foreach (@lines) {
if (index($_, "an") >= 0) {
$count++;
}
}
}
Benchmark: timing 16 iterations of INDEX , REGEXP ...
INDEX : 3 wallclock secs ( 3.31 usr + 0.00 sys = 3.31 CPU) @ 4.83/s (n=16)
REGEXP : 4 wallclock secs ( 4.02 usr + 0.00 sys = 4.02 CPU) @ 3.98/s (n=16)
2万行のデータで検証。
0546名無しさん@お腹いっぱい。
01/10/03 18:03ID:???0547名無しさん@お腹いっぱい。
01/10/03 18:05ID:???これを使えばいいですよ?
検索して頑張って下さい?
0548名無しさん@お腹いっぱい。
01/10/03 18:05ID:???0549538
01/10/03 18:06ID:???0550名無しさん@お腹いっぱい。
01/10/03 18:09ID:???-------------仕切り直し----------------
0551名無しさん@お腹いっぱい。
01/10/03 18:11ID:???まさか本当に検証されるとは思わず嘘ついて荒らそうとしていた
548=538萎え。
0552名無しさん@お腹いっぱい。
01/10/03 18:18ID:???それより>>547を問い詰め(以下略
0553544
01/10/03 18:27ID:6STEKkdE環境変数じゃなくて、置き換え演算子の事です。
よろしくお願い致します。
0554512
01/10/03 18:34ID:???515さんが言ってるとおり、Apache入れた方が凄まじく楽なのは事実。
ただ、mod_gzip使わなくてもCGIの出力ならGZIPと併用して出来なくも
無い筈。AnHttpdは使ってないから分らんけど。
ここ見てくれ。
http//www.ibport.co.jp/~yui/cgiwork/tech/index.html
これやるなら、たぶんCygwin入れると厄介しなくてすむと思う。
つか、Apache(Win32)入れた方が早いかなぁ(苦笑
どっちかと言うと、『CGIだけど、なんか質問ある?』スレ向きな
気もしてきた…。
0555名無しさん@お腹いっぱい。
01/10/03 19:09ID:1VC1FzQwPerl自体には半角全角変換の機能は(まだ)ないから、
自分でコードを書くか、出来合いのライブラリを使います。
たとえばjcode.plを使って$FORM{TEXT}を変換するなら下のとおり。
require 'jcode.pl';
jcode::h2z_sjis(\$FORM{TEXT});
0557555
01/10/03 20:07ID:???ついでに自力でコードを書く例も。
%han2zen = ( #一部のみ抜粋
'ニ'=>'ニ', 'ク'=>'ク', 'コ'=>'コ', 'ッ'=>'ッ', 'プ'=>'プ',
'ン'=>'ン', 'マ'=>'マ', 'ズ'=>'ズ', 'ー'=>'ー',
);
$s = "ニクコップン(-д-)マズー";
$s =~ s/([。-゚][゙゚]?)/$han2zen{$1}/ge; # ←ここで変換
print "$s\n";
これで大丈夫かな?? 実際には%han2zenに、
すべての半角カナ→全角カナの対応を入れてください。
0560丸出し
01/10/03 20:34ID:???indexのが早いんですか!
ある配布cgiで検索機能があったんですけど
半角全角を一緒にして検索できる便利さを捨てて
鯖の負荷を減らす方をとったのか。
なるへそ〜〜。ありがとです。
0561名無しさん@お腹いっぱい。
01/10/03 20:50ID:VH/5AUngREMOTE_HOSTをgethostbyaddrでIPからアドレスに変換したのですが
変換するとpop3.norton.antivirusと表示されます。
これって何でしょう?間違ってはないと思うのですが…
識者の方でご存知のかたおられましたらお願いします。
0562名無しさん@お腹いっぱい。
01/10/03 20:59ID:???気にスンな
気になるならセキ板でもいって「ハックされていますっ!!!!」
ってスレ立てて死んでこい w
0563名無しさん@お腹いっぱい。
01/10/03 22:33ID:???言う意味で書いています($で始まるの色々ありますよね)。
0564名無しさん@お腹いっぱい。
01/10/03 22:43ID:???0565名無しさん@お腹いっぱい。
01/10/03 22:53ID:???そのためのやつでしょ。
0566名無しさん@お腹いっぱい。
01/10/03 23:37ID:CQyY2Ec6Perlで定期的に送信フォームを押すみたいなことはできますか?
つか、初心者はその前にこれ覚えれみたいなことありましたら指摘お願いします。
0567名無しさん@お腹いっぱい。
01/10/03 23:38ID:???まず日本語を勉強してね &heart
0570名無しさん@お腹いっぱい。
01/10/03 23:50ID:???>>1周辺を見ろ。
方言使うな。
0572名無しさん@お腹いっぱい。
01/10/03 23:59ID:???ちょっと漠然としすぎてて答えようが無いよ
この板に良書スレが有るから、そこを良く読んで自分に合った
本を一冊買って下さい。
で、それを読みながらWEBなんかも活用して勉強すればいいよ。
それといきなりCGIは薦めないな、、少しはPERL書けるようになって
HTMLも書けるようになれば自然と書ける様になるから
0573566
01/10/04 00:21ID:???ありがとうございます。
全然右も左もわからないもので・・・
以前age荒らしをスクリプト組んでやってる、というのを見て、
プログラミングに興味を持ったのですが、(荒らしをしたい訳じゃないんです。断じて)
例えは悪いですが、そういうことはできるのか知りたかったんですが、
これでもまだ漠然としているんでしょうかね・・・
とりあえず、勉強して出直してきます。有り難う御座いました。
0574名無しさん@お腹いっぱい。
01/10/04 00:24ID:???0575名無しさん@お腹いっぱい。
01/10/04 00:30ID:???関係ないけどね。頑張ってね。
0576510
01/10/04 02:08ID:f1gid5yYえびさん
遅くなりましたが、詳しいお答えありがとうございました。
・・・精進します・・・。
0577名無しさん@お腹いっぱい。
01/10/04 08:23ID:9Z2wk3j2明確な目標を持った厨房のほうが好きだね。俺は。
つーわけで>>566みたいな奴には期待したい。
(1)ローカルマシンにPerlとWebサーバを入れる。
(2)全環境変数表示CGIを自作し、Webサーバで動かす。
(3)GETメソッドで(2)のCGIにアクセスしてみる(LWP::Simpleモジュールが便利)
(4)POSTメソッドで同じく(2)にアクセス(LWP::UserAgentモジュール)
とりあえ、以上の実験を試してみることをすすめる。
0578名無しさん@お腹いっぱい。
01/10/04 08:41ID:???残念賞として"$."(現在の行番号)をあげよう。
while (<DATA>) { print "$. $_"; }
__DATA__
mona
giko
0580名無しさん@お腹いっぱい。
01/10/04 11:35ID:nOAoqb9AHTMLA → CGI の、HTMLAのURLです
0581名無しさん
01/10/04 11:37ID:???0582名無しさん@お腹いっぱい。
01/10/04 13:23ID:nOAoqb9A空白になっちゃうんです。うううむ。
0583名無しさん@お腹いっぱい。
01/10/04 13:28ID:???0585名無しさん@お腹いっぱい。
01/10/04 15:33ID:???てか、えらそうに書いたの俺なんすけど。
正規表現スレ逝って修行してきます・・・。
0586名無しさん@お腹いっぱい。
01/10/04 16:14ID:???9 div 4 = 2
9 mod 4 = 1
のdivです。
0587名無しさん@お腹いっぱい。
01/10/04 16:31ID:???0588名無しさん@お腹いっぱい。
01/10/04 16:33ID:???0589名無しさん@お腹いっぱい。
01/10/04 16:52ID:4x063qa6Perlからアクセスすることは可能でしょうか?
出来る場合、相対パスでアクセスするのでしょうか??
0590名無しさん@お腹いっぱい。
01/10/04 16:55ID:???あ。divはないんですね。
%があるのに変だなぁと思って探してたんです。
#9-(9%4)とかやってたですよ。鬱。int()でいいんだ…
0591名無しさん@お腹いっぱい。
01/10/04 17:41ID:???いまいち動作がわかってないんだが。
{ use integer; $foo = 9 / 4; }
または
use integer; $bar = 9 / 4; no integer;
0592名無しさん@お腹いっぱい。
01/10/04 17:44ID:???可能である。
相対パスでも絶対パスでも。ただしURLじゃなくてOSのパス。
0593名無しさん@お腹いっぱい。
01/10/05 00:35ID:???my と local の違いが良くわかりません。どう使い分けるべきなのでしょう。
0594名無しさん@お腹いっぱい。
01/10/05 05:47ID:???一口には説明できないけど、まず".pl"と".pm"の表面的な違い。
●Hoge.plファイル
require 'Hoge.pl'; で読み込む。
実際はどんな拡張子でもいいが慣例として".pl"が使われる。
requireでは、この命令を実行する時点でファイルが読み込まれる。
必要なときのみrequireするようにうまくコードを書くと
無駄なメモリを使わずにすむ。
● Hoge.pmファイル
拡張子".pm"の扱いは特別で、
use Hoge ('mona','giko'); と書くのは、
BEGIN{ require 'Hoge.pm'; Hoge->import('mona','giko'); }
と書くのと同じ。
BEGINブロック相当なので、コード中のどこにuse Hogeを書いても
Hoge.pmは起動時に必ず読み込まれる。
決して実行されない位置、たとえばif (0) { use Hoge; } でもね。
さらに自動的に実行されるHoge->import()を利用して各種の初期設定が可能。
importメソッドをどう使うかは自由だけど、普通はHogeクラスを
メインプログラムから簡単にアクセスするための設定とかを書く。
#まだ言ってることワケワカだろうけど、そのうちわかる。
0595名無しさん@お腹いっぱい。
01/10/05 11:28ID:QBNm.OW.どのようにしたら良いでしょうか。
また、ゴミデータ(エディタで表示できないような文字)の
判別方法はありますか?
0596名無しさん@お腹いっぱい。
01/10/05 11:44ID:Cx9AZXvIJcode.pmを入手して使うと楽。
日本人が作ったやつだけど、CPANにあるっけ?調べてみて。
use Jcode;
my $s = "まあ聞いてくれよ、スレと関係あるからさ。\n";
print Jcode->new(\$s, 'sjis')->utf8;
何がゴミデータかというのはエディタにもよるから。どのエディタ?
0597596
01/10/05 11:46ID:???環境でないとだめだったかも。。。
Windows用ならコンパイル済みのやつがある。
0598名無しさん@お腹いっぱい。
01/10/05 11:51ID:???c:/bin/
こんなの?
0599名無しさん@お腹いっぱい。
01/10/05 12:32ID:???そんなの。unix系は"c:"なしで。
0600名無しさん@お腹いっぱい。
01/10/05 13:07ID:QBNm.OW.ゴミデータってのは、制御コードのようなものとか、
文字コードが判別できないような「F・カ」みたいに表示されて
しまうものとか。そういったデータのことです。
エディタによって表示が違うのはその通りですね(^^;
0601名無しさん@お腹いっぱい。
01/10/05 18:48ID:???$hash{'Micro$oft'} = "VVindovvs";
foreach(keys %hash) {
$data =~ s/$_/$hash{$_}/;
}
print $data;
この場合 "Micro$oft" に含まれる "$" がパターンと見なされて
うまく置換できません。どのような回避方法が考えられるでしょうか?
自分ではパターン文字列でメタ文字と見なされてしまう文字列を
あらかじめエスケープする置換処理を挿入しているのですが
あまりスマートとは思えません。
パターン部の変数展開を一度だけ行ってくれるといいんですが。
「o」では期待した動作が得られませんでした。
0602名無しさん@お腹いっぱい。
01/10/05 18:51ID:???0603名無しさん@お腹いっぱい。
01/10/05 19:22ID:???$data = 'hogehogeMicro$ofthogehoge';
%hash = ( 'Micro$oft' => "VVindovvs", 'hoge' => '[ピー]' );
$re_keys = join('|', map { "\Q$_\E" } keys(%hash));
$data =~ s/($re_keys)/$hash{$1}/go;
print $data;
0604名無しさん@お腹いっぱい。
01/10/05 23:37ID:QBNm.OW.Jcodeをppmでインストールしようとしたら
>Installing package 'Jcode'...
>Error installing package 'Jcode': Read a PPD for 'Jcode',
>but it is not intended for this build of Perl
>(MSWin32-x86-multi-thread)
というメッセージが出てきてしまいました。バージョン違い?
CPAN逝ってきます。
■ このスレッドは過去ログ倉庫に格納されています