Perl 初心者コーナー Part22
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/04/15 10:15ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
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:???ttp://member.nifty.ne.jp/hippo2000/perltips/LWP.html#An_Example
0264nobodyさん
03/04/23 08:58ID:???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:???$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;
# ----出力結果----
0272nobodyさん
03/04/23 17:43ID:???>>270
>>271
お答えいただきありがとうございます。
正常に動くようになりました・・・が、
(?<・・・)←これってなんですか???
(?=・・・) とか (?!・・・) とかなら分かるのですが・・・
本にも載ってない・・・
よろしければ、お答えを・・・
0273272
03/04/23 18:41ID:???しかし・・・ラクダ本にも載ってなかった・・・
なぜ???探し方が悪かったのかな・・・???
とにかく、ありがとうございました。
0274nobodyさん
03/04/23 18:51ID:???最弱者である自分には甘いの?
0276nobodyさん
03/04/23 18:56ID:???0278nobodyさん
03/04/23 19:26ID:???web掲示板のパスワードを総当たりで調べていくスクリプトが欲しいです。
持っている方、もしくは落ちている場所を教えてください。
但し難しいスクリプトは却下ですので、簡単で直感的に使えるもののみに限定させて頂きます。
0279nobodyさん
03/04/23 19:35ID:???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:wyYrHR5Q0286nobodyさん
03/04/23 23:02ID:???${"party_2$party[$no]"}{'数字'};
ここは
$party_2{"$party[$no]"}{'数字'};
こうした方がいいかも。
ともあれ、
foreach( sort{${"party_2$party[$b]"}{'数字'} <=> ${"party_2$party[$a]"}{'数字'}} (1 .. 3) ){
push(@aaa,$_);
}
ってとこかな?
0287284
03/04/23 23:16ID:???にゅっぱ〜ん。
ありがとでした。
って言うか、微妙に意味が分からん所があったので
どーなってんのかちゃんと考えてから使わせてもらおうかと思います。
0288272
03/04/24 02:08ID:???先ほど、コメントを削除する正規表現の質問した者です。
で、コメント削除するスクリプト完成しました。
まぁ、それなり使えそうです。
見てやってください。
http://isweb25.infoseek.co.jp/computer/pcqa-2ch/cgi-bin/img/996.lzh
↑からどぞ。
ここから、誰か拡張とかできればお願いします。
で、よかったらアップしていただければ・・・
それ見て、勉強させてもらいたいと思います。
0289動画直リン
03/04/24 02:29ID:vV02vP1k0290nobodyさん
03/04/24 02:49ID:???プログラミング Perl 改訂版は 5.002 辺りの解説書。
(?<=) (前方参照) が実装されたのは 5.005 。
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perldelta.html
第3版 (2分冊になった最新の駱駝本) なら載ってるんじゃないかな?
0291272
03/04/24 02:53ID:???マジっすか!
俺の持ってるラクダ本、もう古いの???
5000円ちょっともしたのに・・・
第2版って書いてる・・・って事は、
俺の知識はPerl5.003くらいかな・・・。
またラクダ本買うなんて、なんだか罠にはまった感じが・・・
教えてくれて、ありがとうございました。
0293nobodyさん
03/04/24 03:17ID:???忘れてた
ttp://isweb25.infoseek.co.jp/computer/pcqa-2ch/cgi-bin/img/997.lzh
0294nobodyさん
03/04/24 03:45ID:???そーゆーのはこっちに。
http://pc2.2ch.net/test/read.cgi/php/1049514428/
0295272
03/04/24 04:24ID:???これは失礼しました。。。
誘導、ありがとうございます。
でも、誘導先も、自作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:???よくわからんけど
if (crypt($password, $epasswd) eq $epasswd)
は
if (crypt($password, substr($epasswd, 0, 2)) eq $epasswd)
じゃないか?
0299nobodyさん
03/04/24 11:37ID:???いや、わざわざ2文字切り取る必要はないよ。
(crypt関数側で先頭2文字以降を無視してくれるはず)
具体的にどんなパスワードがダメなのか教えて欲しい。
0300297
03/04/24 13:49ID:???例として "kakikukeko" としますと
"kakikuke"
まで入力された時点で照合OKの場合に用意している処理に流れてしまいます。
これ移行の文字列を入力しない場合も、あるいは何も入力しない場合でも
照合OKと認識されてしまいます
いろいろPerlで組んで見たいのですが、何回試みてみてもこの部分で引っかかってしまい
作業が一向に進まなくて困っております T_T
0301250
03/04/24 13:59ID:???確か、des方式だと文字列長の限界が有るはず
それが嫌ならMD5でやるのが正解なんだけど
それはOSに依存する
0304302
03/04/24 14:02ID:???・・・ってもしかして2バイト文字で4文字?
>>302は「おい!8バイトまでだ!」に訂正しますです。
0305297
03/04/24 14:24ID:???日本語で入力した場合で4文字って事でした
とはいえ、DESにて文字列の制限が存在するとは知らず
ずっと問答しておりましたのでマジ泣きしそうです...
どうも有難うございました!!
0306nobodyさん
03/04/24 15:42ID:???暗号前の文字列が8バイト以上になるんだったら、
強引に8バイトごとに切っちゃって別々に同じ種で暗号化して最後に繋げるとか。
0308nobodyさん
03/04/24 18:05ID:???無駄
0309250
03/04/24 18:08ID:???Win系の実装なら使えんが種値に $1$ を付けるだけで済む
0310nobodyさん
03/04/24 18:38ID:???0311nobodyさん
03/04/24 19:00ID:???0312オーディーン
03/04/25 00:02ID:8w/Lt+kfこれにリファラーチェックをつけて特定のページからでないと
表示できないようにしたいのですが。
たとえば『http://ike-ike.net/index1.htm』からでないと表示できないように
したのですが・・・
どの辺をいじったらいいのでしょうか?
ソースはこちら
http://www.ike-ike.net/bbsking.txt
アドバイスお願いします。(゜゜)(。。)ペコリ
0313nobodyさん
03/04/25 00:05ID:???↓の>>1を10回ほど読んでからどうぞ。
【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
0314nobodyさん
03/04/25 01:38ID:???マルチポストやめれ!
面前、 http://pc2.2ch.net/test/read.cgi/tech/1048519394/526 だろ?
#それとも、単なるコピペの釣りか?
0316オーディーン
03/04/25 06:33ID:8w/Lt+kf【 スクリプト改造工房 PART 6 】
に移動しました。よろしく。
0317nobodyさん
03/04/25 06:52ID:???1000行あるファイルから途中の10行だけ取り出したい場合、
whileで目的の行まで読み込む
@でファイル全体を読み込んでから目的の行を取り出す
二つのうちどちらが負荷や処理スピードの面でいいのでしょうか?
あともし他にもやり方がある場合はそれも教えていただけるとありがたいです。
0318nobodyさん
03/04/25 07:04ID:???普通に考えて、whileで10行目を読むのが早いと思うが?
10行目を読んだら、それ以降は読まずループ抜ける事できるし。
配列で全部読んでたら、メモリの無駄だし。
0319nobodyさん
03/04/25 07:28ID:Ai2lxSHs0320bloom
03/04/25 08:29ID:pCM0Odok0321nobodyさん
03/04/25 09:15ID:Ai2lxSHs0322nobodyさん
03/04/25 10:38ID:CjHipUDvforeach $value (keys %in){
$in{$value};
$in{$value}について、&;`'\"|*?~<>^()[]{}$があったら、すべて全角にする
}
の3行目って、どうやって組めばいいのでしょうか?
0324322
03/04/25 10:58ID:???ってことは、
foreach $value (keys %in){
$in{$value};
&jcode::tr(\$in{$value}, '&;`'\"|*?~<>^()[]{}$', '&;`’¥”|*? ̄<>^()[]{}$');
}
だけでOKってことですか?
0325nobodyさん
03/04/25 11:02ID:???テストするソースぐらいすぐ書けるでしょ。
0326322
03/04/25 13:10ID:???そりゃそうですね。しつれいしますた。
で、>>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:???感動した!
0330nobodyさん
03/04/25 23:15ID:???qqにしたら、逆にダメになる単語が増えないか?
0331nobodyさん
03/04/26 00:49ID:???手癖でダブルクォート打ってまうし(´ヘ`;)
0332nobodyさん
03/04/26 00:52ID:1PdRr1Bn0334nobodyさん
03/04/26 00:55ID:???print "0000$n";
0335nobodyさん
03/04/26 00:55ID:1PdRr1Bnありがとうございました
0336nobodyさん
03/04/26 02:11ID:???0337nobodyさん
03/04/26 02:24ID:???0338nobodyさん
03/04/26 09:15ID:???<!--#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:???>時間がないので12:00までにお願いします。
・・・お前、アフォか・・・
ここは、サポセンでもなんでもない。
とりあえず、マジレスするとしたら、
「SSIでCGIを呼び出す事すらできないなら使うな」だ。
0341nobodyさん
03/04/26 10:36ID:???ワロタ
0342nobodyさん
03/04/26 10:58ID:???お前
CGIだけど、なんか質問ある? Part 10
http://pc2.2ch.net/test/read.cgi/php/1048686475/322
だろ。CGIスレでいじめられたからってPerlスレに来んなよ(藁
0343nobodyさん
03/04/26 11:36ID:???034412:00
03/04/26 12:12ID:???ざ〜んね〜ん
0345nobodyさん
03/04/26 13:14ID:???本当の締め切りは午後5時。
課題は
「ホームページを作成せよ。さらに訪問者をカウントするためにカウンタを設置せよ」
あほな専門学校の課題。
0346nobodyさん
03/04/26 14:25ID:???0347nobodyさん
03/04/26 17:06ID:5Ob9rcEzError: PPD for 'GD.ppd' could not be found.
と出てインストールできません。どうすればいいのでしょうか?
0348nobodyさん
03/04/26 17:21ID:???スレ違い
Perlモジュールについて
http://pc2.2ch.net/test/read.cgi/php/997829243/l50
ついでに言っとくけど、どうやったか手順ぐらい書け。
そのエラーメッセージ読めば原因は明らかだろ?
0349nobodyさん
03/04/26 18:19ID:???どなたかわかりやすく説明してください。
よろしくお願いいたします。
0350nobodyさん
03/04/26 18:30ID:???http://www.google.com/webhp?hl=ja
ここでそれらしい単語を入力してから「Google検索」ボタンを押す。
0351not388
03/04/26 18:35ID:???惜しい
そのスレの103をコピペしただけの釣りだよこれ
http://pc2.2ch.net/test/read.cgi/php/1048686475/103
お前ら別板でヲチされてるから釣られすぎんなよ(ワラ
0352nobodyさん
03/04/26 18:40ID:???0354nobodyさん
03/04/26 19:09ID:???0355nobodyさん
03/04/26 23:29ID:ThLo0Ki9sample.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]が初期化されていないと言いたいんでしょうが、
どうすればいいんでしょう?
足りない脳が悲鳴を上げています。助けて下さい。
0357nobodyさん
03/04/27 00:14ID:???$data{'hoge'} = 3;
$data{'hage'} = 2;
$data{'baka'} = 5;
とあって ソートして
baka 5
hoge 3
hage 2
と出力したいのですが
うまいやり方が見つかりません
どんな書き方をすればいいのでしょうか?
0360nobodyさん
03/04/27 00:23ID:BGNE0ecdできますかねぇ?
0361nobodyさん
03/04/27 00:27ID:???print "$key $value \n " ;
}
とか
foreach $key ( keys( %data ) ) {
print "$key $data{$key} \n "
}
0362bloom
03/04/27 00:29ID:3nPIuagT■ このスレッドは過去ログ倉庫に格納されています