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

Perl 初心者コーナー Part22

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/04/15 10:15ID:???
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。

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

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


CGIだけど、なんか質問ある? Part 10
http://pc2.2ch.net/test/read.cgi/php/1048686475/
参考書籍の話題は、【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は、【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/

過去ログやお勧めサイトは >>2-10
0263nobodyさん03/04/23 07:40ID:???
>>262
ttp://member.nifty.ne.jp/hippo2000/perltips/LWP.html#An_Example
0264nobodyさん03/04/23 08:58ID:???
さっぱりわからない = 学習する気は無い
0265nobodyさん03/04/23 09:41ID:???
>>262
ここはPerlスレなので、あなたの質問はスレ違いです。
0266nobodyさん03/04/23 12:07ID:???
>>265
なぜ?
perlでプログラム組むんですけど・・。
荒らしは帰れ
0267nobodyさん03/04/23 13:02ID:???
>>266
Perlのコーディングで困ってる人のスレです。

まったくのゼロから質問するなや
0268nobodyさん03/04/23 16:32ID:???
質問させてください。
今、Perlのコメント部分を削除するスクリプトを組んでるんですが、
#から始まる文字を削る事はできるのですが、
$#演算子まで削られてしまいます。

$len =~ s/((\$#)*.*)#.*$/$1/g;

・・・と、こんな事もしてみたのですが、ダメでした・・・
どんな風に表現すれば、$#を削らずに行けるでしょうか?
よろしくお願いします。
0269nobodyさん03/04/23 17:12ID:???
一行ずつ読み込むとして

while(<PERLFILE>){
if($_ =~ /^#/){ $_ = ''; }
#出力処理
}

じゃ駄目ですか?
0270nobodyさん03/04/23 17:14ID:???
>>268
$len = <<'EOL';
my @array = ('a' ,'b', 'c'); # コメント1
print STDOUT @array if $#array > 1; # コメント2
# push(@array, 'ぬるぽ');
EOL

$len =~ s/(?<!\$)#.*//gm;
print STDOUT $len;

# ----出力結果----
my @array = ('a' ,'b', 'c');
print STDOUT @array if $#array > 1;

# ----出力結果----
027125003/04/23 17:17ID:???
>>269
必ずしも、先頭に有るわけじゃ無いからのぉ

$data =~ s/(?<!\$)#.*$//g;

とか・・・
0272nobodyさん03/04/23 17:43ID:???
>>269
>>270
>>271

お答えいただきありがとうございます。
正常に動くようになりました・・・が、
(?<・・・)←これってなんですか???
(?=・・・) とか (?!・・・) とかなら分かるのですが・・・
本にも載ってない・・・
よろしければ、お答えを・・・
027327203/04/23 18:41ID:???
・・・と、いろいろネットで調べた結果、なんなのか分かりました。
しかし・・・ラクダ本にも載ってなかった・・・
なぜ???探し方が悪かったのかな・・・???

とにかく、ありがとうございました。
0274nobodyさん03/04/23 18:51ID:???
なんでみんな弱者に厳しいのに
最弱者である自分には甘いの?
0275nobodyさん03/04/23 18:52ID:???
>>274
その質問は板違いかと。
0276nobodyさん03/04/23 18:56ID:???
何も無い所でつまづくドジっ娘特性を感じたからだろ
0277nobodyさん03/04/23 18:57ID:???
>>276
納得
0278nobodyさん03/04/23 19:26ID:???
perl初めて1週間の初心者です。
web掲示板のパスワードを総当たりで調べていくスクリプトが欲しいです。
持っている方、もしくは落ちている場所を教えてください。
但し難しいスクリプトは却下ですので、簡単で直感的に使えるもののみに限定させて頂きます。
0279nobodyさん03/04/23 19:35ID:???
perl始めて1週間の小心者です。
0280nobodyさん03/04/23 19:37ID:???
>>278
どこの掲示板で使うのか教えてくれたら
配布場所も教えてあげる(はぁと
0281nobodyさん03/04/23 19:53ID:???
>>278
こんなCGI探してますスレッド Ver8へ逝け!
0282nobodyさん03/04/23 20:19ID:???
この板のローカルルールって甘いね。ム板には
>ウイルス、ハッキング・クラッキングを求めるような発言は禁止です。
ってのがあるんだから、WebProg板にもこんな感じのルールがあってもいいんじゃないか。
と言ってみるチェスト
0283nobodyさん03/04/23 20:23ID:???
そういう発言者をオモチャにする楽しみを奪われては寂しい
0284nobodyさん03/04/23 22:25ID:???
ええと、ヘタな説明になるんですが、
以下のような感じであったとします。

while($form{"k$no"}){
${"party_2$party[$no]"}{'数字'};
$no ++;
}

余計な記述が含まれてますが、見るところは$noが一つづつ増えていって、
んで数字が一つづつ順番に返って来る所です。
で、数字を多いほうから少ないほうへと順番に並べたいわけなのですが…

$no = 1;
${"party_2$party[$no]"}{'数字'} = 2;

$no = 2;
${"party_2$party[$no]"}{'数字'} = 5;

$no = 3;
${"party_2$party[$no]"}{'数字'} = 4;

上記の場合、$noが2、3、1の順番で大きいわけですよね。
この時の$noの番号を出したいんです。
つまり、結果としては

$aaa[0] = 2;
$aaa[1] = 3;
$aaa[2] = 1;

みたいな感じでソートしたいのです。
どうすればよろしいでしょうか?
0285動画直リン03/04/23 22:29ID:wyYrHR5Q
http://homepage.mac.com/hitomi18/
0286nobodyさん03/04/23 23:02ID:???
>284
${"party_2$party[$no]"}{'数字'};
ここは
$party_2{"$party[$no]"}{'数字'};
こうした方がいいかも。

ともあれ、
foreach( sort{${"party_2$party[$b]"}{'数字'} <=> ${"party_2$party[$a]"}{'数字'}} (1 .. 3) ){
  push(@aaa,$_);
}
ってとこかな?
028728403/04/23 23:16ID:???
>>284
にゅっぱ〜ん。
ありがとでした。


って言うか、微妙に意味が分からん所があったので
どーなってんのかちゃんと考えてから使わせてもらおうかと思います。
028827203/04/24 02:08ID:???
ども。
先ほど、コメントを削除する正規表現の質問した者です。

で、コメント削除するスクリプト完成しました。
まぁ、それなり使えそうです。
見てやってください。

http://isweb25.infoseek.co.jp/computer/pcqa-2ch/cgi-bin/img/996.lzh

↑からどぞ。
ここから、誰か拡張とかできればお願いします。
で、よかったらアップしていただければ・・・
それ見て、勉強させてもらいたいと思います。
0289動画直リン03/04/24 02:29ID:vV02vP1k
http://homepage.mac.com/hitomi18/
0290nobodyさん03/04/24 02:49ID:???
>>272
プログラミング Perl 改訂版は 5.002 辺りの解説書。
(?<=) (前方参照) が実装されたのは 5.005 。
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perldelta.html
第3版 (2分冊になった最新の駱駝本) なら載ってるんじゃないかな?
029127203/04/24 02:53ID:???
>>290
マジっすか!
俺の持ってるラクダ本、もう古いの???
5000円ちょっともしたのに・・・
第2版って書いてる・・・って事は、
俺の知識はPerl5.003くらいかな・・・。
またラクダ本買うなんて、なんだか罠にはまった感じが・・・

教えてくれて、ありがとうございました。
0292nobodyさん03/04/24 03:16ID:???
>>288
バグがあった。
直した。
0293nobodyさん03/04/24 03:17ID:???
>>292
忘れてた
ttp://isweb25.infoseek.co.jp/computer/pcqa-2ch/cgi-bin/img/997.lzh
0294nobodyさん03/04/24 03:45ID:???
>>272 >>293
そーゆーのはこっちに。
http://pc2.2ch.net/test/read.cgi/php/1049514428/
029527203/04/24 04:24ID:???
>>294
これは失礼しました。。。
誘導、ありがとうございます。
でも、誘導先も、自作CGIですね。
・・・でも、ここよりかは、少しは近いかも・・・
って事で、移動します。

誰かすごい改造してくれないかな・・・。
0296nobodyさん03/04/24 07:02ID:???
自動的にコメント付けてくれるスクリプト欲しいな。
0297nobodyさん03/04/24 11:19ID:???
質問させて頂きます

srand();
@salts = ("A".."Z", "a".."z", "0".."9", ".", "/");
$salt = $salts[int(rand(64))] . $salts[int(rand(64))];
$epasswd = crypt($password, $salt);

と処理しごく普通に文字列を暗号化した後

if (crypt($password, $epasswd) eq $epasswd)

で識別するのですが、入力された暗号化前の文字列の始め4文字辺りまで入力すると
移行何も入力しない場合・適当な文字を入力した場合に照合OKとなってしまいます...
これは暗号化に不備があるのか、若しくは照合方法に問題があるのでしょうか

尚、動作環境は下記の通りです
Win98 + AnHTTPd 1.38c + ActivePerl 522
0298nobodyさん03/04/24 11:34ID:???
>>297
よくわからんけど
if (crypt($password, $epasswd) eq $epasswd)
は
if (crypt($password, substr($epasswd, 0, 2)) eq $epasswd)
じゃないか?
0299nobodyさん03/04/24 11:37ID:???
>>298
いや、わざわざ2文字切り取る必要はないよ。
(crypt関数側で先頭2文字以降を無視してくれるはず)

具体的にどんなパスワードがダメなのか教えて欲しい。
030029703/04/24 13:49ID:???
パスワード文字列に利用する文字列は様々なのですが
例として "kakikukeko" としますと

"kakikuke"

まで入力された時点で照合OKの場合に用意している処理に流れてしまいます。
これ移行の文字列を入力しない場合も、あるいは何も入力しない場合でも
照合OKと認識されてしまいます

いろいろPerlで組んで見たいのですが、何回試みてみてもこの部分で引っかかってしまい
作業が一向に進まなくて困っております T_T
030125003/04/24 13:59ID:???
>>300cryptの使い方間違ってないかい?

確か、des方式だと文字列長の限界が有るはず
それが嫌ならMD5でやるのが正解なんだけど
それはOSに依存する
0302nobodyさん03/04/24 14:00ID:???
>>300
おい!8文字までだ!
030325003/04/24 14:01ID:???
>>300
んで、なんでそうなったかというと、切り捨てられてるってことじゃないかと思われ
030430203/04/24 14:02ID:???
てめぇ>>297で「4文字」つったじゃねーか!

・・・ってもしかして2バイト文字で4文字?
>>302は「おい!8バイトまでだ!」に訂正しますです。
030529703/04/24 14:24ID:???
申し訳ありません、ローマ字入力になっちゃってますが
日本語で入力した場合で4文字って事でした

とはいえ、DESにて文字列の制限が存在するとは知らず
ずっと問答しておりましたのでマジ泣きしそうです...

どうも有難うございました!!

0306nobodyさん03/04/24 15:42ID:???
>>305
暗号前の文字列が8バイト以上になるんだったら、
強引に8バイトごとに切っちゃって別々に同じ種で暗号化して最後に繋げるとか。
0307nobodyさん03/04/24 15:49ID:???
>>306
そういう話じゃないと思われ
0308nobodyさん03/04/24 18:05ID:???
>306

無駄
030925003/04/24 18:08ID:???
それなら最初からMD5使え
Win系の実装なら使えんが種値に $1$ を付けるだけで済む
0310nobodyさん03/04/24 18:38ID:???
DESだからデス
0311nobodyさん03/04/24 19:00ID:???
MD5=マジで出そう5秒前
0312オーディーン03/04/25 00:02ID:8w/Lt+kf
Perlで作られた掲示板のプログラムがあるのですが。
これにリファラーチェックをつけて特定のページからでないと
表示できないようにしたいのですが。
たとえば『http://ike-ike.net/index1.htm』からでないと表示できないように
したのですが・・・
どの辺をいじったらいいのでしょうか?

ソースはこちら
http://www.ike-ike.net/bbsking.txt

アドバイスお願いします。(゜゜)(。。)ペコリ

0313nobodyさん03/04/25 00:05ID:???
>>312

↓の>>1を10回ほど読んでからどうぞ。

【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
0314nobodyさん03/04/25 01:38ID:???
>>312
マルチポストやめれ!
面前、 http://pc2.2ch.net/test/read.cgi/tech/1048519394/526 だろ?

#それとも、単なるコピペの釣りか?
031525003/04/25 04:45ID:???
>>312
リファラー取れてるんであれば、別cgiを作ってみれるようにしたほうが楽なんじゃないだろうか・・・
0316オーディーン03/04/25 06:33ID:8w/Lt+kf
312は

【 スクリプト改造工房 PART 6 】

に移動しました。よろしく。
0317nobodyさん03/04/25 06:52ID:???
ファイルの読み込みで質問したいのですが
1000行あるファイルから途中の10行だけ取り出したい場合、
 whileで目的の行まで読み込む
 @でファイル全体を読み込んでから目的の行を取り出す
二つのうちどちらが負荷や処理スピードの面でいいのでしょうか?
あともし他にもやり方がある場合はそれも教えていただけるとありがたいです。
0318nobodyさん03/04/25 07:04ID:???
>>317
普通に考えて、whileで10行目を読むのが早いと思うが?
10行目を読んだら、それ以降は読まずループ抜ける事できるし。
配列で全部読んでたら、メモリの無駄だし。
0319nobodyさん03/04/25 07:28ID:Ai2lxSHs
http://www.k-514.com/
0320bloom03/04/25 08:29ID:pCM0Odok
http://homepage.mac.com/ayaya16/
0321nobodyさん03/04/25 09:15ID:Ai2lxSHs
http://homepage3.nifty.com/coco-nut/
0322nobodyさん03/04/25 10:38ID:CjHipUDv
初心者な質問ですいません。

foreach $value (keys %in){
  $in{$value};
  $in{$value}について、&;`'\"|*?~<>^()[]{}$があったら、すべて全角にする
}

の3行目って、どうやって組めばいいのでしょうか?
0323nobodyさん03/04/25 10:50ID:???
>>322
ttp://www.din.or.jp/~ohzaki/perl.htm#JP_Z2H
032432203/04/25 10:58ID:???
>>323
ってことは、

foreach $value (keys %in){
  $in{$value};
&jcode::tr(\$in{$value}, '&;`'\"|*?~<>^()[]{}$', '&;`’¥”|*? ̄<>^()[]{}$');
}

だけでOKってことですか?
0325nobodyさん03/04/25 11:02ID:???
まず、やってみなよ。
テストするソースぐらいすぐ書けるでしょ。
032632203/04/25 13:10ID:???
>>325
そりゃそうですね。しつれいしますた。

で、>>324 にでやったら
foreach $value (keys %in){
  $in{$value};
&jcode::tr(\$in{$value}, '&;`'\"|*?~<>^()[]{}$', '&;`’¥”|*? ̄<>^()[]{}$');
}


Backslash found where operator expected at /foo/index2.cgi line 48, near "'&;'\"
[index2.cgi:48:warn] (Missing operator before \?)

理由は、'・・・・・'の中に、'を入れてたからなので、

\' とエスケープして↓のようにやったら、うまくいきました。
ありがとうございます。

foreach $value (keys %in){
&jcode::tr(\$in{$value}, '&;`\'\"|*?~<>^()[]{}$', '&;`’¥”|*? ̄<>^()[]{}$');
}
0327nobodyさん03/04/25 13:43ID:???
めでたしめでたし
0328nobodyさん03/04/25 14:56ID:???
エラーの英文が読めないとか馬鹿の多い昨今、痛みに負けずよく頑張った!
感動した!
0329nobodyさん03/04/25 23:13ID:???
>>326
エスケープが面倒な場合、qq!文字列! にしてみるのもどうよ。([!]が使われていないから)
0330nobodyさん03/04/25 23:15ID:???
>329
qqにしたら、逆にダメになる単語が増えないか?
0331nobodyさん03/04/26 00:49ID:???
qqって便利なようで実は逆に使い辛いよな・・・
手癖でダブルクォート打ってまうし(´ヘ`;)
0332nobodyさん03/04/26 00:52ID:1PdRr1Bn
たとえば $n = 13 のとき 「000013」 と表示させるのにはどうしたらいいでしょうか?
0333nobodyさん03/04/26 00:55ID:???
>>332
>>183-186
0334nobodyさん03/04/26 00:55ID:???
>332
print "0000$n";
0335nobodyさん03/04/26 00:55ID:1PdRr1Bn
>>333-334
ありがとうございました
0336nobodyさん03/04/26 02:11ID:???
私は前からqq多用してたなぁ…
0337nobodyさん03/04/26 02:24ID:???
ダブルクォートをいちいちエスケープするぐらいならqq使ったほうが簡単だな。
0338nobodyさん03/04/26 09:15ID:???
SSIからCGIを呼んでるんですけど、[an error occurred while processing this directive]のエラーが出てしまいます。
<!--#exec cmd="./xxx.cgi hoge" -->
<!--#exec cmd="./xxx.cgi?hoge" -->
<!--#exec cgi="./xxx.cgi hoge" -->
<!--#exec cgi="./xxx.cgi?hoge" -->
なぜですか?
時間がないので12:00までにお願いします。
0339nobodyさん03/04/26 09:25ID:???
>>338
>時間がないので12:00までにお願いします。
・・・お前、アフォか・・・
ここは、サポセンでもなんでもない。
とりあえず、マジレスするとしたら、

「SSIでCGIを呼び出す事すらできないなら使うな」だ。
0340nobodyさん03/04/26 09:28ID:???
>>338
Perl以外の話は他でやってください。
0341nobodyさん03/04/26 10:36ID:???
>時間がないので12:00までにお願いします。
ワロタ
0342nobodyさん03/04/26 10:58ID:???
>>338
お前
CGIだけど、なんか質問ある? Part 10
http://pc2.2ch.net/test/read.cgi/php/1048686475/322
だろ。CGIスレでいじめられたからってPerlスレに来んなよ(藁
0343nobodyさん03/04/26 11:36ID:???
昨日吉野家いったんd
034412:0003/04/26 12:12ID:???
ファイナルアンザー?









ざ〜んね〜ん
0345nobodyさん03/04/26 13:14ID:???
「12時過ぎたから教えてやるか」という香具師が出てくるのを待つ作戦。
本当の締め切りは午後5時。
課題は
「ホームページを作成せよ。さらに訪問者をカウントするためにカウンタを設置せよ」
あほな専門学校の課題。
0346nobodyさん03/04/26 14:25ID:???
早く答えてぇ.......もう答えていいか?ハァハァ
0347nobodyさん03/04/26 17:06ID:5Ob9rcEz
GDモジュールをppmでインストールしようとしても

Error: PPD for 'GD.ppd' could not be found.

と出てインストールできません。どうすればいいのでしょうか?
0348nobodyさん03/04/26 17:21ID:???
>>347
スレ違い

Perlモジュールについて
http://pc2.2ch.net/test/read.cgi/php/997829243/l50

ついでに言っとくけど、どうやったか手順ぐらい書け。
そのエラーメッセージ読めば原因は明らかだろ?
0349nobodyさん03/04/26 18:19ID:???
cgi.pmでテキストをエンコードする使い方がよくわからないので
どなたかわかりやすく説明してください。
よろしくお願いいたします。
0350nobodyさん03/04/26 18:30ID:???
>349
http://www.google.com/webhp?hl=ja
ここでそれらしい単語を入力してから「Google検索」ボタンを押す。
0351not38803/04/26 18:35ID:???
>>342
惜しい
そのスレの103をコピペしただけの釣りだよこれ
http://pc2.2ch.net/test/read.cgi/php/1048686475/103

お前ら別板でヲチされてるから釣られすぎんなよ(ワラ
0352nobodyさん03/04/26 18:40ID:???
甘いな。俺達はいつでも全力投球さ♥ミ
035325003/04/26 18:43ID:???
>>351
いっぺんその質問はには答えたので過去スレ読めでもよかったんだけど、
馬鹿馬鹿しいのでほっといたわけであるが・・・
0354nobodyさん03/04/26 19:09ID:???
ダサ
0355nobodyさん03/04/26 23:29ID:ThLo0Ki9

sample.cgi ----

#!/usr/bin/perl -w
use strict;
require "./util.pl";
my %anHash = &util::getHash( $ENV{'HTTP_COOKIE'} );

---------------

util.pl -------

package util;

sub getHash {

my( $k, $v, $key, $val, %hash );

foreach ( split( /;/, $_[0] ) ) {
( $k, $v ) = split ( /=/ );
以下略
}
}

----------------

上記のスクリプトで、「Use of uninitialized value in split at ./util.pl line 27.」
というエラーになってしまい、困っています。
思うに、$_[0]が初期化されていないと言いたいんでしょうが、
どうすればいいんでしょう?
足りない脳が悲鳴を上げています。助けて下さい。
0356nobodyさん03/04/26 23:52ID:???
>>355
foreach ( split( /;/, $_)[0] ) {
0357nobodyさん03/04/27 00:14ID:???
ハッシュで
$data{'hoge'} = 3;
$data{'hage'} = 2;
$data{'baka'} = 5;

とあって ソートして
baka 5
hoge 3
hage 2
と出力したいのですが
うまいやり方が見つかりません
どんな書き方をすればいいのでしょうか?
0358nobodyさん03/04/27 00:19ID:???
>>357

($key, $value) = each(%data);

以下略
0359nobodyさん03/04/27 00:22ID:???
>>358
それじゃうまくねぇだろ
0360nobodyさん03/04/27 00:23ID:BGNE0ecd
Windowsでperlからパイプでsendmail使いたいんですけど、
できますかねぇ?
0361nobodyさん03/04/27 00:27ID:???
while ( ( $key , $value ) = each %data ){
print "$key $value \n " ;
}

とか

foreach $key ( keys( %data ) ) {
print "$key $data{$key} \n "
}
0362bloom03/04/27 00:29ID:3nPIuagT
http://homepage.mac.com/ayaya16/
■ このスレッドは過去ログ倉庫に格納されています