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/
0363nobodyさん
2006/10/09(月) 06:39:32ID:???0364nobodyさん
2006/10/09(月) 06:46:10ID:???それだと、アクセシビリティ上の問題が発生するじゃん
例えばセッションの保有期間が1時間だったとしよう。
個人情報の入力中にご飯を食べにいって、帰ってきてから続きいれて決定押して
「セッションの有効期間がすぎました。お手数ですが最初からやり直して下さい。」
なんて言われたら腹がたつだろ?
下手したら、その店には二度といかないかもしれない。
有効期限を延ばしすぎると、サーバ負荷が高まるし、例え2日にしたとしても
決算確認画面まで来てで「やっぱ、購入するのは3日後にしよ。それまでブラウザは開いたままにするか。」という客がいるかもしれない。
P2PやIRC、ネットゲームの露天、タブブラウザの普及も関係してか、PCつけっぱなしの人、ブラウザのタブを長期間開く人も予想以上に増えている。
情報を全て暗号化した上で hidden にいれとけば、
・セッション使用に比べてサーバ負荷が少ない
・強度の暗号を使用すればセキュリティ上の問題も無い
・セッションタイムアウトでユーザがいらつくことがない
というメリットがある
0368nobodyさん
2006/10/09(月) 11:27:54ID:???それじゃマジで何のためにhiddenに値段埋め込んでるのかわからないじゃねえか
商品IDだけで買う商品が特定できないわけじゃあるまいし
0369nobodyさん
2006/10/09(月) 11:37:23ID:???0371nobodyさん
2006/10/09(月) 12:16:12ID:???IDから引っ張る設計にしたら、
太郎くんが買い物かごに 500円のお米をいれました。
そして購入確認画面で内容をじっくり確認していました。
その時にサイト管理者が商品の価格を80円値上げしました。
そんな時に 「購入」 ボタンを押すと、確かに500円で注文したはずなのに、580円太郎くんのクレジットカードから引き落とされました。
こんなことがおこるわけだが?
そして太郎くんは消費生活センターに苦情を申し立て、2chでそのショップを誹謗しまくり(詐欺だの価格詐称だの)、ついでに、
新聞に投書までしました、ってことにもなりかねないぞw
0372nobodyさん
2006/10/09(月) 12:19:45ID:???0373nobodyさん
2006/10/09(月) 12:41:43ID:???わかったよな?
0375nobodyさん
2006/10/09(月) 12:45:25ID:???0376nobodyさん
2006/10/09(月) 12:46:54ID:???0377nobodyさん
2006/10/09(月) 13:07:20ID:???どんな実装されるやら・・・
0378nobodyさん
2006/10/09(月) 13:50:24ID:???突然のセールでも対応可能。
0379nobodyさん
2006/10/09(月) 13:52:28ID:???だいたい >>364 の理論でいくと、1ヶ月とか数ヶ月くらいそのデータ保持してても問題ないってことになるよな。
店で期間限定のチラシの値札もってきてその値段で買わせろってヤツがどこにいるんだ? 大陸か?
0380nobodyさん
2006/10/09(月) 14:26:27ID:???#!/usr/bin/perl
print "Hello" ;
この2行を記述してtest.cgiとしてアップロード・パーミッションは755に
でもScript Error
The script did not produce proper HTTP headers
って出ます。
対処法を教えてくださいまし
0383nobodyさん
2006/10/09(月) 14:39:46ID:???print"<meta http-equiv='Content-Type' content='text/html'; charset='SHIFT-JIS'>";
0384nobodyさん
2006/10/09(月) 14:40:46ID:???ぐぐれ
あるいは適当な配布cgiスクリプトでもダウンロードして、
文字出力の前にどういうことをやってるかでも見てみりゃいい
0385nobodyさん
2006/10/09(月) 14:42:59ID:???http://www.google.com/
0386nobodyさん
2006/10/09(月) 14:47:30ID:???( ´_ゝ`)
>>382
自分で調べようという努力をしない香具師、自力で調べる能力の無い香具師はプログラミングに向かない。
お前さんはどうやらプログラミングに向いてないようなので、さっさとやめましょう。
0387nobodyさん
2006/10/09(月) 14:52:43ID:???これをつけたら直りました。
サンクス
0388nobodyさん
2006/10/09(月) 14:58:07ID:???#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello\n";
$count = 1;
print"$count\n";
$count = 100;
print"$count";
と、
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello<br>\n";
$count = 1;
print"$count\n";
$count = 100;
print"$count";
では、表示させたさい、Helloのあとに改行がつくかつかないかの違いなのですが
解説サイト等ではダブルクォーテーション内で\nをつかば改行とか書いてあるんですけど
実際には改行されず、スペースキーを打ったような状態になってます、
なんででしょうか?
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:???■ このスレッドは過去ログ倉庫に格納されています