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

【Perl】初心者コーナー Part13

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん02/05/30 13:06ID:R2kt1mTx
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。

1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

CGIの質問は【CGIだけど、なんか質問ある? part 6】
http://pc.2ch.net/test/read.cgi/php/1019561283/
参考書籍の話題は【【Perl,CGI】参考書籍 第2版】
http://pc.2ch.net/test/read.cgi/php/988809842/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
スクリプトの改造依頼は 【スクリプト改造工房 Part4】
http://pc.2ch.net/test/read.cgi/php/1012839651/

過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0446nobodyさん02/06/28 00:26ID:???
>>444
マルチ
http://pc.2ch.net/test/read.cgi/tech/1017736187/n186-
0447nobodyさん02/06/28 17:06ID:???
$mes = '787+8787';
$paturn = '787+8787';
quotemeta $paturn;

if ($mes =~ /$paturn/){
print "Match!\n";
} else {
print "Oops!\n";
}

これだとマッチしないのですが、どうすればエスケープ出来るでしょうか
quotemetaの使い方を間違えてんのかなあ・・
0448nobodyさん02/06/28 17:09ID:???
でけますた
\Q\E だた・・
perlは忘れ易いよ
0449japh ◆J.5V8ta6 02/06/28 20:48ID:???
>>447
quotemeta()の使い方間違えてるよ。

$quoted = quotemeta $string;

chop(), chomp()等と違って元の文字列は置き換えないからね。
0450nobodyさん02/06/28 21:59ID:???
>>447
わざとなのかもしれないけど、paturn はちょっと恥ずかしいね。
0451nobodyさん02/06/28 22:43ID:ZifxuKsx
foreach $mon(@logs) {
 @mon = split(/,/,$mon);
 $mon{$mon[1]}++;
}

3行目では何が起こっているのでしょうか?
0452&r02/06/28 22:51ID:???
ハッシュ%mon を利用して、配列 @logs の第2フィールド値の出現回数を
取得しているといったところでしょうか。
045345102/06/28 23:30ID:???
>>452さん

出現回数ですか。
どうもありがとうございます。
0454nobodyさん02/06/29 00:03ID:kfva2Nvg
質問です。
ppmでsearchを実行しても全く反応がないのです・・・

PPM> search
PPM>

のように、なってしまうのです・・・DBIをインストールしたいがために四苦八苦しているのですが、
どうしても上手いこと行きません・・・もちろんdbi.zipを直接DLして
ppm install dbi.ppd
等も試してみましたが
Could not locate a PPM binary of 'dbi.ppd' for this platform
とエラーが出てしまいます(涙

どうにか対処法を教えて貰えないでしょうか・・?
環境はwin2k perl-v5.6.0 for MSWin32-x86-multi-thred ppm(2.1.2)です
0455nobodyさん02/06/29 02:19ID:???
>>454
install DBI
でいけないか?
0456こここ02/06/29 02:20ID:8vz7q6tH
kentwebのCOSMO GATE-EXをエクスリアで設置したけど、
説明の通りに設置して、チェックモードでもOKとでたんだけど

Authorization Required
This server could not verify that you are authorized to access
the document you requested. Either you supplied the wrong creden
tials (e.g., bad password), or your browser doesn't understand
how to supply the credentials required.

ってでる。
何が悪いのかわかります?
0457nobodyさん02/06/29 02:24ID:kfva2Nvg
>>455
ダメです・・・
Installing package 'DBI'...
Error installing package 'DBI':Could not locate a PPD file for package DBI
となります・・・
ネットは常時接続なので、当然繋がったまま実行しているのですが・・・
(。´Д⊂)゜。・ こまった
0458nobodyさん02/06/29 02:27ID:???
>>456
認証でもかけてるの?
0459こここ02/06/29 02:28ID:8vz7q6tH
>>458
そうです
0460nobodyさん02/06/29 02:31ID:???
>>457
えーなんでだろう。じゃあppm使わずに
perl -MCPAN -e shell
って打ってから
install DBI
0461nobodyさん02/06/29 02:40ID:???
>>457
わかった。常時接続ならプロバイダかどっかのPROXY通してるでしょ。
それ一時的に外してみて。
0462nobodyさん02/06/29 02:46ID:???
>>459
認証を通過できなかっただけじゃん
0463補足02/06/29 02:52ID:???
http://aspn.activestate.com/ASPN/Downloads/ActivePerl/PPM/
> PPM doesn't work through a proxy/firewall.
> This can be remedied by setting the environment variable 'HTTP_proxy' to the name and port of your Internet proxy, e.g.:
> C:\> set HTTP_proxy=http://proxy:8080
> If your proxy or firewall requires a username and password, you will also need to set the environment variables 'HTTP_proxy_user' and 'HTTP_proxy_pass'.

多分これね
0464こここ02/06/29 02:52ID:8vz7q6tH
げげげっ!?
本当だ。
今まであると思ってたIDとパスがなかった・・・
とにかく今やったら出来た。
nobodyさんありがとう!!!
0465nobodyさん02/06/29 03:21ID:???
nobody さん?(w
0466nobodyさん02/06/29 07:00ID:???
         ここかが引き篭もりの巣ニダか!!
               ∧∧
     |\       <ヽ`∀´>         /|
     ヾ  ̄ ̄ ̄ ̄ ̄    ̄ ̄ ̄ ̄ ̄ ̄ ̄ /
       ̄ ̄ ̄ ̄ ̄ ̄|  | ̄ ̄ ̄ ̄ ̄ ̄ ̄
               |   |
        / ̄ ̄ ̄ ̄\/ ̄ ̄ ̄ ̄ ̄\
       __/ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\ .\__  ドドン!!
___<__)__________ (__>___

0467nobodyさん02/06/29 12:54ID:xVhrnBTO
CGIでメインの掲示板やゲームのサブルーチンが入ってるサブのCGIファイルで
こいつらの属性を変えてやれば処理を軽くすることはできますか?
初心者なもんで質問が意味不明かもしれません…(汗)
0468&r02/06/29 12:57ID:???
>467
ほんとに意味不明だからびっくりしたYO!
0469あSD02/06/29 13:16ID:IbvPgwu5
http://isweb43.infoseek.co.jp/play/ta-bo-z/
0470nobodyさん02/06/29 13:19ID:???
>>467
うん、意味不明だ
0471nobodyさん02/06/29 16:51ID:???
Perlの事で質問です。
初歩的な事で申し訳ございません。
name1<>host1<>ip1<>111<>
name2<>host2<>ip2<>222<>
name3<>host3<>ip3<>220<>
name2<>host2<>ip2<>200<>
name2<>host2<>ip2<>222<>
name3<>host3<>ip3<>220<>
とログファイルに保存をしてありまして、
それぞれの一番右の数の合計を出すにはどうすれば宜しいのでしょうか?
0472nobodyさん02/06/29 17:01ID:???
ホストごとにまとめたい、ということ?
047347102/06/29 17:03ID:???
>>472
はい。そうです。
出来ますでしょうか?
0474nobodyさん02/06/29 17:05ID:???
>473
>451が参考になるよ。
あれをちょっといじればいい。
0475&r02/06/29 17:07ID:???
>471
こんな感じでしょうか?

$sum+= (split(/<>/))[$[+3] for <DATA>;
__DATA__
name1<>host1<>ip1<>111<>
name2<>host2<>ip2<>222<>
name3<>host3<>ip3<>220<>
name2<>host2<>ip2<>200<>
name2<>host2<>ip2<>222<>
name3<>host3<>ip3<>220<>
047647102/06/29 17:25ID:???
>>474
それは、その感じでまる2日ぐらい悩んだんですが出来ませんでした。
>>475
今、試してみましたが一番右の数の全部の合計した数が出てきました。
0477nobodyさん02/06/29 17:36ID:???
>476

> 1:自分はこう言う事がしたい。
> 2:それでこんな風にやってみたが・・・
> 3:それだとこんなエラーが出て上手く行かなかった。
>
> 1と3が無いと誰も答えられないよ。
> 良い回答は良い質問から。一緒に勉強しましょう。

1はあるけど2と3がないな。
0478nobodyさん02/06/29 17:39ID:???
結論出すと、

while(<IN>) {
 @host = split(/<>/,$_);
 $host{$host[0]} += $host[3];
}

かな?
0479nobodyさん02/06/29 17:45ID:???
>>477
おいおい。まる2日分のなんや事を書けっていうのかちみは?
0480&r02/06/29 17:52ID:???
>478
そうだね。うっかりホスト毎ってのを見逃してた。修行してくる。
048147102/06/29 17:55ID:???
>>479
んーと別に大丈夫ですよ。質問の仕方が悪いのは僕の方です。
>>477
今まで答えて頂けたことは全て一通りやってます。
エラーは出ませんでした。出たとしても;を:と間違えた等その位です。
048247102/06/29 17:59ID:???
>>478
出来ませんでした。
048347102/06/29 18:02ID:???
>>478
host3の合計しか出ませんでした。
0484&r02/06/29 18:04ID:???
>482
ハッシュの参照のしかたわかる?
ファイルハンドルが478ではINになっているから統一しているか確認して、
とりあえず以下のようにして出力して確認されない?
for ( keys %host ){
    print $_,': ',$host{$_},"\n";
}
048547102/06/29 18:04ID:???
野郎℃も出来たぜ!!
Thanks!!!!!!!!!!!!!!!!!!!!!!!!
黄金帽と呼んでくれ!!!
0486nobodyさん02/06/29 18:06ID:???
@host1 = grep { /^name1<>.*<>.*<>.*<>/ } @_;
@host2 = grep { /^name1<>.*<>.*<>.*<>/ } @_;
@host3 = grep { /^name1<>.*<>.*<>.*<>/ } @_;

foreach(@host1){
m/^name1<>.*<>.*<>(.*)<>/;
$count1 += $1;
}

これじゃ非現実的だな。スマソ
048747102/06/29 18:07ID:???
>>485
??
>>484
出来ました。ご丁寧に説明をして頂きありがとうございました。
0488nobodyさん02/06/29 20:03ID:A6ruKh9P
B83W59H86(14歳)セルフヌード衝撃うp祭り開催中!!
http://tmp.2ch.net/test/read.cgi/mog2/1022943102/l50
0489nobodyさん02/06/29 20:32ID:YfnrInm/
perlからcの関数(*.aとかlibの)を使用する方法を教えてください。


0490nobodyさん02/06/29 20:40ID:???
>>489
ム板とWebProg板にマルチポストか。おめでてーな。
0491nobodyさん02/06/29 20:47ID:???
うるせえよ

>46 :デフォルトの名無しさん :02/06/29 19:00
>>>1よ
>だいたいPerl関連はWebProg板でやるきまりなんだよ
>そっちへ逝け
0492nobodyさん02/06/29 21:30ID:???
うがー。ム板のほうにレスつけちゃったよ。
じゃ490はマルチした罰として↓の48に答えること。命令。
http://pc.2ch.net/test/read.cgi/php/997829243/n48-
049349002/06/29 21:37ID:???
何故俺が罰を受けねばならんのだ…ウワァァァァン(`Д´)
049449202/06/29 21:41ID:???
ス、スマソ…。>>493
0495nobodyさん02/06/30 06:36ID:???
open関数が失敗するときは、
・ファイルが存在しない
・パーミッションがおかしい

以外にありえるのでしょうか、おねがいします
049649502/06/30 06:36ID:wtzA9nm5
あげときます
0497nobodyさん02/06/30 09:04ID:???
>>495
・メモリが足りない
・opcodeの実行が禁止されている
0498nobodyさん02/06/30 11:08ID:???
>>497
ファイルを開きすぎとかは?
0499nobodyさん02/06/30 11:54ID:???
>>498
そういえばそれもあるか
0500nobodyさん02/06/30 12:37ID:???

今だ!200番ゲットォォォッ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
     ∧∧   )      (´⌒(´
  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
        ̄ ̄  (´⌒(´⌒;;
      ズザーーーーーッ

0501nobodyさん02/06/30 12:38ID:???
欝…番号間違えた(泣

>>495
あと、既にファイルが排他モードで開かれてるってのは?
0502nobodyたん02/06/30 14:21ID:???
排他モードで開くなんてのはあるのかな?
排他モードでロックしているというのはあるが。(その場合でも open は可能)
0503nobodyさん02/06/30 14:41ID:???
>>495
【Perl】ファイルロック(排他処理)について語ろう
http://pc.2ch.net/test/read.cgi/php/1024795138/
も参照してみては?
0504nobodyさん02/06/30 15:34ID:???
ここにいる人は>>492の質問には答えられないレヴェルなのですね。
ファイルロックなんてどうせ巷の解説サイトみればすむことなのに、、。
0505nobodyさん02/06/30 15:58ID:???
>504
492は質問ではなく誘導ですが…。
巷の解説サイトにあるファイルロックできみは納得して満足してるんだろうね。
そのサイト教えて。
0506nobodyさん02/06/30 16:50ID:???
>>505
>>3-4 ぐらい読め。バーカ
0507nobodyさん02/06/30 16:59ID:???
504=506?
だから、きみが納得して満足してるであろう巷の解説サイトを教えて。
どこ?
0508505 ◆EPPSxEpw 02/06/30 17:18ID:???
http://www.bayashi.net/st/pdmemo/filelock.html
↑適当にグーぐるしてください
 ファイルロックは専用のスレもあります
 >>504の解説してください。
0509nobodyさん02/06/30 17:36ID:???
>508
そのリンクってはじめて見させてもらったけど大崎さんのスクリプトに
なんで余計なプロセス番号($$)付けてあるの?積算秒を付ける意味を
理解できてないの?
これがきみの言う「巷の解説サイトみればすむ」ってこと?

504の解説:
>ここにいる人は>>492の質問には答えられないレヴェルなのですね。
505に書いたとおり、「492は質問ではなく誘導です」
0510nobodyさん02/06/30 17:46ID:???
> 付加する数字文字列がtime関数だと秒単位なので、
> まだ完全ではないのではないかという疑問が残ります。

何が疑問なのかが疑問です。
0511nobodyさん02/06/30 18:08ID:???
>510
この板でこのレスの速さは508さん自身のサイトだったってことかな?

ロックできるかどうかのテストと実際にロックする操作を同時に行なう
ことができる atomic な関数 を使っているからロックが成功するのは
1プロセスであり、そういう意味では同じ名前にロックファイル名に
リネームしてもよいということ。
ここで、なぜ積算秒を付け足したロックファイル名にリネームするかと
いうと、もしデッドロックが残っても作成してから60秒よりも経過して
いるかどうかを確認するからです。

つまりプロセス番号($$)を付ける意味がまったくわたしには理解できません。
0512nobodyさん02/06/30 18:19ID:???
>510
付け足すけどよく見たらさ。
ロック中ファイル名って、$lfh{path} . time . $$ だから
/^$lfh{basename}(\d+)/でマッチさせた $1 って time . $$ の値になる
可能性が大きいよね。(Windows系だと$$は-nnnnnnみたいな形式だったりする
けどさ)
でもその直後に平気で積算秒から $1 の値を引いてタイムアウト値と比較してる
からデッドロックをこれじゃ回避できないんでは?
0513508 ◆EPPSxEpw 02/06/30 18:49ID:???
あーわかったからファイルロックはあっちでやれ。
http://pc.2ch.net/test/read.cgi/php/1024795138/
どうせカウンターにしかつかっとらんのやろ。
ほかになんにファイルロックつかっとるのか知りたいDBとか?
>>508のサイトはgoogleでファイルロックで検索したら一番手前にあったから貼った。
------------------------------------------------
俺はXSについて聞いてんだ。
0514nobodyさん02/06/30 19:14ID:???
>513
カウンタ程度ならむしろ使わないほうがいいだろう。うっとうしい。
まぁ、使うとしたら電子商取引システムを構築するときに使うかもな。
さっきのアドレス、きみのサイトだったらなおしとけよ。はずかしいから。

きみの検索でほんとにさっきのサイトがトップでヒットしたんなら、検索能力を
養ってから吠えるこったな。まずこれでも見ておれ。

%perldoc -m perlxs
0515508 ◆EPPSxEpw 02/06/30 19:40ID:???
まぁ言い争いはよそうや(*゚ω^)ノ
この板に電子商取引システムを構築したりする人間がいるなら
XSぐらい楽勝だろ。
0516nobodyさん02/06/30 19:52ID:???
ロックスレの存在意義が今わかった。隔離病棟なんだね。。。

>>515
で、なに質問してるんだっけ。ていうかあなた質問者本人?
perlxstutの説明に沿ってHello Worldとか作ってみた?
0517508 ◆EPPSxEpw 02/06/30 20:00ID:???
>>516
見てもいまいち分からんとです。
解説サイトみても解説のみでサンプル載ってないし
0518japh ◆J.5V8ta6 02/06/30 20:56ID:???
>>517
perlxstutのサンプルじゃ不満だと?
http://www.kt.rim.or.jp/~kbk/perl5.005/

もっと突っ込んだサンプルが欲しいなら、
CPANから適当なXSモジュール落として参考にすれ
0519nobodyさん02/06/30 22:15ID:???
508はネタ荒らしか?天然か?
http://members.tripod.co.jp/ms_mzn/
0520pear ◆FRUIT8pk 02/07/01 05:54ID:???
$ENV{REMOTE_HOST} が返ってこないサーバーがあって、
問い合わせたら、「そんなことはない、ソース見直せ」って
言われたんですけど、このソースで表示されなかったらおかしいですよね?

#!/usr/bin/perl

print "Content-type: text/html;\n\n";

print "<html><body>";

foreach (sort keys %ENV){
print "\$ENV{$_}:$ENV{$_}<br>\n"
}

print "</body></html>";

exit;

これは何かこちらのソースに問題があるのでしょうか
よろしくお願いします。
0521nobodyさん02/07/01 08:04ID:???
>>520
HostnameLookups off
最近はデフォルトでオフだしね。
http://httpd.apache.org/docs/mod/core.html#hostnamelookups

CGIスレの方が良かったかも。
0522&r02/07/01 11:41ID:???
>520
なんでキーを出力させてないの? たしかにREMOTE_HOSTがない場合もありうる
だろうけど

print "$_: $ENV{$_}<br>\n"
0523pear ◆FRUIT8pk 02/07/01 12:27ID:???
>521
最近のapacheではホスト名は取得できないということでしょうか。。
>522
一応、キーは \$ENV{$_} で、表示されています。
0524nobodyさん02/07/01 15:00ID:???
特定の座標を中心とした5x5のマップを表示させたいのですが。
マップの情報が
123456789
123456789
123456789
123456789
123456789
123456789
123456789
とあってたとえば5,3だとしたら
34567
34567
34567
34567
34567
みたいな感じに表示させたいです。
でも、存在しない座標が含まれていたら表示しないようにしたいです。
参考になるようなページでもいいのでお願いします。
0525nobodyさん02/07/01 16:15ID:???
>>524
マップの外周に2マス分の余白を持たせるのはどうすかね。
余白は0とか-1とかの特別な値で埋めておく。
0526nobodyさん02/07/01 17:34ID:???
>>524
なんか宿題っぽいよなぁ・・・
まぁまずこういう構造体があったとして・・・

my @foo;
for my $idx1 ( 0..9 ) {
$foo[$idx1] = [];
for my $idx2 ( 0..9 ) {
$foo[$idx1][$idx2] = "$idx1$idx2";
}
}

で、まぁそしたらこんな感じか

sub print_matrix_range
{
my $matrix = shift;
my( $x, $y, $range ) = @_ ? @_ : (0,0,$#{$matrix});

my $xstart = $x - $range >= 0 ? $x - $range : 0;
my $ystart = $y - $range >= 0 ? $y - $range : 0;
my $xend = $x + $range <= $#{$matrix} ? $x + $range : $#{$matrix};
my $yend = $y + $range <= $#{$matrix} ? $y + $range : $#{$matrix};

for( my $curx = $xstart; $curx <= $xend; $curx++ ) {
for( my $cury = $ystart; $cury <= $yend; $cury++ ) {
print $matrix->[$curx][$cury],
$cury == $yend ? "\n" : ' ';
}
}
}

print_matrix_range( \@foo, 5, 3, 2 ); # 5=両方向に2マスだから

書き写しに失敗してないといいんだが。
0527質問です。02/07/01 21:51ID:X3MphqPi
今、HP作っているのですが、
この下のメタタグはどうゆう役割をするのですか?
御答えくださいませ。

<META NAME=robots CONTENT="http://**************/">
0528nobodyさん02/07/01 21:52ID:???
>>527
スレ違い板違い検索しろそして死ね
0529nobodyさん02/07/01 21:53ID:YKfyV+9J
同意
0530名無し募集中。。。02/07/01 21:55ID:POquGnWB
はじめまして。質問です。

perlを使って、Submitボタンを押さずにデータをcgiに受け渡すことって
可能でしょうか?
0531nobodyさん02/07/01 21:57ID:???
xxx.cgi?530=dqn&1=sine
これで出来るじゃん。
0532名無し募集中。。。02/07/01 21:57ID:POquGnWB
>>531

レスどうもです。
すいません、getじゃなくて、postっていうの忘れてました。
0533名無し募集中。。。02/07/01 22:03ID:POquGnWB
ムリなんかなぁ。。。
0534nobodyさん02/07/01 22:03ID:???
無理だと思われ。
0535名無し募集中。。。02/07/01 22:08ID:POquGnWB
>>574

マジっすか。さんくすこ。
あと、折角きたんでもう少し知恵貸して頂いていいっすか?
0536nobodyさん02/07/01 22:09ID:???
うむ。
0537名無し募集中。。。02/07/01 22:11ID:POquGnWB
やろうとしてるのは、シタラバで板の変更に際してスレッドを移動させたいんで
旧板のスレから名前とレス抜き出して、外部から新板にカキコ。

とりあえず、gabri dukeと外部のhtmlでsubmitおしての投稿は成功したんで
なんとかperlで自動的に書き込みって可能にならないっすかね?
0538名無し募集中。。。02/07/01 22:12ID:POquGnWB
>>536

どもです。537っす。読みにくい文章でスマソ。
0539名無し募集中。。。02/07/01 22:19ID:POquGnWB
ムリポでしょうか?
0540nobodyさん02/07/01 22:21ID:???
漏れにはわからないけど、ほかの人はわかるかも。
またーり待たれることを推奨する。
0541名無し募集中。。。02/07/01 22:23ID:POquGnWB
>>540
マターリ待ってみまふ。どもっす。
0542nobodyさん02/07/01 22:40ID:133+Yg1+
>>537
logファイルを移動するだけじゃダメなの。
0543nobodyさん02/07/01 22:42ID:???
手軽にPOSTするなら毎度おなじみLWP::UserAgentかな…。
perldoc lwpcook読んでみなはれ。
0544名無し募集中。。。02/07/01 22:43ID:POquGnWB
>>542
管理人が板放棄したんで糞スレ乱立、勝手に板移転するんす。。。

>>543
さんくす、調べてみるっす。
0545名無し募集中。。。02/07/01 23:09ID:POquGnWB

むずい、、、。postのcgi間のデータ受け渡しとLWP::UserAgentを
説明してるページ教えていただけると助かりまふ。おながいします。
■ このスレッドは過去ログ倉庫に格納されています