トップページ⇒php
1001コメント379KB

【Perl 】初心者コーナーPart5

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。2001/05/01(火) 23:41ID:???
初めて来た方、初心者はまずこのスレッドから始めよう。
尋ねる前に同じ質問がないかこのスレや旧スレ、及び>>2のリンクを一通り見てみよう。
案外答えはもう書かれているかもしれない。
0002名無しさん@お腹いっぱい。2001/05/01(火) 23:42ID:???
[関連スレッド]
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/
0003名無しさん@お腹いっぱい。2001/05/03(木) 22:32ID:HAK5ITOE
age
0004名無しさん@いつも空腹2001/05/05(土) 09:33ID:???
鯖移転したのかな?
本当にPart5はここでいいのかな?
最近はトップページ(インデクス)見てないからわからな〜い(はあと
0005名無しさん@お腹いっぱい。2001/05/05(土) 16:42ID:xlcP2XLA
小数点の含まれる引き算を行なうと、たまに0.000000000000001の
誤差が出ることがあります。
10.45-9.55の答えが0.899999999999999とかになるのですが、
どなたかこの現象の原因と解決法をご存知ないでしょうか?
0006名無しさん@お腹いっぱい。2001/05/05(土) 18:15ID:???
>>5
いい所に気がついた。
長くなるので原因については割愛。

解決法は幾つかあるが、簡単なのは(s)printfだな。

printf '%.2f', 10.45 - 9.55;

$d = sprintf '%.2f', 10.45 - 9.55;
print $d;
0007名無しさん@お腹いっぱい。2001/05/05(土) 20:27ID:???
>>6
カコイイ。。。
有能な回答者はコテハン化きぼーん!
000852001/05/05(土) 23:02ID:???
>>6
ありがとうございます。
とりあえずなんとかなりました。

後学の為に原因も知っておきたいのですが
どこかにそれを記載している場所などを
ご存知でしたら教えていただけないでしょうか?

重ねての質問申し訳ありません。
0009名無しさん@お腹いっぱい。2001/05/06(日) 00:14ID:???
>>8
たとえばここ。
http://www.sail.t.u-tokyo.ac.jp/~aida/cp97/971219.html
Googleで「浮動小数 計算誤差」とか入れて検索すればわらわら
見つかる。
001062001/05/06(日) 00:23ID:???
>>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さんくらいにならんとな・・・。
001152001/05/06(日) 02:03ID:???
>>10
丁寧な解説ありがとうございます。
ラクダ本に載っているのは知りませんでした。
まだ途中までしか読めていないので。
これから頑張って続きを読んでいきたいと思います。
本当にありがとうございました。
0012名無しさん@お腹いっぱい。2001/05/08(火) 15:31ID:Ngqkrj.g
すいません、教えてください
入力フォームからデータを受け取ってPostgreSQLにデータを渡す際に日本語は
文字化けしてしまいます。
どのようにしたらいいのでしょうか?
0013名無しさん@お腹いっぱい。2001/05/08(火) 16:22ID:???
>>12
URIエスケープってオチは無いよな?
0014nanasy2001/05/08(火) 16:24ID:MgnUxoZo
連想配列のサイズの制限は?

いまは、なんでもかんでも連想配列に放り込んでいる(だって、便利だもん)んだけど、
将来的には、データサイズが大きくなりすぎたら、自動的にSQLのDBとかを叩く、みたいな
仕様を考えてます。
で、質問。
連想配列(にかぎらず、PERLの変数全般)に、サイズのリミットをかけることは
可能ですか?

# 心配しなくても、仮想記憶が解決してくれるよ、ってのはナシ。
0015名無しさん@お腹いっぱい。2001/05/08(火) 16:28ID:???
>>14
サイズ=キーの数って意味なら
擬似ハッシュというものがある。
通常のハッシュより遅いけどな。

データサイズが大きくなりすぎて困るってのなら
DB_Fileを使うという手もあるぞ。
0016名無しさん@お腹いっぱい。2001/05/08(火) 16:33ID:???
追記

Perlの変数にサイズを設ける事は、可能。
tie()を調べよ。
0017122001/05/08(火) 17:07ID:Ngqkrj.g
フォームからの入力を受け取る
↓
EUCに変換
↓
insert into * values (hoge,hoge2);
↓
(゚д゚)ダメダコリャ

という感じなのですが
0018名無しさん@お腹いっぱい。2001/05/08(火) 17:40ID:???
>>17
その文から想像するに
#--
$query = $ENV{QUERY_STRING}
or
read STDIN, $query, $ENV{CONTENT_LENGTH};
$query = Jcode->new($query)->euc;
#--
とでもやってるのか?
そりゃダメだわ(藁
0019名無しさん@お腹いっぱい。2001/05/08(火) 17:41ID:???
表示は文字コード何?

フォーム(Shift_JIS)
↓
EUC-JPに変換
↓
DBに入れる
↓
表示(Shift_JIS)

とかDBから表示の際に文字コード変換してないとか言うオチじゃない?
もしくは半角カナ入れてるとか。
0020122001/05/08(火) 18:13ID:Ngqkrj.g
>>18さん>>19さんありがとう
>>19さんのご指摘の通りでした、修行しなおしてまいります。
半角はさすがに。。。
0021名無しさん@お腹いっぱい。2001/05/13(日) 12:01ID:/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;
002222世紀を目指す名無しさん2001/05/13(日) 13:23ID:tI0gSNbQ
http://chat.gaiax.com/ここのチャットには
「プライベートチャット」なるjavaでできた他人には見れない会話システムがあるのですが、
これらを全て丸見えに出来る方法があると聞きました。
これは本当ですか?あったら教えてください。
日曜の昼下がりですがお願いします。…ひょとして板違い?
0023名無しさん@お腹いっぱい。2001/05/13(日) 14:53ID:???
>>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の結果は大抵同じになるってこと。
あと、所々$が抜けてるからそれも確認してみな。
0024名無しさん@お腹いっぱい。2001/05/13(日) 15:06ID:???
#!/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が置いて有るのがよく分からんが
0025212001/05/13(日) 15:59ID:RORO2Xd.
23さんありがとうございます。
> srandは1回にしろ。
親切に教えていただいてありがとうございます。
> あと、所々$が抜けてるからそれも確認してみな。
すみません。全く気づかなかったです。
-wcでチェックしたんですがエラーにならないんですね。

24さんありがとうございます。
> ところどころvoidでrandが置いて有るのがよく分からんが
何回も呼び出したほうが、よりランダム性が高まるかと思って使いました。
24さんのスクリプトは自分にはかなり難しいですが勉強になります。
0026名無しさん@お腹いっぱい。2001/05/13(日) 18:44ID:???
>-wcでチェックしたんですがエラーにならないんですね。

use strict 'subs';によりそのような間違いを回避することが出来ます。
0027名無しさん@お腹いっぱい。2001/05/14(月) 12:39ID:ja2f3uZE
perlってlinuxだと大抵デフォルトで入っているんだけど
HP-UXだと公式には入っていないのでソース持ってきてインストール
しなきゃならんですよね。SUNとかIBMとかはどうなんでしょか?
0028名無しさん@お腹いっぱい。2001/05/15(火) 03:11ID:???
乱数にはrand()というのがありますが、かなり質の悪い乱数のように
思えます。
もう少し綺麗な乱数を作るにはどうしたら良いんでしょうか?

勿論、rand並に手軽に使えるぐらいの大きさで、ですが。
0029名無しさん@お腹いっぱい。2001/05/15(火) 03:31ID:???
>>28
逆に聞きたい。
キミの言う綺麗な乱数とは何か?
0030名無しさん@お腹いっぱい。2001/05/15(火) 03:41ID: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
0031名無しさん@お腹いっぱい。2001/05/15(火) 04:19ID:itC.85zc
いろいろ、
http://search.cpan.org/search?mode=module&query=random

Mersenne Twister使った、Math::Random::MT ってのもあるね。
0032名無しさん@お腹いっぱい。2001/05/15(火) 11:13ID:???
がいしゅつかもしれないけど、昨日こんなコードではまってしまった.

function Ike($mojiretu = NULL)
{
//文字列があったら処理せよ.
if ($mojiretu)
{
echo "逝ってよし";
}
else
{
echo "文字列ないよん";
}
}
このコードは、 $mojiretu = "0"; がきたときには else に分岐してしまう.
ちゃんと、 if ($mojiretu != NULL) と、しないとだめなのだ...
実行時に型判別の恐怖.鬱だ.
0033322001/05/15(火) 11:15ID:???
PHPのスレと間違えました.
ごめんなさい.
0034名無しさん2001/05/15(火) 14:52ID:hcMTBPhU
CRとLFの改行って何が違うのですか?
0035名無しさん@お腹いっぱい。2001/05/15(火) 17:03ID:???
文字が違います。
0036名無しさん@お腹いっぱい。2001/05/15(火) 18:24ID:c9i14K.Y
UNIX LF   \n
Win CR+LF \r\n
Mac CR   \r
かな
0037名無しさん@お腹いっぱい。2001/05/15(火) 18:33ID:???
>>36
シッタカはカコワルイね
WinでもUnixでも(多分Macでも)改行は\nだよ
0038372001/05/15(火) 18:36ID:???
binmodeすればWinの\nとUnixの\nは同じになるけど。
(Macは知らん)

とりあえずLFは改行、WinだとCRというゴミが付くと思っていれば良いんじゃないの?>>34
0039名無しさん@お腹いっぱい。2001/05/15(火) 19:27ID:itC.85zc
CR \x0D \015 \cM
LF \x0A \012 \cJ
0040名無しさん@お腹いっぱい。2001/05/15(火) 22:46ID:a8Q7zCBA
myの使い方について質問です。

1;foeeach my $var(@array){ }
2;my $var; foreach $var(@array){ }

この1の使い方、毎回my宣言しているので2と比べ効率が悪い気がするのですが、
JAPUさんなどはよく1の方法で回していますよね?
これは何か理由があるのでしょうか。
0041名無しさん@お腹いっぱい。2001/05/16(水) 00:15ID:1AgH6foc
>>40
おれも無意識に1の方法を使ってるなあ。なぜかと考えるに、
$varのスコープをブロック内に局所化できるのが
気持ちいいから、ではなかろうか。
0042402001/05/16(水) 10:15ID:ufM2vq4Q
訂正) s/foeeach/foreah/;

>>41
簡単なベンチマークを取ったところ、数%ですが2の方が高速でした。
気にするほどではないと思いますが、
無意識に1の方法を取るほどいいメリットとも思えません…<$varのforeachブロック内への局所化
他に利点は無いのでしょうか?
0043初心者過ぎる人2001/05/16(水) 11:19ID:E0ODptoI
すみません新規質問です。
ASPで動くXML::DOMモジュールはどこにあるんでしょうか?
0044JAPU2001/05/16(水) 13:59ID:???
私が 1. の方法を利用するのは、>>41 さんと同じ理由です。
変数は可能な限り局所化する主義なので。

# その2%程度が気になるような人はアセンブラで組めば良い。:-p
0045402001/05/16(水) 15:15ID:ufM2vq4Q
>>44
なるほど。納得しました。
>>41, >>44 ありがとうございます。

ずっと気になっていたのでスッキリしました。
0046初心者2001/05/16(水) 17:03ID:dHgf5I9c
スクリプトA.plの中からスクリプトB.plを起動させるときに
B.plへ変数を渡す方法とB.plが終了した事をA.pl内で
判断する方法を教えてください

お願い致します
0047初心者2001/05/16(水) 17:19ID:dHgf5I9c
スクリプトA.pl内

 system(perl B.pl $A $B $C > $log_file)

open(LOG,"< $log_file")


というコーディングでよいのでしょうか?
0048名無しさん@お腹いっぱい。2001/05/16(水) 17:52ID:???
>>46
require 'A.pl';
では不満なのか?
0049初心者2001/05/16(水) 17:58ID:dHgf5I9c
>>48
Aの中から変数を与えてBを実行し
Bのログをファイルにリダイレクトさせた物を
再びAの中で加工したいのです。
0050名無しさん2001/05/16(水) 18:02ID:dUC0dSnc
チャットについて質問です。
チャットのリロード機能がついてる仕様は絶対にフレーム型でしょうか。
つまり、chat.cgiで入力フォームと会話表示(ログ表示)部分をlog.htm
などとします。
log.hmにrefreshを使い自動更新しますよね。
しかし、入力部分と会話表示部分がひとつ画面だと
chat.cgiを更新してしまうので入室画面に戻ってしまいます。
結論は、フレーム型のチャットが嫌なので一体型で自動更新したいのですが
何か方法はありますでしょうか?
0051名無しさん2001/05/16(水) 18:04ID:dUC0dSnc
>つまり、chat.cgiで入力フォームと会話表示(ログ表示)部分をlog.htm
>などとします。

ちょっとここは書き間違いです。
0052名無しさん@お腹いっぱい。2001/05/16(水) 18:16ID:???
>>50
理屈の上ではフレームを使わないCGIも作れます。
でも書き込みしてる最中にリロードが起きると、
せっかく途中まで書いた文章が消えちゃうよ?
それって利用者から文句出まくりだと思うんだが。
0053名無しさん@お腹いっぱい。2001/05/16(水) 18:31ID:???
>>49
とりあえず>>47でいいのでは。
systemの引数がクォートされてないのだけ気になったけど。
こうね => system("perl B.pl $A $B $C > $log_file");
0054せちがないにぎりめし2001/05/16(水) 19:14ID:???
ごく簡単な改造でイイと思うんだけど
作製依頼は何処で出したらイイですか?
0055名無しさん@お腹いっぱい。2001/05/16(水) 19:40ID:???
>>54
それに最も近いスレッドは↓ここか。
[スクリプト改造工房] http://corn.2ch.net/test/read.cgi?bbs=php&key=988808396
ただし答える人はそう多くない。無視されたらあきらめること。
0056投票などについて2001/05/17(木) 00:11ID:T3NJy0u2
どのスレに書き込むか迷ったので初心者に書きます。

ある板でロゴの投票をしようという事になったのですが、
Win板のロゴ投票では、投票した人間のアクセスログも
わかっていたようです。
こういうのは投票用のCGiにアクセスログの機能もついてる
ものなのか、アクセスログ用のCGIの見る先が投票用のCGI
にしてるのかわかりません。

アクセスログ機能がついてる投票用のフリーCGIとか
あればいいんですが、探す限り最新の投票のホスト名だけ
とかばかりで一覧にバーッとログファイルができるようなのが
ないんですが‥うーん‥
0057名無しさん@お腹いっぱい。2001/05/17(木) 01:22ID:???
>>56
なにが言いたいのかわからんぞ。もちっと整理してくれ。頼むよ。
Windows版がロゴ投票に使ったのと同じCGIが欲しいってことか?
しかしそれならWin板に行って話をすればいいだろうし・・・。

#あ、もしかしたら、同じようなCGIが欲しいけど、
#Win板に頭を下げるのがイヤなマッカーな人?
0058初心者2001/05/17(木) 03:33ID:rW7cRx.k
>>53
レスありがとうございます。
ログ加工までなんとかできました。
0059初心者2001/05/17(木) 03:39ID:rW7cRx.k
ついでといってはなんなのですが、
実際にスクリプトを実行せずにコーディングチェックだけを
行えるデバッグモードみたいなことはperlで出来ませんでしょうか?
環境はシステムがwin32でperlはperl5とjperlがあります。
(perl5とjperlの違いもよくわからないのですが・・・)
0060名無しさん@お腹いっぱい。2001/05/17(木) 04:24ID:KYQIk2Ao
>>59
ん? perl -wc <スクリプト> じゃだめ?
# Tもつけよう。
0061初心者2001/05/17(木) 08:46ID:rW7cRx.k
たびたびすみません。
配列@getに変数で値を追加していきたい時は

while(....){
@get = $hensu
}

で行えますでしょうか?
0062562001/05/17(木) 08:48ID:.GKme7Xc
>57
Win板で聞いてきたんですが
誰も答えてくれません(泣)
ロゴ投票まとめてた人の目につかないだけかもしれませんが。

投票した人間のログを記録するようなCGIが
欲しいということです。
一応フリーの投票用の探したんですが
ログファイルとか残すタイプがなかったもので。
0063初心者2001/05/17(木) 08:52ID:rW7cRx.k
$i = 0;
while(....){
$get[$i] = $hensu;
++$i;
}

と行わなければ、やっぱり駄目でしょうか?
0064名無しさん@お腹いっぱい。2001/05/17(木) 08:57ID:rZ3d9O0s
>>63
push @get, $hensu;
Perlの本でも買ってきたら?
0065名無しさん@お腹いっぱい。2001/05/17(木) 08:58ID:/ddSlCio
>>63

while(...) {
        push @get, $hensu;
}
0066652001/05/17(木) 08:59ID:???
被った・・・
0067名無しさん@お腹いっぱい。2001/05/17(木) 09:47ID:WmKEiYPc
Perlで簡単なプロクシサーバー(つーかただのフィルタみたいなもんだけど)
を書いているのですが、ActivePerlで fork 使うと速攻で落ちます。
やっぱりWindowsで fork は無理ですか?ちなみにスクリプトの方のバグかと
思ってLinuxでテストしたら普通に動きました。なんかActivePerlは
かわりにスレッドが使えるとかなんとか聞いたような気がするんですが
どうなんでしょう。
0068名無しさん@お腹いっぱい。2001/05/17(木) 10:21ID:???
>>67
Perlのバージョンは?
0069名無しさん@お腹いっぱい。2001/05/17(木) 10:28ID:???
>>68
ActivePerl-5.6.0.616です
0070名無しさん@お腹いっぱい。2001/05/17(木) 10:30ID:???
>>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;
}
#---
0071682001/05/17(木) 10:47ID:???
>>69
スマン、俺じゃ分からん。
Perl5.6.0.623でforkのテストをすると成功する事もあるがDLLのエラーで落ちる事もあった。
スレッドはサパーリわからん。"perldoc Thread"とでもしてくれ。
0072692001/05/17(木) 11:02ID:WmKEiYPc
>>71
あら、残念。ActivePerlじゃなくても最近のPerlは
スレッド使えるみたいだけど、スレッドに関する資料が
少なくてよくわからないよ。ちなみに perldoc は見た
んだけど、スレッドが使えるって言うのはこのモジュールの
ことを指すの?なんか実験的な機能とか書いてあるけど…
まあとりあえずちゃんと読んでみるよ

あと、とりあえず perl -V 打ったら
usethreads=undef
ってなってたからこのままじゃスレッドは使えない
のかな。もしかしてこれを有効にするにはソースから
なんかオプションつけてコンパイルしなくちゃならないの?

わから〜ん!誰かヒントを!
0073初心者2001/05/17(木) 12:35ID:rW7cRx.k
if($data[2] =~ /^$data2[0]/){
}

以上のようにコーディングしたら
if文のセンタックスエラーでこけてしまいました。
//で変数は使えないのでしょうか?
0074名無しさん@お腹いっぱい。2001/05/17(木) 12:46ID:WmKEiYPc
>>73
パターンマッチの中では[]は特別な意味あり
ちなみに変数は使える。

$tekito = $data2[0];
if ($data[2] =~ /^$tekito/) {}

とかにしたら?
0075名無しさん@お腹いっぱい。2001/05/17(木) 13:40ID:???
syntax errorなら何処かでセミコロンが抜けているに一票
0076名無しさん@お腹いっぱい。2001/05/17(木) 13:42ID:???
ちなみに>>74は不正解。
#!/usr/bin/perl
$data[2] = 'abc()';
$data2[0] = 'ab';
print $data[2] =~ /^$data2[0]/;
__END__
0077742001/05/17(木) 14:09ID:???
>76
ほんとだ、真になってた。適当書いてスマソ
0078名無しさん@お腹いっぱい。2001/05/17(木) 16:19ID:eJAJlr4A
>>67-72
おおー。ActivePerlの5.6って、
スレッドを使ってforkのエミュレーションするようになったんだ。
perldoc perlfork をざっと見てみました。
まだpipeは使えないんだね。
0079名無しさん@お腹いっぱい。2001/05/17(木) 19:33ID:KWAHrWxw

二次元配列で配列の二次元目(?)の要素数を調べには
どうしたらいいでしょうか?
$hoge[0][$n]の$nが何個か知りたいんです
あんまりPerlでは二次元配列はつかわないんでしょか?
0080名無しさん@お腹いっぱい。2001/05/17(木) 19:52ID:PKwP8X0M
>>79
$size = scalar @{$hoge[0]}

Perlの2次元配列は実際には「配列へのリファレンス」の配列。
つまり$hoge[0]等は各々が配列へのリファレンスである。
@{$hoge[0]}としてデリファレンスすると配列の実体になる。
あとは定石通りscalar関数で配列サイズを取得。
0081名無しさん@お腹いっぱい。2001/05/17(木) 19:59ID:???
>>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__
0082名無しさん@お腹いっぱい。2001/05/17(木) 22:02ID:???
>>80-81
サンキュー
{$hoge[0]}って囲む事を知らなかったから問題だったんだな
説明もわかりやすかったし
スクリプトもわかりやすくて助かりました
あまり使われていないのかって書いたのは
Cの参考書には二次元配列について書いてあっても
Perlの参考書には書いてなかったからさ
Perlはいろんな方法がある分二次元配列とかは
そんなに使わないのが普通なのかなって思って
サブルーチンの中でグローバル変数を
あんまりつかわないのと一緒で
大体他の方法で抜けるのが一般的かなと思ったんです

ほんとにありがとう
0083名無しさん@お腹いっぱい。2001/05/17(木) 22:53ID:???
Perlの参考書に書いていないのは
CGIスクリプトを作る際に必須な概念ではないってのが大きいんじゃないかな。
0084名無しさん@お腹いっぱい。2001/05/17(木) 22:57ID:693Tbg52
>>82
そんな本はすてちまえぇ!
0085名無しさん2001/05/17(木) 23:36ID:ENQ64Pv6
mod_perl
てなんて読むの。

もどぱーる?
もじゅーるぱーる?
0086名無しさん@お腹いっぱい。2001/05/18(金) 05:54ID:YOZjqt/s
う。なやまず「もっどぱーる」とよんでた。
どうなんだろう。
0087名無しさん@お腹いっぱい。2001/05/18(金) 10:09ID:???
おれも「もっどぱーる」派
0088名無しさん@お腹いっぱい。2001/05/19(土) 00:46ID:pQYsUf86
>>85
「もっとPerl!」を、方言にした感じで「もっどぱーる」
0089名無しさん@お腹いっぱい。2001/05/19(土) 04:44ID:???
なにも知らずに動けばそれで良しな私は
 @data[x]
$data[x]
を一緒に使っちゃってますが、やはり問題ありますよね?
0090名無しさん@お腹いっぱい。2001/05/19(土) 07:15ID:pQYsUf86
 詳しいことは知らないが、Perl6からは、@data[x]は、配列のスライスではなく、
配列の要素を指す記述方法になるらしい。
 配列のスライスは、別の記述方法が用意されるらしいです。
0091名無しさん@お腹いっぱい。2001/05/19(土) 10:14ID:???
>>89
問題あり
0092名無しさん@お腹いっぱい。2001/05/19(土) 12:36ID:mE7mDJyE
半角カナの処理ってどうされてますか?
おいらはjcode.plで全角にしちゃってますがその他ってなにか方法
ありますか?
0093名無しさん@お腹いっぱい。2001/05/19(土) 13:29ID:???
ベツニ。メールジャネーンダカラメクジラタテルコトモアルマイ<ハンカク
ISO-2022-JPッツーワケデモナイノニゼンカクニシチマウノハドウカトオモウ
                                  
                                    
0094名無しさん@お腹いっぱい。2001/05/19(土) 14:13ID:???
JavaScript で頑張る。
0095名無しさん@お腹いっぱい。2001/05/19(土) 16:25ID:???
すごく恥ずかしい質問なのですが
JAVAのコメントアウトみたいに
/*
ココがコメントにょ
*/
みたいな機能はないのでしょうか?
0096名無しさん@お腹いっぱい。2001/05/19(土) 17:14ID:wk52aSL.
>>95
POD形式のコメントにするのが正式だと思う。
参照: perldoc -q "comment out" および perldoc perlpod

ちょこっと部分的にコメントアウトしたいときは
=pod
この部分はパースしないよ
=cut
だけでいいかもな。
0097_gunzip2001/05/19(土) 20:53ID:???
>>95
Cみたいに /* */ や // が使いたい場合は、
----------
#!/usr/bin/perl -MFilter::cpp

/*
複数行コメント
*/

print "ok!"; //一行コメント

----------
とする手もあります。
本当は96さんのようにするのがベストだし、自分も普段は
そうしているのだけれど、一応、雑学的知識として....
#事前にCプリプロセッサ(うちでは"gcc -E")に食わせているだけです。
0098952001/05/19(土) 22:32ID:1jbpiiuM
96さん97さん、ありがとうございました。

#入門本に載って無くてずっと#を20行とか打ってました・・・
0099名無しさん@お腹いっぱい。2001/05/19(土) 23:10ID:???
>>98
いや#を20行というのが間違いというわけではないよ。
PODにしろCプリプロセッサに食わせるにしろ、"完全に無視される存在ではなくなる"からね。
0100名無しさん@お腹いっぱい。2001/05/20(日) 01:40ID:???
いろいろ方法があるんですねえ。ていうかそれがPerlというものか。
このスレのPart1から全部まとめて「Perlの雑学」っていう
サイトを作ったら面白いかもなあ。
0101名無しさん@お腹いっぱい。2001/05/20(日) 02:44ID:???
>>100
> このスレのPart1から全部まとめて「Perlの雑学」っていう
> サイトを作ったら面白いかもなあ。

それマジで誰かやってくれないかな。
漏れは取捨選択できるレベルじゃないからダメっぽいけど…。
■ このスレッドは過去ログ倉庫に格納されています