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

Perlコーディング初心者質問スレ Part 52

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/09/15(金) 14:01:51ID:gobry0n2
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

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

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

お勧めサイトは >>2-10

前スレ http://pc8.2ch.net/test/read.cgi/php/1153987463/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0362nobodyさん2006/10/09(月) 06:36:57ID:???
>>361
強度の高い暗号化を導入していればユーザが何やっても操作できるわけないよね
256bit AES とか。

0363nobodyさん2006/10/09(月) 06:39:32ID:???
いや、ってかページにいれるのは セッションID だけでいいやんそれ。
0364nobodyさん2006/10/09(月) 06:46:10ID:???
>>363
それだと、アクセシビリティ上の問題が発生するじゃん

例えばセッションの保有期間が1時間だったとしよう。

個人情報の入力中にご飯を食べにいって、帰ってきてから続きいれて決定押して
「セッションの有効期間がすぎました。お手数ですが最初からやり直して下さい。」
なんて言われたら腹がたつだろ?

下手したら、その店には二度といかないかもしれない。

有効期限を延ばしすぎると、サーバ負荷が高まるし、例え2日にしたとしても
決算確認画面まで来てで「やっぱ、購入するのは3日後にしよ。それまでブラウザは開いたままにするか。」という客がいるかもしれない。

P2PやIRC、ネットゲームの露天、タブブラウザの普及も関係してか、PCつけっぱなしの人、ブラウザのタブを長期間開く人も予想以上に増えている。

情報を全て暗号化した上で hidden にいれとけば、

・セッション使用に比べてサーバ負荷が少ない
・強度の暗号を使用すればセキュリティ上の問題も無い
・セッションタイムアウトでユーザがいらつくことがない

というメリットがある
0365nobodyさん2006/10/09(月) 06:48:03ID:???
>>360
鯖側で商品と価格が一致するかのチェックを再度すれば良いだけじゃない?
0366nobodyさん2006/10/09(月) 07:11:43ID:???
>>364
(゜Д゜)
03673552006/10/09(月) 09:37:13ID:???
>>357
スッキリしました。
ありがとうございました。
0368nobodyさん2006/10/09(月) 11:27:54ID:???
>>365
それじゃマジで何のためにhiddenに値段埋め込んでるのかわからないじゃねえか
商品IDだけで買う商品が特定できないわけじゃあるまいし
0369nobodyさん2006/10/09(月) 11:37:23ID:???
だから普通は商品IDだけあればよくて、商品IDから引っ張れる情報は冗長だからもちまわらない
0370nobodyさん2006/10/09(月) 12:11:04ID:???
>>368
だから設計が悪いんでしょ。
0371nobodyさん2006/10/09(月) 12:16:12ID:???
>>369-370
IDから引っ張る設計にしたら、


太郎くんが買い物かごに 500円のお米をいれました。
そして購入確認画面で内容をじっくり確認していました。
その時にサイト管理者が商品の価格を80円値上げしました。
そんな時に 「購入」 ボタンを押すと、確かに500円で注文したはずなのに、580円太郎くんのクレジットカードから引き落とされました。


こんなことがおこるわけだが?

そして太郎くんは消費生活センターに苦情を申し立て、2chでそのショップを誹謗しまくり(詐欺だの価格詐称だの)、ついでに、
新聞に投書までしました、ってことにもなりかねないぞw
0372nobodyさん2006/10/09(月) 12:19:45ID:???
値上げは別IDにしろよ
0373nobodyさん2006/10/09(月) 12:41:43ID:???
まぁあれだ、小学生相手に例えて言うと商品IDっていうのはバーコードなんだよ。
わかったよな?
0374nobodyさん2006/10/09(月) 12:43:05ID:???
>>373
なるほど
そういうことでしたか
よくわかりました>A<

0375nobodyさん2006/10/09(月) 12:45:25ID:???
POSの話ならレジで値段調整するし、値段を変更する前に値札を変更するんだが。
0376nobodyさん2006/10/09(月) 12:46:54ID:???
商品ID一つで値段別の複数IDを持ったっていい気がするんだがw
0377nobodyさん2006/10/09(月) 13:07:20ID:???
その程度のことさえ考えずにやってるって、有る意味怖いな。
どんな実装されるやら・・・
0378nobodyさん2006/10/09(月) 13:50:24ID:???
マジレスすると、期間と価格を設定したテーブルを作っておくから、
突然のセールでも対応可能。
0379nobodyさん2006/10/09(月) 13:52:28ID:???
その500円を保持しているデータを持ってるってのは誰が保証してくれるんだ?
だいたい >>364 の理論でいくと、1ヶ月とか数ヶ月くらいそのデータ保持してても問題ないってことになるよな。
店で期間限定のチラシの値札もってきてその値段で買わせろってヤツがどこにいるんだ? 大陸か?
0380nobodyさん2006/10/09(月) 14:26:27ID:???
xrea s201サーバです。

#!/usr/bin/perl
print "Hello" ;

この2行を記述してtest.cgiとしてアップロード・パーミッションは755に
でもScript Error
The script did not produce proper HTTP headers
って出ます。

対処法を教えてくださいまし
0381nobodyさん2006/10/09(月) 14:30:32ID:???
>>380
headerがない
0382nobodyさん2006/10/09(月) 14:35:15ID:???
>>381
その書き方を開設してるサイトかリファレンスありますか?
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:???
>382
ぐぐれ
あるいは適当な配布cgiスクリプトでもダウンロードして、
文字出力の前にどういうことをやってるかでも見てみりゃいい
0385nobodyさん2006/10/09(月) 14:42:59ID:???
>>382
http://www.google.com/
0386nobodyさん2006/10/09(月) 14:47:30ID:???
>>383
( ´_ゝ`)

>>382
自分で調べようという努力をしない香具師、自力で調べる能力の無い香具師はプログラミングに向かない。
お前さんはどうやらプログラミングに向いてないようなので、さっさとやめましょう。
0387nobodyさん2006/10/09(月) 14:52:43ID:???
print "Content-type: text/html\n\n";
これをつけたら直りました。
サンクス
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:???
print "Content-type: text/html\n\n"; って指定してるんだろ?
『html』なら<br>でなきゃ改行にならない。
『html』ではない別の指定でなら、\nで改行になる。
その解説サイトの解説をすみずみまでよく読んだか?

あるいはその解説サイトがいいかげんな可能性もあるが。
0390nobodyさん2006/10/09(月) 15:12:58ID:???
>>389
ほほー
ありがとうございました。
0391nobodyさん2006/10/09(月) 17:10:55ID:???
>>389
その説明もかなりいい加減だと思うが...
0392nobodyさん2006/10/09(月) 17:40:17ID:???
htmlの仕様を勉強した方がいいよ。
改行コードは半角スペースとして認識されるとか。
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:???
ここか、「Perlについての質問箱 27箱目」 http://pc8.2ch.net/test/read.cgi/tech/1157874614/
0397nobodyさん2006/10/09(月) 22:11:45ID:???
CGIが関わると拒絶されるところを紹介しても(ry
0398nobodyさん2006/10/09(月) 23:33:30ID:???
>>397
このスレの最近の流れを遡ってみたよ。

>>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:???
WebProg板にあるのに何をw
0401nobodyさん2006/10/10(火) 00:05:22ID:???
>>399
うん、もっともだけど、僕両方見てるのでそういうんでもないんだよ。
ただ僕は、あちらでは「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/きいろ/;
と書くしかないのでしょうか〜? 調べてみたのですがイマイチわかりません・・・。
0403nobodyさん2006/10/10(火) 00:43:08ID:???
>>402
無理。
0404nobodyさん2006/10/10(火) 00:51:10ID:???
!無理ですか・・・
即レスありがとうございました・・・orz
0405nobodyさん2006/10/10(火) 00:55:33ID:???
>>402
できる。 s///ge を使いなされ。
0406nobodyさん2006/10/10(火) 00:58:12ID:???
>>402
ごめん。準備に一行使ったので二行になっちゃった。

@colors = ('あか', 'あお', 'きいろ');
$hoge =~ s/([1-3])/$colors[$1 - 1]/eg;
0407nobodyさん2006/10/10(火) 01:00:49ID:???
$hoge =~ s/([1-3])/('あか', 'あお', 'きいろ')[$1 - 1]/eg;
04084062006/10/10(火) 01:03:57ID:???
>>407
あ、そうか。^^;
04094022006/10/10(火) 01:05:03ID:???
>>405-407
ありがとうございます!!
変換文字列が結構あるので助かりました〜〜!
0410nobodyさん2006/10/10(火) 02:41:09ID:???
>>406の方がいいと思うね。>>407はやりすぎ。
04114022006/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以外を使えばいいのでしょうか、、、やり方が思いつきません。
04124022006/10/10(火) 03:12:46ID:???
↑$c_hp は $hoge の間違いで、さらに $checked は $check の間違いです・・・orz
0413nobodyさん2006/10/10(火) 03:36:42ID:???
$hoge =~ /$_/ and $check[$_] = 'checked' for qw(1 2 3);
とか
$check[$1] = 'checked' while $hoge =~ /([1-3])/g;
とか?
二番目のほうは同じ数字が複数回出てくる場合無駄が出るね
逆に一番目のほうは三回別のパターンで頭から調べなおしだから、
それ以外の場合では効率が悪そうな気がする。
04144022006/10/10(火) 03:57:19ID:???
>>413
ありがとうございました!!
同じ数字は複数出ない設定なので2番目のほう利用させていただきます!
0415nobodyさん2006/10/10(火) 08:49:57ID:???
>>405-407
おまえらハッシュの存在忘れてね? e なくてもできるほうがいいと思うんだが。

%colors = (1 => 'あか', ・・・);
$hoge = s/([1-3])/$colors{$1}/g;
0416nobodyさん2006/10/10(火) 10:39:50ID:???
>>415
ハッシュにしなくとも >>406 なら /e は要らない。
変数展開コンテキスト中でも配列の添え字やハッシュのキーには
式を使える。
0417nobodyさん2006/10/10(火) 11:06:28ID:???
うわ、ほんとだw しらんかったw
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:???
$REC1= '1,2,3,4,5';


push(@aaa, $test1[$i]);
0420nobodyさん2006/10/10(火) 14:53:37ID:M4r4Q87U
419さん

早速できてしまいました。
おかげさまです。ありがとうございました。
0421nobodyさん2006/10/10(火) 16:10:54ID:???
配列を別の配列に入れるのに添え字でループまわしてpushってしないだろ。
@aaa = @test1か@aaa=split ... で十分だと思うのだが。

ここで書いてない部分になにか必要な処理がはさまるのかもしれんけど。
0422nobodyさん2006/10/10(火) 17:40:59ID:???
C言語の配列のアドレスは
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:???
その辺に興味があるのなら処理系のソース読むか「実用Perlプログラミング」(第2版じゃなくて
Sriram Srinivasanが書いた方)の20章「Perlの内部構造」を読むといい。

かいつまんでいると、Perlの配列はCのようにいろいろな型を要素にもった配列ではなくて、全て
Perlのスカラー型をあらわす構造体へのポインタの配列になっている。アドレス順に並んでる
のはこのポインタが並んだ部分だが、君がリファレンスとって見ているのはポインタが入ったハコ
のアドレスではなく、そこに入ったポインタがさした先のスカラーのアドレスなので、これがどういう
順番になっているかはPerlのメモリ割り当てシステムの気分しだい。
0425nobodyさん2006/10/10(火) 19:24:30ID:kpxOKRmy
youtubeのファイルを読み出してプレイヤーとサムネイルの表示がうまく出来ません。

http:// 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
>>426
アドレスとかタグに関して全く同じ記述なんです
0428nobodyさん2006/10/10(火) 19:38:04ID:kpxOKRmy
>>426

表示したての1ページ目は真っ黒でサムネイルは表示されず
2ページ目からはサムネイル表示されます

そして、また1ページに戻るをしたら1ページ目も表示される
なんででしょう^^;
謎すぎです
0429nobodyさん2006/10/10(火) 19:53:08ID:???
じゃーyoutube側で何かしてるとかじゃね?
情報少ないんでなんともいえないけど、違うのがアドレスだけ、ってことなら、
とりあえずその長いアドレスをどうにか直してみたら?
0430nobodyさん2006/10/10(火) 19:54:09ID:kpxOKRmy
>>429
一度
index.cgiに変えましたけど 同じでした
なのでソースの中身なのかもしれません。
0431nobodyさん2006/10/10(火) 20:12:14ID:???
とりあえずブラウザからyoutubeに対して同じリクエストを出しているかどうかを
切り分けた方がいいんじゃないか。
0432nobodyさん2006/10/10(火) 20:15:37ID:kpxOKRmy
>>431
どういう意味ですか?
何と何を切り分けるの?
0433nobodyさん2006/10/10(火) 20:22:15ID:???
>>432
で、どこがPerlの質問なの。
0434nobodyさん2006/10/10(火) 20:25:54ID:???
youtube話題は終了
去れ
0435nobodyさん2006/10/10(火) 20:39:31ID:???
>>434
お前みたいなキモいのがいるから俺らまで勘違いされちまうじゃねーか!
0436nobodyさん2006/10/10(火) 20:41:57ID:???
スレ違い指摘されただけでムキなるなやチョン
0437nobodyさん2006/10/10(火) 21:18:05ID:???
>>436
まぁまぁムキになるなよチンク
04384222006/10/10(火) 21:55:48ID:???
>>424
@a = (1,2,3);
と宣言した時点で1、2、3が適当なアドレスに振り分けられて
配列の要素の中にそのスカラー値へのポインタが格納されているのですかー
ありがとうございましたm(_ _)m
0439nobodyさん2006/10/11(水) 00:16:26ID:???
めんどくせーから youtube-dl でも落として、`youtube-dl` しとけ。
0440nobodyさん2006/10/11(水) 20:14:04ID:???
質問です。
アップローダーのCGIなどよくありますが、
これらにアップロード中の進行状況表示(転送速度あるいは転送済量)
を表示する機能を追加することが出来ないかと考えております。
javaなどの可能性も含めて
どなたか知恵を拝借させてください。
よろしくおねがいいたします。
04414062006/10/11(水) 20:46:56ID:???
>>411
すごい勢いで遅れたけどこれで。e にこだわる係。未テスト。
$c_hp =~ s/([1-3])/ $checked[$1] ||= 'checked'; ('あか', 'あお', 'きいろ')[$1 - 1] /eg;
0442nobodyさん2006/10/11(水) 20:59:56ID:???
>440
java アプレット
Flash (MX以降かも)
ActiveX

で実装可能
上から順番に汎用性は高いかと思う
0443nobodyさん2006/10/11(水) 21:00:39ID:???
>>440
javascriptかjavaかflashでも使えばなんとかなるかもしれん。
特に鯖側に機能はいらないのでそれらのスレで聞いたほうが
いいよ。

0444nobodyさん2006/10/11(水) 21:09:07ID:???
鯖側は通常のあぷろだスクリプトのままでOK(若干の手直しは必要かも)

まぁftp開けて転送しちゃうのも手
0445nobodyさん2006/10/11(水) 21:40:36ID:???
Ajax
04464402006/10/12(木) 02:52:06ID:???
多くのレスありがとうございます。
やはりjavaが実用的かと思うので
試行錯誤してみたいと思います
ありがとうございました。
0447nobodyさん2006/10/12(木) 13:35:56ID:???
mod_uploader
0448nobodyさん2006/10/12(木) 13:58:23ID:???
ご主人様?
0449nobodyさん2006/10/12(木) 14:23:54ID:???
mod_uploaderが原因不明の暴走起こして
apacheはもちろん
全てのサービスが通信不能になった私が来ましたがなにか。
ちなみに原因判明まで1週間もかかった自分も自分だがなorz
0450nobodyさん2006/10/12(木) 16:14:36ID:???
>>449
怖くて使えない自分よりも漢だ。
元気出せ!
0451nobodyさん2006/10/12(木) 21:29:47ID:???
snアップローダを使用しているのですが、
投稿者がファイルをアップするとIPなどのログが記録されるのですが、
投稿者がアップしたファイルを削除するとログも削除されてしまいます。

ファイルを削除した時にログが削除されないようにするにはどこを変更したらいいのでしょうか?
よろしくお願いします。

snアップローダ
ttp://sugachan.dip.jp/download/uploader.php
0452nobodyさん2006/10/12(木) 21:54:06ID:???
>>451
スレ違い。こちらへドゾー

【 スクリプト改造依頼スレ 】(丸投げ) part6
ttp://pc8.2ch.net/test/read.cgi/php/1157787046/
04534512006/10/12(木) 22:04:51ID:???
>>452
失礼しました
移動します
0454nobodyさん2006/10/12(木) 22:49:49ID:???
ヒアドキュメント内でコメントアウトすることできますでしょうか?
0455nobodyさん2006/10/12(木) 23:02:48ID:???
>>454
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:???
>>454
答えようとしたら同ネタが既に出てたので正規表現だけ。
$s =~ s/(^)?[\t ]*#.*(?(1)\n)//gm;

>>455
大昔にベンチ取った時、サブルーチン末で値を返す場合は
陽に return しない方が有為な差が出る程度に速かったんだけど、
今の環境だとどうなんだろうね。興味あったら計ってみて下さい。
0457nobodyさん2006/10/12(木) 23:29:52ID:???
変に最適化するより分かりやすいコードを書く方がいいと思うなぁ
0458nobodyさん2006/10/12(木) 23:48:01ID:???
そんな処理速度が問題になるようなところはXSで書けばいいのに。
0459nobodyさん2006/10/12(木) 23:58:15ID:???
>>458
XSってなんでしょう…。
XSSなら知ってますが、XSなんて聞いたことないですね〜。
0460nobodyさん2006/10/13(金) 00:09:26ID:???
>>449
ご主人様と呼ばれて喜んでいるようなキモい人間が書いたソフトを
よく自分のマシンで動かせたね。w
0461nobodyさん2006/10/13(金) 00:09:28ID:???
ググれ
■ このスレッドは過去ログ倉庫に格納されています