■過去ログ倉庫めにゅーに戻る■
【Perl 】初心者コーナーPart5
- 1 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/01(火) 23:41 ID:???
- 初めて来た方、初心者はまずこのスレッドから始めよう。
尋ねる前に同じ質問がないかこのスレや旧スレ、及び>>2のリンクを一通り見てみよう。
案外答えはもう書かれているかもしれない。
- 2 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/01(火) 23:42 ID:???
- [関連スレッド]
Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087
Part3 http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521
Part4 http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156
【Perl,CGI】参考書籍 http://tako.2ch.net/test/read.cgi?bbs=perl&key=970166109
[総合]
□Perl Com: http://www.perl.com/pub/
□CPAN.com: http://search.cpan.org/
□ActivePerl: http://www.activestate.com/
[お薦め]
・Perl Recipes: http://www.effectiveperl.com/recipes/
・Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
・Randal's WebTechniques columns: http://www.stonehenge.com/merlyn/WebTechniques/
・Perlの部屋: http://www.cc.rim.or.jp/~midorin/mad-p/perl/index.html
[Module]
・Perl Module Reference: http://www.bekknet.ad.jp/~bero/docj/module/
・PPMPackages: http://www.activestate.com/PPMPackages/
・河馬屋二千年堂's Page: http://member.nifty.ne.jp/hippo2000/index.htm
[Document&Tutorial]
・Perl News: http://www.news.perl.org/
・Perl Monks: http://www.perlmonks.org/
・PerlMonth - Online Perl Magazine - : http://www.perlmonth.com/index.html
・use Perl All The Perl: http://use.perl.org/
・Learn Perl - Perl Education: http://www.devdaily.com/perl/edu/index.shtml
・Perldoc.com: http://www.perldoc.com/
・Using Perl5 in Web: http://docs.rinet.ru/Using_Perl5_in_Web/
・Rex Swain's Home Page: http://www.rexswain.com/
・Robert's Perl Tutorial: http://www.netcat.co.uk/rob/perl/win32perltut.html
・Perl Tuts: http://savage.net.au/Perl-tutorials.html
・Beginning Perl Tutorials: http://www.pageresource.com/cgirec/index2.htm
・jcode.pl の私的な解説書: http://www.mikeneko.ne.jp/~lab/kcode/jcode.html
・Perl for Newbie: http://www.harukaze.net/~mishima/perl/index.html
・Logical Choice Software, Home Page: http://www.logsoft.com/perltips/
・Perlfect Solutions: http://perlfect.com/
・The Perl Archive : http://www.perlarchive.com/
- 3 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/03(木) 22:32 ID:HAK5ITOE
- age
- 4 名前:名無しさん@いつも空腹 投稿日:2001/05/05(土) 09:33 ID:???
- 鯖移転したのかな?
本当にPart5はここでいいのかな?
最近はトップページ(インデクス)見てないからわからな〜い(はあと
- 5 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/05(土) 16:42 ID:xlcP2XLA
- 小数点の含まれる引き算を行なうと、たまに0.000000000000001の
誤差が出ることがあります。
10.45-9.55の答えが0.899999999999999とかになるのですが、
どなたかこの現象の原因と解決法をご存知ないでしょうか?
- 6 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/05(土) 18:15 ID:???
- >>5
いい所に気がついた。
長くなるので原因については割愛。
解決法は幾つかあるが、簡単なのは(s)printfだな。
printf '%.2f', 10.45 - 9.55;
$d = sprintf '%.2f', 10.45 - 9.55;
print $d;
- 7 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/05(土) 20:27 ID:???
- >>6
カコイイ。。。
有能な回答者はコテハン化きぼーん!
- 8 名前:5 投稿日:2001/05/05(土) 23:02 ID:???
- >>6
ありがとうございます。
とりあえずなんとかなりました。
後学の為に原因も知っておきたいのですが
どこかにそれを記載している場所などを
ご存知でしたら教えていただけないでしょうか?
重ねての質問申し訳ありません。
- 9 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/06(日) 00:14 ID:???
- >>8
たとえばここ。
http://www.sail.t.u-tokyo.ac.jp/~aida/cp97/971219.html
Googleで「浮動小数 計算誤差」とか入れて検索すればわらわら
見つかる。
- 10 名前:6 投稿日:2001/05/06(日) 00:23 ID:???
- >>8
原因を一言でいうと「Perlの内部では数値は文字列として格納されているわけではない」って事だな。
変数に型のある言語(Cなど)を扱っていれば理解しやすいし、教えやすいのだろうが
あいにくPerlオンリーな俺に分かりやすく詳しい説明は無理だ。スマソ。
だが「後学の為に知っておきたい」という意欲があるのならラクダ本でも買ってみたらどうだろうか。
浮動小数点数の精度については少ししか載っていないが、損はしないと思うぞ。
代わりといっちゃなんだが>>5の別の方法
>>6の他に標準モジュールのMath::BigFloatを使うという手がある。
これなら精度は無限だ。
#!/usr/bin/perl
use Math::BigFloat;
$a = Math::BigFloat->new(10.45);
$b = Math::BigFloat->new(9.55);
$c = Math::BigFloat->new('0.123456789');#小数点以下が長い場合は文字列としてnewに渡す
print $a - $b, "\n"; #".9"
print $a + $b + $c. "\n"; #"20.123456789"
__END__
>>7
ヘタレをおだてないでくれ(w;
コテハンはJapuさんや_gunzipさんくらいにならんとな・・・。
- 11 名前:5 投稿日:2001/05/06(日) 02:03 ID:???
- >>10
丁寧な解説ありがとうございます。
ラクダ本に載っているのは知りませんでした。
まだ途中までしか読めていないので。
これから頑張って続きを読んでいきたいと思います。
本当にありがとうございました。
- 12 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/08(火) 15:31 ID:Ngqkrj.g
- すいません、教えてください
入力フォームからデータを受け取ってPostgreSQLにデータを渡す際に日本語は
文字化けしてしまいます。
どのようにしたらいいのでしょうか?
- 13 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/08(火) 16:22 ID:???
- >>12
URIエスケープってオチは無いよな?
- 14 名前:nanasy 投稿日:2001/05/08(火) 16:24 ID:MgnUxoZo
- 連想配列のサイズの制限は?
いまは、なんでもかんでも連想配列に放り込んでいる(だって、便利だもん)んだけど、
将来的には、データサイズが大きくなりすぎたら、自動的にSQLのDBとかを叩く、みたいな
仕様を考えてます。
で、質問。
連想配列(にかぎらず、PERLの変数全般)に、サイズのリミットをかけることは
可能ですか?
# 心配しなくても、仮想記憶が解決してくれるよ、ってのはナシ。
- 15 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/08(火) 16:28 ID:???
- >>14
サイズ=キーの数って意味なら
擬似ハッシュというものがある。
通常のハッシュより遅いけどな。
データサイズが大きくなりすぎて困るってのなら
DB_Fileを使うという手もあるぞ。
- 16 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/08(火) 16:33 ID:???
- 追記
Perlの変数にサイズを設ける事は、可能。
tie()を調べよ。
- 17 名前:12 投稿日:2001/05/08(火) 17:07 ID:Ngqkrj.g
- フォームからの入力を受け取る
↓
EUCに変換
↓
insert into * values (hoge,hoge2);
↓
(゚д゚)ダメダコリャ
という感じなのですが
- 18 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/08(火) 17:40 ID:???
- >>17
その文から想像するに
#--
$query = $ENV{QUERY_STRING}
or
read STDIN, $query, $ENV{CONTENT_LENGTH};
$query = Jcode->new($query)->euc;
#--
とでもやってるのか?
そりゃダメだわ(藁
- 19 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/08(火) 17:41 ID:???
- 表示は文字コード何?
フォーム(Shift_JIS)
↓
EUC-JPに変換
↓
DBに入れる
↓
表示(Shift_JIS)
とかDBから表示の際に文字コード変換してないとか言うオチじゃない?
もしくは半角カナ入れてるとか。
- 20 名前:12 投稿日:2001/05/08(火) 18:13 ID:Ngqkrj.g
- >>18さん>>19さんありがとう
>>19さんのご指摘の通りでした、修行しなおしてまいります。
半角はさすがに。。。
- 21 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/13(日) 12:01 ID:/ewKYqPQ
- どなたか教えてください。
yomikomi.txtというテキストファイルにデータが
一行に一つずつ入っています。何個データが入ってるか判りません。
それを配列に入れて、とりあえずランダムで要素を一つだけ選びました。(kazu1)
もう一つ配列の中からランダムで選びたいです。
ただし、先に選んだkazu1以外の要素にしたいです。(kazu2)
↓のようにやってみたのですが上手くいきません。
#yomikomi.txtを@nyuuryokuという配列にする
open (KENSAKU,"<yomikomi.txt");
$count = 0;
while ($nyuuryoku[$count] = <KENSAKU>){
chop $nyuuryoku[$count];
$count = $count + 1;
}
close (KENSAKU);
#とりあえず、ランダムで要素を一つ選ぶ
srand();
$kazu1 = int (rand($count));
#もうひとつ、ランダムで要素を選ぶ
srand();
rand;
$kazu2 = int (rand($count));
#選んだ要素(kazu1 と kazu2)が同じならkazu2を選びなおす
while (kazu1 == $kazu2){
rand;
$kazu2 = int (rand($count));
}
#表示して確認。※ここで$kazu1とkazu2がそれぞれ違っていれば
#良いのですが同じになってしまいます。
print "$count ←要素数\n";
print "$kazu1 ←kazu1\n";
print "$kazu2 ←kazu2\n";
exit;
- 22 名前:22世紀を目指す名無しさん 投稿日:2001/05/13(日) 13:23 ID:tI0gSNbQ
- http://chat.gaiax.com/ここのチャットには
「プライベートチャット」なるjavaでできた他人には見れない会話システムがあるのですが、
これらを全て丸見えに出来る方法があると聞きました。
これは本当ですか?あったら教えてください。
日曜の昼下がりですがお願いします。…ひょとして板違い?
- 23 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/13(日) 14:53 ID:???
- >>21
ちょっと無駄が多いな。
open (KENSAKU,"<yomikomi.txt");
$count = @nyuuryoku = <KENSAKU>;
close (KENSAKU);
srand();
$kazu1 = int (rand($count));
$kazu2 = int (rand($count));
while ($kazu1 == $kazu2){
$kazu2 = int (rand($count));
}
print "$count ←要素数\n";
print "$kazu1 ←kazu1\n";
print "$kazu2 ←kazu2\n";
exit;
srandは1回にしろ。
『srand』(乱数の初期化)は、()を省略した場合、その時の時間を入れる。
sleepでもかけない限り、srandの結果は大抵同じになるってこと。
あと、所々$が抜けてるからそれも確認してみな。
- 24 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/13(日) 15:06 ID:???
- #!/usr/bin/perl
use FileHandle;
srand;
chomp(my @in = FileHandle->new('< yomikomi.txt')->readlines);
my($n1, $n2);
until($n1 eq $n2){
($n1, $n2) = (int(rand(@in)), int(rand(@in)));
}
my $count = @in;
print <<EOD;
$count
$in[$n1]
$in[$n2]
EOD
__END__
ところどころvoidでrandが置いて有るのがよく分からんが
- 25 名前:21 投稿日:2001/05/13(日) 15:59 ID:RORO2Xd.
- 23さんありがとうございます。
> srandは1回にしろ。
親切に教えていただいてありがとうございます。
> あと、所々$が抜けてるからそれも確認してみな。
すみません。全く気づかなかったです。
-wcでチェックしたんですがエラーにならないんですね。
24さんありがとうございます。
> ところどころvoidでrandが置いて有るのがよく分からんが
何回も呼び出したほうが、よりランダム性が高まるかと思って使いました。
24さんのスクリプトは自分にはかなり難しいですが勉強になります。
- 26 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/13(日) 18:44 ID:???
- >-wcでチェックしたんですがエラーにならないんですね。
use strict 'subs';によりそのような間違いを回避することが出来ます。
- 27 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/14(月) 12:39 ID:ja2f3uZE
- perlってlinuxだと大抵デフォルトで入っているんだけど
HP-UXだと公式には入っていないのでソース持ってきてインストール
しなきゃならんですよね。SUNとかIBMとかはどうなんでしょか?
- 28 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/15(火) 03:11 ID:???
- 乱数にはrand()というのがありますが、かなり質の悪い乱数のように
思えます。
もう少し綺麗な乱数を作るにはどうしたら良いんでしょうか?
勿論、rand並に手軽に使えるぐらいの大きさで、ですが。
- 29 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/15(火) 03:31 ID:???
- >>28
逆に聞きたい。
キミの言う綺麗な乱数とは何か?
- 30 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/15(火) 03:41 ID:U38TPPmg
- >>28
前にプログラム技術板でよさげなやつを見たなあ。えーと、
http://piza.2ch.net/test/read.cgi?bbs=tech&key=978946000
これこれ。レス82にあるメルセンヌツイスターというやつです。
どうでしょ。
メルセンヌツイスターホームページ
http://www.math.keio.ac.jp/~matumoto/mt.html
Cで書かれたコードに直リンク
http://www.math.keio.ac.jp/~matumoto/mt19937int.c
- 31 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/15(火) 04:19 ID:itC.85zc
- いろいろ、
http://search.cpan.org/search?mode=module&query=random
Mersenne Twister使った、Math::Random::MT ってのもあるね。
- 32 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/15(火) 11:13 ID:???
- がいしゅつかもしれないけど、昨日こんなコードではまってしまった.
function Ike($mojiretu = NULL)
{
//文字列があったら処理せよ.
if ($mojiretu)
{
echo "逝ってよし";
}
else
{
echo "文字列ないよん";
}
}
このコードは、 $mojiretu = "0"; がきたときには else に分岐してしまう.
ちゃんと、 if ($mojiretu != NULL) と、しないとだめなのだ...
実行時に型判別の恐怖.鬱だ.
- 33 名前:32 投稿日:2001/05/15(火) 11:15 ID:???
- PHPのスレと間違えました.
ごめんなさい.
- 34 名前:名無しさん 投稿日:2001/05/15(火) 14:52 ID:hcMTBPhU
- CRとLFの改行って何が違うのですか?
- 35 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/15(火) 17:03 ID:???
- 文字が違います。
- 36 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/15(火) 18:24 ID:c9i14K.Y
- UNIX LF \n
Win CR+LF \r\n
Mac CR \r
かな
- 37 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/15(火) 18:33 ID:???
- >>36
シッタカはカコワルイね
WinでもUnixでも(多分Macでも)改行は\nだよ
- 38 名前:37 投稿日:2001/05/15(火) 18:36 ID:???
- binmodeすればWinの\nとUnixの\nは同じになるけど。
(Macは知らん)
とりあえずLFは改行、WinだとCRというゴミが付くと思っていれば良いんじゃないの?>>34
- 39 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/15(火) 19:27 ID:itC.85zc
- CR \x0D \015 \cM
LF \x0A \012 \cJ
- 40 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/15(火) 22:46 ID:a8Q7zCBA
- myの使い方について質問です。
1;foeeach my $var(@array){ }
2;my $var; foreach $var(@array){ }
この1の使い方、毎回my宣言しているので2と比べ効率が悪い気がするのですが、
JAPUさんなどはよく1の方法で回していますよね?
これは何か理由があるのでしょうか。
- 41 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/16(水) 00:15 ID:1AgH6foc
- >>40
おれも無意識に1の方法を使ってるなあ。なぜかと考えるに、
$varのスコープをブロック内に局所化できるのが
気持ちいいから、ではなかろうか。
- 42 名前:40 投稿日:2001/05/16(水) 10:15 ID:ufM2vq4Q
- 訂正) s/foeeach/foreah/;
>>41
簡単なベンチマークを取ったところ、数%ですが2の方が高速でした。
気にするほどではないと思いますが、
無意識に1の方法を取るほどいいメリットとも思えません…<$varのforeachブロック内への局所化
他に利点は無いのでしょうか?
- 43 名前:初心者過ぎる人 投稿日:2001/05/16(水) 11:19 ID:E0ODptoI
- すみません新規質問です。
ASPで動くXML::DOMモジュールはどこにあるんでしょうか?
- 44 名前:JAPU 投稿日:2001/05/16(水) 13:59 ID:???
- 私が 1. の方法を利用するのは、>>41 さんと同じ理由です。
変数は可能な限り局所化する主義なので。
# その2%程度が気になるような人はアセンブラで組めば良い。:-p
- 45 名前:40 投稿日:2001/05/16(水) 15:15 ID:ufM2vq4Q
- >>44
なるほど。納得しました。
>>41, >>44 ありがとうございます。
ずっと気になっていたのでスッキリしました。
- 46 名前:初心者 投稿日:2001/05/16(水) 17:03 ID:dHgf5I9c
- スクリプトA.plの中からスクリプトB.plを起動させるときに
B.plへ変数を渡す方法とB.plが終了した事をA.pl内で
判断する方法を教えてください
お願い致します
- 47 名前:初心者 投稿日:2001/05/16(水) 17:19 ID:dHgf5I9c
- スクリプトA.pl内
system(perl B.pl $A $B $C > $log_file)
open(LOG,"< $log_file")
というコーディングでよいのでしょうか?
- 48 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/16(水) 17:52 ID:???
- >>46
require 'A.pl';
では不満なのか?
- 49 名前:初心者 投稿日:2001/05/16(水) 17:58 ID:dHgf5I9c
- >>48
Aの中から変数を与えてBを実行し
Bのログをファイルにリダイレクトさせた物を
再びAの中で加工したいのです。
- 50 名前:名無しさん 投稿日:2001/05/16(水) 18:02 ID:dUC0dSnc
- チャットについて質問です。
チャットのリロード機能がついてる仕様は絶対にフレーム型でしょうか。
つまり、chat.cgiで入力フォームと会話表示(ログ表示)部分をlog.htm
などとします。
log.hmにrefreshを使い自動更新しますよね。
しかし、入力部分と会話表示部分がひとつ画面だと
chat.cgiを更新してしまうので入室画面に戻ってしまいます。
結論は、フレーム型のチャットが嫌なので一体型で自動更新したいのですが
何か方法はありますでしょうか?
- 51 名前:名無しさん 投稿日:2001/05/16(水) 18:04 ID:dUC0dSnc
- >つまり、chat.cgiで入力フォームと会話表示(ログ表示)部分をlog.htm
>などとします。
ちょっとここは書き間違いです。
- 52 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/16(水) 18:16 ID:???
- >>50
理屈の上ではフレームを使わないCGIも作れます。
でも書き込みしてる最中にリロードが起きると、
せっかく途中まで書いた文章が消えちゃうよ?
それって利用者から文句出まくりだと思うんだが。
- 53 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/16(水) 18:31 ID:???
- >>49
とりあえず>>47でいいのでは。
systemの引数がクォートされてないのだけ気になったけど。
こうね => system("perl B.pl $A $B $C > $log_file");
- 54 名前:せちがないにぎりめし 投稿日:2001/05/16(水) 19:14 ID:???
- ごく簡単な改造でイイと思うんだけど
作製依頼は何処で出したらイイですか?
- 55 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/16(水) 19:40 ID:???
- >>54
それに最も近いスレッドは↓ここか。
[スクリプト改造工房] http://corn.2ch.net/test/read.cgi?bbs=php&key=988808396
ただし答える人はそう多くない。無視されたらあきらめること。
- 56 名前:投票などについて 投稿日:2001/05/17(木) 00:11 ID:T3NJy0u2
- どのスレに書き込むか迷ったので初心者に書きます。
ある板でロゴの投票をしようという事になったのですが、
Win板のロゴ投票では、投票した人間のアクセスログも
わかっていたようです。
こういうのは投票用のCGiにアクセスログの機能もついてる
ものなのか、アクセスログ用のCGIの見る先が投票用のCGI
にしてるのかわかりません。
アクセスログ機能がついてる投票用のフリーCGIとか
あればいいんですが、探す限り最新の投票のホスト名だけ
とかばかりで一覧にバーッとログファイルができるようなのが
ないんですが‥うーん‥
- 57 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/17(木) 01:22 ID:???
- >>56
なにが言いたいのかわからんぞ。もちっと整理してくれ。頼むよ。
Windows版がロゴ投票に使ったのと同じCGIが欲しいってことか?
しかしそれならWin板に行って話をすればいいだろうし・・・。
#あ、もしかしたら、同じようなCGIが欲しいけど、
#Win板に頭を下げるのがイヤなマッカーな人?
- 58 名前:初心者 投稿日:2001/05/17(木) 03:33 ID:rW7cRx.k
- >>53
レスありがとうございます。
ログ加工までなんとかできました。
- 59 名前:初心者 投稿日:2001/05/17(木) 03:39 ID:rW7cRx.k
- ついでといってはなんなのですが、
実際にスクリプトを実行せずにコーディングチェックだけを
行えるデバッグモードみたいなことはperlで出来ませんでしょうか?
環境はシステムがwin32でperlはperl5とjperlがあります。
(perl5とjperlの違いもよくわからないのですが・・・)
- 60 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/17(木) 04:24 ID:KYQIk2Ao
- >>59
ん? perl -wc <スクリプト> じゃだめ?
# Tもつけよう。
- 61 名前:初心者 投稿日:2001/05/17(木) 08:46 ID:rW7cRx.k
- たびたびすみません。
配列@getに変数で値を追加していきたい時は
while(....){
@get = $hensu
}
で行えますでしょうか?
- 62 名前:56 投稿日:2001/05/17(木) 08:48 ID:.GKme7Xc
- >57
Win板で聞いてきたんですが
誰も答えてくれません(泣)
ロゴ投票まとめてた人の目につかないだけかもしれませんが。
投票した人間のログを記録するようなCGIが
欲しいということです。
一応フリーの投票用の探したんですが
ログファイルとか残すタイプがなかったもので。
- 63 名前:初心者 投稿日:2001/05/17(木) 08:52 ID:rW7cRx.k
- $i = 0;
while(....){
$get[$i] = $hensu;
++$i;
}
と行わなければ、やっぱり駄目でしょうか?
- 64 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/17(木) 08:57 ID:rZ3d9O0s
- >>63
push @get, $hensu;
Perlの本でも買ってきたら?
- 65 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/17(木) 08:58 ID:/ddSlCio
- >>63
while(...) {
push @get, $hensu;
}
- 66 名前:65 投稿日:2001/05/17(木) 08:59 ID:???
- 被った・・・
- 67 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/17(木) 09:47 ID:WmKEiYPc
- Perlで簡単なプロクシサーバー(つーかただのフィルタみたいなもんだけど)
を書いているのですが、ActivePerlで fork 使うと速攻で落ちます。
やっぱりWindowsで fork は無理ですか?ちなみにスクリプトの方のバグかと
思ってLinuxでテストしたら普通に動きました。なんかActivePerlは
かわりにスレッドが使えるとかなんとか聞いたような気がするんですが
どうなんでしょう。
- 68 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/17(木) 10:21 ID:???
- >>67
Perlのバージョンは?
- 69 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/17(木) 10:28 ID:???
- >>68
ActivePerl-5.6.0.616です
- 70 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/17(木) 10:30 ID:???
- >>62
#---
sub logsave{
local *LOG;
open LOG, '>>log.dat' or return;
flock LOG, 2;
print LOG <<EOD;
${\time()}<>$ENV{REMOTE_ADDR}<>$ENV{HTTP_USER_AGENT}
EOD
close LOG;
}
#---
- 71 名前:68 投稿日:2001/05/17(木) 10:47 ID:???
- >>69
スマン、俺じゃ分からん。
Perl5.6.0.623でforkのテストをすると成功する事もあるがDLLのエラーで落ちる事もあった。
スレッドはサパーリわからん。"perldoc Thread"とでもしてくれ。
- 72 名前:69 投稿日:2001/05/17(木) 11:02 ID:WmKEiYPc
- >>71
あら、残念。ActivePerlじゃなくても最近のPerlは
スレッド使えるみたいだけど、スレッドに関する資料が
少なくてよくわからないよ。ちなみに perldoc は見た
んだけど、スレッドが使えるって言うのはこのモジュールの
ことを指すの?なんか実験的な機能とか書いてあるけど…
まあとりあえずちゃんと読んでみるよ
あと、とりあえず perl -V 打ったら
usethreads=undef
ってなってたからこのままじゃスレッドは使えない
のかな。もしかしてこれを有効にするにはソースから
なんかオプションつけてコンパイルしなくちゃならないの?
わから〜ん!誰かヒントを!
- 73 名前:初心者 投稿日:2001/05/17(木) 12:35 ID:rW7cRx.k
- if($data[2] =~ /^$data2[0]/){
}
以上のようにコーディングしたら
if文のセンタックスエラーでこけてしまいました。
//で変数は使えないのでしょうか?
- 74 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/17(木) 12:46 ID:WmKEiYPc
- >>73
パターンマッチの中では[]は特別な意味あり
ちなみに変数は使える。
$tekito = $data2[0];
if ($data[2] =~ /^$tekito/) {}
とかにしたら?
- 75 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/17(木) 13:40 ID:???
- syntax errorなら何処かでセミコロンが抜けているに一票
- 76 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/17(木) 13:42 ID:???
- ちなみに>>74は不正解。
#!/usr/bin/perl
$data[2] = 'abc()';
$data2[0] = 'ab';
print $data[2] =~ /^$data2[0]/;
__END__
- 77 名前:74 投稿日:2001/05/17(木) 14:09 ID:???
- >76
ほんとだ、真になってた。適当書いてスマソ
- 78 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/17(木) 16:19 ID:eJAJlr4A
- >>67-72
おおー。ActivePerlの5.6って、
スレッドを使ってforkのエミュレーションするようになったんだ。
perldoc perlfork をざっと見てみました。
まだpipeは使えないんだね。
- 79 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/17(木) 19:33 ID:KWAHrWxw
-
二次元配列で配列の二次元目(?)の要素数を調べには
どうしたらいいでしょうか?
$hoge[0][$n]の$nが何個か知りたいんです
あんまりPerlでは二次元配列はつかわないんでしょか?
- 80 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/17(木) 19:52 ID:PKwP8X0M
- >>79
$size = scalar @{$hoge[0]}
Perlの2次元配列は実際には「配列へのリファレンス」の配列。
つまり$hoge[0]等は各々が配列へのリファレンスである。
@{$hoge[0]}としてデリファレンスすると配列の実体になる。
あとは定石通りscalar関数で配列サイズを取得。
- 81 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/17(木) 19:59 ID:???
- >>79
自分が知らないというだけで「使われていない」と思うのはどうか。
まぁ修得が若干難しいというのは確かだが。
#!/usr/bin/perl
$aryref0 = [qw(0 1 2 3 4 5)];
$aryref1 = [qw(0 1 2)];
$aryref2 = [qw(0 1 2 3 4 5 6 7 8 9)];
@ary = ($aryref0, $aryref1, $aryref2);
print <<EOD;
$#{$ary[0]} + 1 = ${\($#{$ary[0]} + 1)}
$#{$ary[1]} + 1 = ${\($#{$ary[1]} + 1)}
$#{$ary[2]} + 1 = ${\($#{$ary[2]} + 1)}
EOD
__END__
- 82 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/17(木) 22:02 ID:???
- >>80-81
サンキュー
{$hoge[0]}って囲む事を知らなかったから問題だったんだな
説明もわかりやすかったし
スクリプトもわかりやすくて助かりました
あまり使われていないのかって書いたのは
Cの参考書には二次元配列について書いてあっても
Perlの参考書には書いてなかったからさ
Perlはいろんな方法がある分二次元配列とかは
そんなに使わないのが普通なのかなって思って
サブルーチンの中でグローバル変数を
あんまりつかわないのと一緒で
大体他の方法で抜けるのが一般的かなと思ったんです
ほんとにありがとう
- 83 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/17(木) 22:53 ID:???
- Perlの参考書に書いていないのは
CGIスクリプトを作る際に必須な概念ではないってのが大きいんじゃないかな。
- 84 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/17(木) 22:57 ID:693Tbg52
- >>82
そんな本はすてちまえぇ!
- 85 名前:名無しさん 投稿日:2001/05/17(木) 23:36 ID:ENQ64Pv6
- mod_perl
てなんて読むの。
もどぱーる?
もじゅーるぱーる?
- 86 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/18(金) 05:54 ID:YOZjqt/s
- う。なやまず「もっどぱーる」とよんでた。
どうなんだろう。
- 87 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/18(金) 10:09 ID:???
- おれも「もっどぱーる」派
- 88 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/19(土) 00:46 ID:pQYsUf86
- >>85
「もっとPerl!」を、方言にした感じで「もっどぱーる」
- 89 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/19(土) 04:44 ID:???
- なにも知らずに動けばそれで良しな私は
@data[x]
$data[x]
を一緒に使っちゃってますが、やはり問題ありますよね?
- 90 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/19(土) 07:15 ID:pQYsUf86
- 詳しいことは知らないが、Perl6からは、@data[x]は、配列のスライスではなく、
配列の要素を指す記述方法になるらしい。
配列のスライスは、別の記述方法が用意されるらしいです。
- 91 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/19(土) 10:14 ID:???
- >>89
問題あり
- 92 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/19(土) 12:36 ID:mE7mDJyE
- 半角カナの処理ってどうされてますか?
おいらはjcode.plで全角にしちゃってますがその他ってなにか方法
ありますか?
- 93 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/19(土) 13:29 ID:???
- ベツニ。メールジャネーンダカラメクジラタテルコトモアルマイ<ハンカク
ISO-2022-JPッツーワケデモナイノニゼンカクニシチマウノハドウカトオモウ
- 94 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/19(土) 14:13 ID:???
- JavaScript で頑張る。
- 95 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/19(土) 16:25 ID:???
- すごく恥ずかしい質問なのですが
JAVAのコメントアウトみたいに
/*
ココがコメントにょ
*/
みたいな機能はないのでしょうか?
- 96 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/19(土) 17:14 ID:wk52aSL.
- >>95
POD形式のコメントにするのが正式だと思う。
参照: perldoc -q "comment out" および perldoc perlpod
ちょこっと部分的にコメントアウトしたいときは
=pod
この部分はパースしないよ
=cut
だけでいいかもな。
- 97 名前:_gunzip 投稿日:2001/05/19(土) 20:53 ID:???
- >>95
Cみたいに /* */ や // が使いたい場合は、
----------
#!/usr/bin/perl -MFilter::cpp
/*
複数行コメント
*/
print "ok!"; //一行コメント
----------
とする手もあります。
本当は96さんのようにするのがベストだし、自分も普段は
そうしているのだけれど、一応、雑学的知識として....
#事前にCプリプロセッサ(うちでは"gcc -E")に食わせているだけです。
- 98 名前:95 投稿日:2001/05/19(土) 22:32 ID:1jbpiiuM
- 96さん97さん、ありがとうございました。
#入門本に載って無くてずっと#を20行とか打ってました・・・
- 99 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/19(土) 23:10 ID:???
- >>98
いや#を20行というのが間違いというわけではないよ。
PODにしろCプリプロセッサに食わせるにしろ、"完全に無視される存在ではなくなる"からね。
- 100 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/20(日) 01:40 ID:???
- いろいろ方法があるんですねえ。ていうかそれがPerlというものか。
このスレのPart1から全部まとめて「Perlの雑学」っていう
サイトを作ったら面白いかもなあ。
- 101 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/20(日) 02:44 ID:???
- >>100
> このスレのPart1から全部まとめて「Perlの雑学」っていう
> サイトを作ったら面白いかもなあ。
それマジで誰かやってくれないかな。
漏れは取捨選択できるレベルじゃないからダメっぽいけど…。
- 102 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/20(日) 04:11 ID:???
- 勉強がてらに作ろうかしらん
- 103 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/20(日) 04:15 ID:???
- >>102
頼むよ。
- 104 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/20(日) 04:28 ID:???
- >>102
場所を用意してくれるんなら少しは協力するぞ。
- 105 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/20(日) 05:44 ID:???
- アカウント提供しようか?
- 106 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/20(日) 05:47 ID:???
- PERL勉強できるHPある?
せっかくLINUXいれたので・・・。
- 107 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/20(日) 05:50 ID:???
- ヒューレットパッカードのマシンですか?>106
- 108 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/20(日) 07:26 ID:???
- >>107
まだそんな事でつっこむのかよ。
サブッ
- 109 名前:not 107 投稿日:2001/05/20(日) 08:17 ID:???
- >>108
誰も突っ込まなくなったらもうダメだ。
- 110 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/20(日) 08:18 ID:???
- >>106
このスレの>>2のリンク集の[お薦め]のとこ。って"の"が多いね。
- 111 名前:名無しさん 投稿日:2001/05/20(日) 08:31 ID:/uasmmyo
- Apache::PerlRunとApache::Registryの違いって何ですか。
- 112 名前:(・∀・)イイ!! 投稿日:2001/05/20(日) 10:31 ID:3QTA/xf2
- パイオニアのHPアニメ板の奴らにハッキングされました。
http://ton.2ch.net/test/read.cgi?bbs=news&key=990241282&ls=100
- 113 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/20(日) 11:36 ID:???
- >>102
http://xbbs21.virtualave.net/xbbs/up/
ここにページを圧縮してアプしてくれれば、
こっちで見られるようにするよ。
- 114 名前:初心者 投稿日:2001/05/20(日) 13:32 ID:4X2s.QbM
- すみません助けてください。
perlでAとBのファイルのレコードマッチングで
同じレコードを抜き出してCというファイルを作るのですが
foreachの入れ子で作るとどうしても抜き出すレコードが
2レコードずつ出力されてしまいます。
どこかによい例がありませんでしょうか?
- 115 名前:初心者 投稿日:2001/05/20(日) 13:31 ID:4X2s.QbM
- すみません助けてください。
perlでAとBのファイルのレコードマッチングで
同じレコードを抜き出してCというファイルを作るのですが
foreachの入れ子で作るとどうしても抜き出すレコードが
2レコードずつ出力されてしまいます。
どこかによい例がありませんでしょうか?
- 116 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/20(日) 13:39 ID:???
- >>115
まずはそのスクリプトを書くなりアプするなりしたらどうだ。
- 117 名前:初心者 投稿日:2001/05/20(日) 13:48 ID:4X2s.QbM
- すみません、こんなかんじです。
@new = <NEW>;
foreach $new_rec (@new){
#---関数 comp_update
$subname="comp_update";&local_time;
&comp_update;
$val = &comp_update;
if($val){
if($hit_sw eq "0"){
print OUT "$new_rec2---unm\n";
}
print OUT "$new_rec2\n";
}
}
#
sub comp_update{
# 新旧更新情報ファイルの比較
$hit_sw = "0";
$new_rec2 = $new_rec;
@new_data = split(/\s+/,"$new_rec");
@old = <OLD>;
foreach $old_rec (@old){
@old_data = split(/\s+/,"$oup_rec");
if(($new_data[0] eq $old_data[0]) && ($new_data[1] eq $old_data[1]) && ($new_data[2] eq $old_data[2])){
$hit_sw = "1";
if($new_data[3] eq $old_data[3]){
return[0];
}else{
return[1];
}
}
}
if($hit_sw eq "0"){
return[1];
}
}
- 118 名前:初心者 投稿日:2001/05/20(日) 13:50 ID:4X2s.QbM
- 段差がつかなくてすみません
あと4行目はファイルの突き合わせには意味のない
サブルーチンです。
- 119 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/20(日) 14:00 ID:???
- なんつーか…いっちゃ悪いが無茶苦茶だな
思うに問題は"return[n]"じゃないか?勘だが。
真偽値を返すつもりなら"return(n)"と書いてみな。
- 120 名前:初心者 投稿日:2001/05/20(日) 14:11 ID:4X2s.QbM
- >>119
nって数字ではないのですか?
アルファベットの“n”ですか?
メインルーチン側はどうやって真偽を判断するのですか?
- 121 名前:_gunzip 投稿日:2001/05/20(日) 14:14 ID:???
- 解決にはならないが、気になる点。
>return[0];
return(0);
[]じゃなくて()だよ。(このままだと、0という要素を持った配列へのリファレンスを
返すことになってしまうよ)
>$hit_sw eq "0"
数値を""でくくるのは、なんか変。
$hit_sw = 1; $hit_sw == 0;
>$new_rec2
こういった変数の付け方は、後から見ると(or 他の人が見ると)何を指しているのか
分かりづらいのでやめよう。(しかもグローバル変数で突然現れるし......)
>$old_data[0] eq $new_data[0] とか
どんなフィールドを比較しているのか.....わからん。
>@old = <OLD>;
毎回読むの?最初の一回でファイルの終端まで全部読んでしまうから
二回以降@oldは空じゃない?
#どういったことをやりたいのかを(114より詳しく)正確に書いて欲しい。
- 122 名前:_gunzip 投稿日:2001/05/20(日) 14:17 ID:???
- >2レコードずつ出力されてしまいます。
ってことは、
>if($hit_sw eq "0"){
>print OUT "$new_rec2---unm\n";
>}
>print OUT "$new_rec2\n";
>}
の後者のprintが要らない?......というか、よくわからん。
- 123 名前:ははは 投稿日:2001/05/20(日) 14:28 ID:???
- デバッグする気になれんよ・・・・・
- 124 名前:初心者 投稿日:2001/05/20(日) 14:38 ID:4X2s.QbM
- >>121
やりたいことは 更新情報であるNEWファイルのレコードを
OLDファイルのレコードと比べて、
互いのレコードデータの項目[0]〜[2]まで一致したら
日付(YYYYMMDD・・・)の入っている項目[3]を比べ
差異があればOUTファイルへ出力させます。
但し、NEWファイルにしかないレコードもunmatchとして同じく出力させます。
>>@old = <OLD>;
>毎回読むの?最初の一回でファイルの終端まで全部読んでしまうから
>二回以降@oldは空じゃない?
NEWのレコード1行毎に、OLDファイルは頭から再び
探したいのですけど・・・意味ないのでしょうか?
- 125 名前:初心者 投稿日:2001/05/20(日) 14:57 ID:4X2s.QbM
- >return[0];
>return(0);
>[]じゃなくて()だよ。(このままだと、0という要素を持った配列へのリファレンスを
>返すことになってしまうよ)
スミマセンここもう少し詳しく教えてください。
1度シンタックスエラーになり
リファレンスマニュアルを読むと[]と書いてあったので変えたのですが・・・
戻り値に真偽を与えメインルーチン側で真偽を判断する方法がよくわからないのです。
あと 一度、配列にファイルハンドルで全てあたえたら
繰り返し処理でやる意味はないのですか?
open...
@old = <OLD>;
close...
とファイルを開いて全て読みこんでファイルを閉じるのが正しい
使い方なのでしょうか?
- 126 名前:名無しさん@お腹いっぱい。 投稿日:2001/05/20(日) 15:12 ID:???
- >>125
悪い事は言わないからまともな本買って勉強し直しな。
その方が君のためになる。
- 127 名前:_gunzip 投稿日:2001/05/20(日) 15:18 ID:???
- ああ、昼寝してた。すまん。
#!/usr/bin/perl -w
use constant NOT_EXISTS => 0;
use constant EXISTS => 1;
use constant LAST_MODIFIED => 3;
@old = map{ [ split ] } <OLD>;
while($rec = <NEW>){
chomp $rec;
$is_exists = NOT_EXISTS;
@new = split(/\s+/,$rec);
foreach $old (@old){
if(($new[0] eq $old->[0]) && ($new[1] eq $old->[1]) && ($new[2] eq $old->[2])){
$is_exists = EXISTS;
if($new[LAST_MODIFIED] ne $old->[LAST_MODIFIED]){
print $rec , "\n";
last;
}
}
}
if($is_exists == NOT_EXISTS){
print $rec , "---unmatched\n";
}
}
やりたいのはこういったこと?
- 128 名前:_gunzip 投稿日:2001/05/20(日) 15:19 ID:???
- >print $rec , "\n";
print OUT $rec , "\n";
だな。それにNEW,OLDも開いてない。
- 129 名前: