Perlコーディング初心者質問スレ Part 52
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/09/15(金) 14:01:51ID:gobry0n2【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >>2-10
前スレ http://pc8.2ch.net/test/read.cgi/php/1153987463/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0389nobodyさん
2006/10/09(月) 15:10:18ID:???『html』なら<br>でなきゃ改行にならない。
『html』ではない別の指定でなら、\nで改行になる。
その解説サイトの解説をすみずみまでよく読んだか?
あるいはその解説サイトがいいかげんな可能性もあるが。
0392nobodyさん
2006/10/09(月) 17:40:17ID:???改行コードは半角スペースとして認識されるとか。
0393nobodyさん
2006/10/09(月) 17:57:38ID:???0394nobodyさん
2006/10/09(月) 19:24:19ID:???モジュールを評価して欲しいのですが、
どこのスレがいいでしょうか?
0395nobodyさん
2006/10/09(月) 21:05:59ID:???0396nobodyさん
2006/10/09(月) 21:46:17ID:???0397nobodyさん
2006/10/09(月) 22:11:45ID:???0398nobodyさん
2006/10/09(月) 23:33:30ID:???このスレの最近の流れを遡ってみたよ。
>>388 # HTML の記法
>>380 # HTTP
>>318 # に至っては >>325「Perlかなにかで」
>>300 からの hidden 云々 # Web アプリに特有の安全性の問題
>>253 # Perl による Web アプリケーション実装における安全性の問題
# (そして CGI の文脈でしか考えてくれないため >>270 のようなトンチンカンなことに)
>>251 # サーバ間のリソース参照
これ全部あっちでも取扱わなきゃダメかなあ?
できれば勘弁して欲しいなあ。
0399nobodyさん
2006/10/09(月) 23:44:52ID:???0400nobodyさん
2006/10/10(火) 00:03:04ID:???0401nobodyさん
2006/10/10(火) 00:05:22ID:???うん、もっともだけど、僕両方見てるのでそういうんでもないんだよ。
ただ僕は、あちらでは「Perl の話」をしたいと思っていて、こちらでは Perl/CGI を軸とした Web アプリケーション開発全般の話題を期待しているわけよ。
で、両方を混ぜちゃうと >>398 で挙げたようないわば「Perl 外」の話が「Perl の話」とごっちゃになってしまい、僕にとってあまりうれしくない、ということなんだ。だから決して「Perl 外」の話が嫌で見たくない、ということではないのよ。
0402nobodyさん
2006/10/10(火) 00:40:47ID:???$hogeに1〜3の数字が入るのですが(「123」や「13」「2」だけのときもあります)
1がふくまれていたら「あか」、2が含まれていたら「あお」、3なら「きいろ」というような置換をしたいのですが、
s///; 1行でまとめて記述できますか?
できなければ
$hoge =~ s/1/あか/;
$hoge =~ s/2/あお/;
$hoge =~ s/3/きいろ/;
と書くしかないのでしょうか〜? 調べてみたのですがイマイチわかりません・・・。
0404nobodyさん
2006/10/10(火) 00:51:10ID:???即レスありがとうございました・・・orz
0406nobodyさん
2006/10/10(火) 00:58:12ID:???ごめん。準備に一行使ったので二行になっちゃった。
@colors = ('あか', 'あお', 'きいろ');
$hoge =~ s/([1-3])/$colors[$1 - 1]/eg;
0407nobodyさん
2006/10/10(火) 01:00:49ID:???0411402
2006/10/10(火) 03:00:05ID:???$hogeに1〜3の数字が入るのですが(「123」や「13」「2」だけのときもあります)
if( $hoge =~ /1/){$check[1] = 'checked';}
if( $hoge =~ /2/){$check[2] = 'checked';}
if( $hoge =~ /3/){$check[3] = 'checked';}
これと同じようなことをできるだけ短い行でしたいのですが
ためしに
if ($c_hp =~ /([1-3])/){ $checked[$1] = 'checked';}
にしてみましたが、初めの数字しか反応しません・・・(あたりまえですが)
if以外を使えばいいのでしょうか、、、やり方が思いつきません。
0412402
2006/10/10(火) 03:12:46ID:???0413nobodyさん
2006/10/10(火) 03:36:42ID:???とか
$check[$1] = 'checked' while $hoge =~ /([1-3])/g;
とか?
二番目のほうは同じ数字が複数回出てくる場合無駄が出るね
逆に一番目のほうは三回別のパターンで頭から調べなおしだから、
それ以外の場合では効率が悪そうな気がする。
0415nobodyさん
2006/10/10(火) 08:49:57ID:???おまえらハッシュの存在忘れてね? e なくてもできるほうがいいと思うんだが。
%colors = (1 => 'あか', ・・・);
$hoge = s/([1-3])/$colors{$1}/g;
0416nobodyさん
2006/10/10(火) 10:39:50ID:???ハッシュにしなくとも >>406 なら /e は要らない。
変数展開コンテキスト中でも配列の添え字やハッシュのキーには
式を使える。
0417nobodyさん
2006/10/10(火) 11:06:28ID:???0418nobodyさん
2006/10/10(火) 14:23:04ID:M4r4Q87U$REC1 = (1,2,3,4,5);
@test1=split(/\,/, $REC1);
for($i=0; $i<@test1; $i++){
@aaa = $test1[$i]
}
とすると、わたしのイメージでは$iが変化する度に$test1[0]から$test1[4]
が@aaaに12345と代入されていくと
思ったのですが実際は一文字しか表示されませんでした。
変数が変化する度に配列に入れていく方法はどうしたらできますか。
0419nobodyさん
2006/10/10(火) 14:28:22ID:???push(@aaa, $test1[$i]);
0420nobodyさん
2006/10/10(火) 14:53:37ID:M4r4Q87U早速できてしまいました。
おかげさまです。ありがとうございました。
0421nobodyさん
2006/10/10(火) 16:10:54ID:???@aaa = @test1か@aaa=split ... で十分だと思うのだが。
ここで書いてない部分になにか必要な処理がはさまるのかもしれんけど。
0422nobodyさん
2006/10/10(火) 17:40:59ID:???int型4バイトの場合s[1]のアドレス = s[0]のアドレス+4という風に
順当に増えていきますが、Perlの配列の場合どうなっているのでしょうか?
@c = (1,2,3);のとき
SCALAR(0x804c380)、SCALAR(0x804c464)、SCALAR(0x804c494)となりました。
それどころか自分で作ったあるプログラム中の配列では
$ref2 = \@$ref[2];
$ref3 = \@ref[3];
$ref2 = SCALAR(0x8063634)
$ref3 = SCALAR(0x8063610)という風にインデックスは増えているのに
アドレスの値は減ってしまいました。
0423nobodyさん
2006/10/10(火) 17:59:24ID:???0424nobodyさん
2006/10/10(火) 18:23:51ID:???Sriram Srinivasanが書いた方)の20章「Perlの内部構造」を読むといい。
かいつまんでいると、Perlの配列はCのようにいろいろな型を要素にもった配列ではなくて、全て
Perlのスカラー型をあらわす構造体へのポインタの配列になっている。アドレス順に並んでる
のはこのポインタが並んだ部分だが、君がリファレンスとって見ているのはポインタが入ったハコ
のアドレスではなく、そこに入ったポインタがさした先のスカラーのアドレスなので、これがどういう
順番になっているかはPerlのメモリ割り当てシステムの気分しだい。
0425nobodyさん
2006/10/10(火) 19:24:30ID:kpxOKRmyhttp:// check 2ch.is.land.to/ 2chsea rcher.cgi?page=0&mobile=&view=10&category=youtube&keyword=&selecttype=all&TARGETADDRESS=http://pc7.2ch.net/streaming/dat/1155343107.dat
↑を保存してそれをhtmlで保存したもの はサムネイルが表示される!
http:// check 2ch .is.land.to/ testing.html
cgiからyoutubeファイルにアクセスするとサムネイルが取得できないのかと思って
上の保存したものを、ただcgiで吐き出すページでも サムネイルが表示できる
http:// check 2ch .is.land.to/ testing.cgi
なんで一番上のcgiだけサムネイルが表示されないか分かる方いたら教えてください。
0426nobodyさん
2006/10/10(火) 19:32:45ID:???0427nobodyさん
2006/10/10(火) 19:35:49ID:kpxOKRmyアドレスとかタグに関して全く同じ記述なんです
0428nobodyさん
2006/10/10(火) 19:38:04ID:kpxOKRmy表示したての1ページ目は真っ黒でサムネイルは表示されず
2ページ目からはサムネイル表示されます
そして、また1ページに戻るをしたら1ページ目も表示される
なんででしょう^^;
謎すぎです
0429nobodyさん
2006/10/10(火) 19:53:08ID:???情報少ないんでなんともいえないけど、違うのがアドレスだけ、ってことなら、
とりあえずその長いアドレスをどうにか直してみたら?
0430nobodyさん
2006/10/10(火) 19:54:09ID:kpxOKRmy一度
index.cgiに変えましたけど 同じでした
なのでソースの中身なのかもしれません。
0431nobodyさん
2006/10/10(火) 20:12:14ID:???切り分けた方がいいんじゃないか。
0432nobodyさん
2006/10/10(火) 20:15:37ID:kpxOKRmyどういう意味ですか?
何と何を切り分けるの?
0434nobodyさん
2006/10/10(火) 20:25:54ID:???去れ
0436nobodyさん
2006/10/10(火) 20:41:57ID:???0438422
2006/10/10(火) 21:55:48ID:???@a = (1,2,3);
と宣言した時点で1、2、3が適当なアドレスに振り分けられて
配列の要素の中にそのスカラー値へのポインタが格納されているのですかー
ありがとうございましたm(_ _)m
0439nobodyさん
2006/10/11(水) 00:16:26ID:???0440nobodyさん
2006/10/11(水) 20:14:04ID:???アップローダーのCGIなどよくありますが、
これらにアップロード中の進行状況表示(転送速度あるいは転送済量)
を表示する機能を追加することが出来ないかと考えております。
javaなどの可能性も含めて
どなたか知恵を拝借させてください。
よろしくおねがいいたします。
0441406
2006/10/11(水) 20:46:56ID:???すごい勢いで遅れたけどこれで。e にこだわる係。未テスト。
$c_hp =~ s/([1-3])/ $checked[$1] ||= 'checked'; ('あか', 'あお', 'きいろ')[$1 - 1] /eg;
0442nobodyさん
2006/10/11(水) 20:59:56ID:???java アプレット
Flash (MX以降かも)
ActiveX
で実装可能
上から順番に汎用性は高いかと思う
0443nobodyさん
2006/10/11(水) 21:00:39ID:???javascriptかjavaかflashでも使えばなんとかなるかもしれん。
特に鯖側に機能はいらないのでそれらのスレで聞いたほうが
いいよ。
0444nobodyさん
2006/10/11(水) 21:09:07ID:???まぁftp開けて転送しちゃうのも手
0445nobodyさん
2006/10/11(水) 21:40:36ID:???0446440
2006/10/12(木) 02:52:06ID:???やはりjavaが実用的かと思うので
試行錯誤してみたいと思います
ありがとうございました。
0447nobodyさん
2006/10/12(木) 13:35:56ID:???0448nobodyさん
2006/10/12(木) 13:58:23ID:???0449nobodyさん
2006/10/12(木) 14:23:54ID:???apacheはもちろん
全てのサービスが通信不能になった私が来ましたがなにか。
ちなみに原因判明まで1週間もかかった自分も自分だがなorz
0451nobodyさん
2006/10/12(木) 21:29:47ID:???投稿者がファイルをアップするとIPなどのログが記録されるのですが、
投稿者がアップしたファイルを削除するとログも削除されてしまいます。
ファイルを削除した時にログが削除されないようにするにはどこを変更したらいいのでしょうか?
よろしくお願いします。
snアップローダ
ttp://sugachan.dip.jp/download/uploader.php
0452nobodyさん
2006/10/12(木) 21:54:06ID:???スレ違い。こちらへドゾー
【 スクリプト改造依頼スレ 】(丸投げ) part6
ttp://pc8.2ch.net/test/read.cgi/php/1157787046/
0454nobodyさん
2006/10/12(木) 22:49:49ID:???0455nobodyさん
2006/10/12(木) 23:02:48ID:???Perl処理系が認識するコメントにはできないが、ヒアドキュメントで得られた文字列を適当に加工する
コードを追加する、という手はなくもない。
print strip_comment(<<FOO);
hoge
# hoge
hogehoge # hoge
FOO
sub strip_comment {
my($s) = @_;
$s =~ s/\s*#.*$//gm;
return $s;
}
0456nobodyさん
2006/10/12(木) 23:16:34ID:???答えようとしたら同ネタが既に出てたので正規表現だけ。
$s =~ s/(^)?[\t ]*#.*(?(1)\n)//gm;
>>455
大昔にベンチ取った時、サブルーチン末で値を返す場合は
陽に return しない方が有為な差が出る程度に速かったんだけど、
今の環境だとどうなんだろうね。興味あったら計ってみて下さい。
0457nobodyさん
2006/10/12(木) 23:29:52ID:???0458nobodyさん
2006/10/12(木) 23:48:01ID:???0461nobodyさん
2006/10/13(金) 00:09:28ID:???0463nobodyさん
2006/10/13(金) 22:52:20ID:???sub md5_hex(@) {
unpack 'H*', &md5;
}
0466nobodyさん
2006/10/15(日) 22:29:10ID:???$FORM{$name} = $value
でフォーム内容をわけていますが、
hp だけ情報を結合したいのですが
if($name eq 'hp'){$FORM{'hp'} .=$value;}
else{$FORM{$name} = $value;}
としてみましたがうまく動きません。(hpの最後の情報だけ取得されます)
if($name eq 'hp'){$FORM{'$name'} .=$value;}
else{$FORM{$name} = $value;}
としてみても結果は同じです(当たり前ですが・・・)
どのようにすればいいのでしょうか。orz
0468466
2006/10/15(日) 23:57:14ID:???しかし、思いのとおりに入っていないのですが…
ちなみにhpの指定をせずに $FORM{$name} .= $value; にすると
ちゃんとhpに連結したデータが入ることは確認しています。。
0469nobodyさん
2006/10/16(月) 00:04:58ID:???後ろにスペースが入ってるとか、改行がついてるとか、大文字小文字が違うとか。
if($name =~ /\bhp\b/i){$FORM{$name} .=$value;}
else{$FORM{$name} = $value;}
だとどう?
0470466
2006/10/16(月) 00:20:30ID:???できました・・・!!
=~ //i はわかるのですが、\bは何を意味するのか
調べてみたのですがいまいちわかりません…!
よければなんと言う呼び名か教えていただけませんか?
自分で調べたいので…!
0473466
2006/10/16(月) 00:49:49ID:???後にでてくる
if ($FORM{'hp'} !~ /[1-5]/){&error("hpwo選択してください");}
が反応しなくなってしまいました…。
(>>468の場合だと動いていました)
hpには1から5の数値がランダムで入るのですが…
連投すいません。
0474nobodyさん
2006/10/16(月) 00:57:33ID:???そのコードだと、
> hpには1から5の数値がランダムで入るのですが…
が真である限り、$FORM{'hp'} !~ /[1-5]/ は必ず偽になるため &error() が実行される事はありません。
そういうことではなくて?
0475466
2006/10/16(月) 01:01:49ID:???あぁ、書き方がわるかったです、申し訳ない!
必ず偽になるようにテストしているのですが
&error() が返されてしまうのです。
0476nobodyさん
2006/10/16(月) 01:03:41ID:???ちゃんと 'hp' になるようにしたほうが、バグにはならないね。chomp、s///、lcとかでやってみて。
てか、条件の後出しはやめましょう。
0477466
2006/10/16(月) 01:07:01ID:???そうですね、色々ややこしくなってそうです。
改めて内容の見直ししてみます。
>>466の状態でできていれば問題なかったのですが・・・(・ω・`)
レスありがとうございました。助かりました。
0478Perl初心者の中学生
2006/10/16(月) 19:34:27ID:1M63qM8/スレ違いなら誘導してくれるとありがたいです。
質問の内容はカウンターを作っていたのですが、作成途中にできた二つのソースが
同じ内容なのに動作に違いがあることに気づき、原因がわからない。ということです。
以下のソースを見てください。
http://love.meganebu.com/~freedomworld2006/count.txt
このソースはCGI形式にして実行すると、
<img src="img/0.png" alt="0> <img src="img/0.png" alt="0> <img src="img/0.png" alt="0> <img src="img/1.png" alt="1>
と、そのまんまブラウザに表示されてしまいます。ですがカウントはしているようです。
http://love.meganebu.com/~freedomworld2006/count2.txt
しかし、こちらは上の失敗したソースと同じなのにちゃんと画像が表示され動作します。
違いといったら半角のスペースや改行があるかないかです。
なんでこんなことが起こるのか全くわかりません。ちなみにインタプリンタパスは省略してあります。
わかる方、どうか教えてください。お願いします。
0479nobodyさん
2006/10/16(月) 20:07:39ID:???0480nobodyさん
2006/10/16(月) 20:13:00ID:???count.txt 19行目:
alt=\"$n\>\n";
count2.txt 18行目:
alt=\"$n\">\n";
0481nobodyさん
2006/10/16(月) 20:48:00ID:???やはりソースミスでしたか・・・こういうのは人に言われて初めて気づくんですよね・・・。
ご指摘ありがとうございました。
本当に助かりました。
0482nobodyさん
2006/10/16(月) 23:51:46ID:ZHxCJrpx掲示板とショッピングカートはレンタルのサーバーをかりて、
HPからリンクして使っています。ところが掲示板荒らしで困っています。
改行を繰り返し、とても見にくくて、アクセス拒否してもネットカフェなどから
投稿してきたりで、どうしようもありません。
文字数の制限は設定サービスにあるのですが改行制限はサービスにないといわれ、
$value =~ s/\r\n/<BR>/g;
$value =~ s/\r/<BR>/g;
$value =~ s/\n/<BR>/g;
$value =~ s/(<BR>){5,}//g;
↑
これを使えと言われたのですが、本当に初心者でよくわかりません。
サーバーを代えたほうが早いですか??
0483nobodyさん
2006/10/17(火) 00:14:01ID:???そのひとが 「改行制限はサービスにない」 とかゆってんの? ワロスww
そしてこれを使えの例がひどくてさらにワロスwww
参考までに作者のサイトおしえてください><
〜.cgi のソース内を 「$value =~ s/\r/<BR>/g;」 で検索すればそれっぽいとこがあるから追加すればいいんじゃない? kwskはわからんけど
あとサーバ変えても同じだと思うんだけど。
0484nobodyさん
2006/10/17(火) 00:25:20ID:???ttp://advenbbs.net/
↑
ここのです。
$value =~ s/\r\n/<BR>/g;
$value =~ s/\r/<BR>/g;
$value =~ s/\n/<BR>/g;
$value =~ s/(<BR>){5,}//g;
↑
コレを使えと言ったのは、元PCの先生なんですが。
なんか、自分が無知すぎて恥ずかしいので、
他に対策をとってみます。
すぐレス下さり本当に有難うございました。
まずは、勉強してみます。
0485nobodyさん
2006/10/17(火) 00:44:46ID:???>ベースはKENT-WEBの人気レス式アイコン掲示板YY-BOARDで見た目も使いやすさはバツグン!
(ノД`)アチャー
0486nobodyさん
2006/10/17(火) 00:46:25ID:???他の、しっかり対応してくれるとこから借りるのをオススメしますー。
0487nobodyさん
2006/10/17(火) 00:54:00ID:???m(__)m
PS.なんでみなさん、IDが???なんでしょう???
■ このスレッドは過去ログ倉庫に格納されています