【Perl 】初心者コーナーPart7
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい
01/09/12 13:04ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。
参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://corn.2ch.net/test/read.cgi?bbs=php&key=988809842&ls=50
CGIの質問はこちら【CGIだけど、なんか質問ある?part3】
http://corn.2ch.net/test/read.cgi?bbs=php&key=988727833&ls=50
過去ログ、その他の役立ち情報は>>2-5を見よう。
0285名無しさん@お腹いっぱい。
01/09/24 13:16ID:4RAmdUnsURLの配列を作ってから一括代入するのはどうすか?
@cells = map { [ map { 'http://www.xxx.com/' . $_ } @$_ ] } @data;
$Worksheet->Range("A1:C3")->{Value} = \@cells;
0286名無しさん@お腹いっぱい。
01/09/24 13:56ID:???~~~~~~~
笑える。
0287名無しさん@お腹いっぱい。
01/09/24 13:57ID:???~~~~~~
0288名無しさん@お腹いっぱい。
01/09/24 14:50ID:???レスありがとうございます。
舌足らずで、説明不足だったようです。どうもすみません。
実現したい内容は、セル自身はURLそのものではなくリンクの一部を表し、
それを使ったリンクを同じセルに埋め込みたいということです。
例えば、URLの一部になるセルのデータとしてISBNや2chのスレIDなどが入っており、
その隣に書名なりスレ名なりが入力されているような状況を想像下さい。
そして、該当リンクへジャンプするとAmazonや2chに実際に飛んで、
具体的な情報が見れるような使い方を考えています。
実際に考えている使用方法では、セル自身のデータがCGIのquery情報を保持しており、
それ自身が意味を持った値ですので、
セルの値にHyperlinkを直接もつというのは避けたいところです。
引き続き、情報お待ちしております。
0289名無しさん@お腹いっぱい。
01/09/24 15:54ID:GhpSecZ2<form method="post" action="enquete.cgi">
"送る"を選ぶとなぜか
"次の場所からダウンロードするように選択しました"
となってcgiのテキストを開こうとします
本のCDからデータをコピーしたので打ち間違えではないのですが、、、
何が悪いのでしょうか?
0290名無しさん
01/09/24 15:56ID:1qyod3pU0291名無しさん@お腹いっぱい。
01/09/24 15:58ID:???または、IEの場合、*.cgiのファイルをテキストエディタ等に関連付けしてある状態で、
Content-Type: text/plainのCGIにアクセスすると、ダイアログが出るという状況が確認されています。
0292名無しさん@お腹いっぱい。
01/09/24 15:58ID:???ヘッダの情報が間違ってるとか。
0293名無しさん@お腹いっぱい。
01/09/24 16:13ID:GhpSecZ2>>290
ローカルなのですがApache/htdocsに入れました
>>291
*.cgiはメモ帳のアイコンになってますこれがまずいのでしょうか?
>>292
ヘッダってどこのことですか?
0294名無しさん@お腹いっぱい。
01/09/24 16:27ID:???> *.cgiはメモ帳のアイコン
ですね。関連付けを外したら直るかと。
ヘッダとは、Content-Type: text/plain とかのこと。
0295名無しさん@お腹いっぱい。
01/09/24 16:53ID:bJzfeBUIありがとうございます
それでどうやって関連付けを外すのですか?
申し訳無い
Content-Type: text/htmlというのならcgiデータに書いてあります
0296名無しさん@お腹いっぱい。
01/09/24 17:17ID:???どうしましょ。
関連付けはwin板ですかね。
0297名無しさん@お腹いっぱい。
01/09/24 17:43ID:???Wクリックでメモ帳で編集出来るようになってるだけだから。。。
0298名無しさん@お腹いっぱい。
01/09/24 17:44ID:AOw736z6暗号化のやり方がわからない・・・
0299名無しさん@お腹いっぱい。
01/09/24 17:53ID:???それ良く聞くけど、関連付けは関係無いと思うぞ。
インターネットの(外の)サーバのCGIではそんな風にならないんだろ?
だったら99%httpdの設定だって、WINは知らないけどApacheのconfファイル
見てみ。
>>298
$cryptpass = crypt ($plainpass,salt);
で$cryptpassをURLエスケープする
0300-
01/09/24 17:57ID:qSV25GfUhttp://members.tripod.co.jp/bingo852/
0301名無しさん@お腹いっぱい。
01/09/24 18:01ID:???text/htmlなら何ら関係ないけど。
>>300
よく飽きないね。いい加減ウザイ。
0302名無しさん@お腹いっぱい。
01/09/24 18:06ID:???そっか・・漏れデバッグの時plainで吐いてるけどなった事無かったから ゴメソ
じゃtext/html出してる前提で
httpd.confを触ってみて、多分Option辺りだと思うから。。
0303295
01/09/24 18:10ID:bJzfeBUIフォルダオプション-ファイルタイプで削除して
*.cgiがwinのアイコンになったのですが
"送る"を押すとブラウザにcgiデータのテキストが出てきてしまいます
>>299
httpd.confというのは本に書いてあるように設定したのですが、、、
0304名無しさん@お腹いっぱい。
01/09/24 18:20ID:???とりあえず、そのCGIは具体的に何するんですかね?
掲示板のようなCGIだと仮定してみる。
普通にtext/htmlを返すのが問題無いとして、
余程変にいじってないApacheならば問題ないはずだが。
0305295
01/09/24 18:22ID:bJzfeBUIServerName 127.0.0.1・・・Servername new host.name下に書き足し
Options FollowSymLinks ExecCGI・・・ExecCGIを書き足し
Options Indexes FollowSymLinks ExecCGI・・・MultiViewsをExecCGI
AddHandler cgi-script .cgi・・・#を削除
perl、cgiのみだと動くのですが、
html、shtmlに組み込むとまったく動きません
0306295
01/09/24 18:26ID:bJzfeBUIhtmlのformを使って書き込まれた内容を
cgiを使ってdatファイルに書き込むというモノなのですが、、、
0307名無しさん@お腹いっぱい。
01/09/24 18:28ID:???もしくはdatに飛ばしてるとか。
0308名無しさん@お腹いっぱい。
01/09/24 18:28ID:???0309295
01/09/24 18:41ID:EJKgIokw----enquete.cgiの内容----
#!C:/Perl/bin/perl
# ライブラリ
require 'cgi-lib.pl';
# デコードサブルーチン
&ReadParse(*form);
# ライブラリ
require 'jcode.pl';
# 文字コード変換サブルーチン
&jcode'convert(*form,'sjis');
# 連想配列から値だけを取り出し、区切りのハイフンを追加
$data = "$form{'name'}\n$form{'mail'}\n$form{'sex'}\n$form{'age'}\n$form{'kansou'}\n\n----------\n\n";
# 追加書き込みモード
open(ENQ, ">>enquete.dat") || die "File 'enquete.dat' Open Error.";
#flock(ENQ, 2);
print ENQ $data;
#flock(ENQ, 8);
close(ENQ);
# -----ここから出力 -----
print "Content-type:text/html\n\n";
print << "END_OF_HTML";
<HTML>
----お礼のページが開くようです----
0310295
01/09/24 18:46ID:EJKgIokwデータは付属CDからコピぺしたので動くはずなのですが、、、
0311名無しさん@お腹いっぱい。
01/09/24 19:16ID:???<html><body><FORM method="post" action="hello.cgi">
<input type=submit value="post実験></FORM>
これPOST
生でCGI開いてGET、おかしかったらHTTPDの設定が悪い
検索したら、出てきた。
http://www.shoeisha.com/book/errata/er_detail.asp?bid=1222
http://www.google.com/search?q=WIN+CGI+EXEC+APACHE&hl=ja&lr=lang_ja
0312名無しさん@お腹いっぱい。
01/09/24 19:34ID:AOw736z6アドバイスありがとうございます。
が・・・全くわかんないです。
簡単なプログラムのソース書いていただけないでしょうか?
お願いします。
0313名無しさん@お腹いっぱい。
01/09/24 19:49ID:???print "Content-type: text/html\n\n<html><h1>Hello";
↑ これhello.cgiで保存
<html><body><FORM method="post" action="./hello.cgi">
<input type=submit value="post実験"></FORM>
↑ これhello.htmlで保存
ボタン押しても、直接CGI開けても「Hello」が見えないと駄目
で、何が悪いかと言うと大体Apacheの設定が悪いかWINの設定が悪い
お小言言わせて貰うとさ、「一週間でCGI」←このタイトルからしてダメ
●HTMLが書ける。
●自宅で試すならHTTPDの設定が出来る。
●Perlのプリント文が書ける。
これ3つとも出来ないとまともに動かない、だから一つづつマッタリと
遊びながらやった方が簡単なんだよね。
だから、どかっっとソース貼られてもアドバイスのしようが無い
「結局ドキュメントルート見えてませんでしたっ」とかも良く有る
で上の感じだと多分HTTPDの設定が間違えてるっぽいから
googleのリンクで調べてちょってわけ
0314名無しさん@お腹いっぱい。
01/09/24 19:56ID:???>>311にソースが既に書いてあるのに、>>312見て愕然。
ちなみにスレ違いだったな。
http://corn.2ch.net/test/read.cgi?bbs=php&key=1000804655&ls=50
0315312
01/09/24 20:00ID:AOw736z6スマソ。漏れは下のほうに答えたんです。
パスワードを暗号化してクッキ〜に保存するソースを知りたいんです。
0316ほれ
01/09/24 20:15ID:???http://www.google.com/search?hl=ja&q=%83N%83b%83L%81%5B+%83G%83%93%83R%81%5B%83h&lr=lang_ja
0317315
01/09/24 20:31ID:AOw736z6ありがとうございます。
暗号化する方法はわかったんですが、どうやってクッキーの保存、読み出しと組み合わせればいいんですか?
0318もち米100%
01/09/24 20:44ID:???ありがとうございます、やっぱりお手軽なのはリネームになりますか。
ショッピングカートとかこんな感じのトランザクションをどうやって保証してるんだろう
例えば最悪のタイミングでSIG{TERM}投げられたらどうしようとか、
2chの�d�jはsubjectの書き換えで0バイト読み込みしちゃってると思うんですが
考え出すときりが無いですよね。
取り合えずム板の参考書スレを読み直してみます。 レス感謝〜
0319むぎ茶
01/09/24 20:55ID:???┐(´ー`)┌
┏━━━━━━━━━┓
┃('Д')y ─┛~~ ┃
┃むぎ茶 ┃
┃[email protected] ┃
┗━━━━━━━━━┛
0320名無しさん@お腹いっぱい。
01/09/24 21:18ID:???0321名無しさん@お腹いっぱい。
01/09/24 21:58ID:.PROECLArequire'jcode.pl';
&jcode'convert(*data,'sjis');
print"Content-type:text/html\n\n";
if($data eq "hehehe"){
print<<EOF;
<html>
<head>
<title>ビィンゴー!</title>
</head>
<body>
正解じゃい!!<BR>
文句あるんか?
EOF
}
print<<EOF;
間違ってる
</body>
</html>
EOF
exit;
というのを作りました。
間違ったパスを入れるとちゃんと動くのですが、正解を入れると
正解の文字と間違った時の文字の両方が出てきます。
何か間違ってますか?
0322名無しさん@お腹いっぱい。
01/09/24 22:07ID:???if(){}else{}を使おう。
条件分けというものを一から勉強しなおした方がいい。
0323322
01/09/24 22:14ID:???一応ヒント。
・正解の時にだけ出すHTML
・間違いの時にだけ出すHTML
・正解でも間違いでも必ず出すHTML
を自分で理解しよう。
間違ったパスを入れた時も、ちゃんとは動いてないぞ。
HTMLソースを見てみな。
0324名無しさん@お腹いっぱい。
01/09/24 23:52ID:???0325321
01/09/24 23:52ID:.PROECLAすいません。勉強しなおして解決することができました。
elseで解決しました。また1箇所構文が間違っていてそれも修正して
うまく動作するようになりました。
ありがとうございました。
0326名無しさん@お腹いっぱい。
01/09/25 16:02ID:rq8B7jsc質問しようと思いブラウザを開きましたが、やはり質問する前にもう一度見直してみようと思い
2時間掛けて見直したらどうにか直りました。
何度か見直していたのですがやはり見落としがありました。
どうでもいいことなのですが・・・
0327名無しさん@お腹いっぱい。
01/09/25 16:04ID:???0328名無しさん@お腹いっぱい。
01/09/25 16:13ID:???0329名無しさん@お腹いっぱい。
01/09/25 16:27ID:???0330名無しさん@お腹いっぱい。
01/09/25 16:28ID:???構文チェックしよう。
perl -wc hoge.pl
>>328
@files = map { $_->[0] } sort { $b->[1] <=> $a->[1] } map { [$_, (stat)[9]] } @files;
0331329
01/09/25 16:34ID:???0332名無しさん@お腹いっぱい。
01/09/25 16:40ID:???statを呼ぶ回数が多くなって効率が悪い?・・・
0333329
01/09/25 16:55ID:???use Benchmark;
timethese(96, {
'329' => \&prog329,
'330' => \&prog330,
} );
sub prog329 {
opendir(DIR, './');
my @files = readdir(DIR);
closedir(DIR);
@files = sort { (stat $a)[9] <=> (stat $b)[9] } @files;
}
sub prog330 {
opendir(DIR, './');
my @files = readdir(DIR);
closedir(DIR);
@files = map { $_->[0] } sort { $b->[1] <=> $a->[1] } map { [$_, (stat)[9]] } @files;
}
--------------------------------------------------------------------------------------------
Benchmark: timing 96 iterations of 329, 330...
329: 2 wallclock secs ( 1.54 usr + 0.51 sys = 2.05 CPU) @ 46.83/s (n=96)
330: 1 wallclock secs ( 0.56 usr + 0.17 sys = 0.73 CPU) @ 131.51/s (n=96)
結構差が出るな。
0334名無しさん@お腹いっぱい。
01/09/25 17:05ID:???CPU Pentium200MHz
RAM 224MB
HDD 知らん
OS Vine Linux 2.1
Perl 5.6.1
0335名無しさん@お腹いっぱい。
01/09/25 17:44ID:???このソート方法、良く見るんだけど未だに理解出来ない。。。
どっか解説してくれるサイトなあい?
0336名無しさん@お腹いっぱい。
01/09/25 17:51ID:???右から見ていけば分かりやすいかと。
0337名無しさん@お腹いっぱい。
01/09/25 17:56ID:vAuR/uTY0338名無しさん@お腹いっぱい。
01/09/25 17:57ID:zsF862DAと一緒でしょ。やってることは。
0339名無しさん@お腹いっぱい。
01/09/25 17:57ID:???0340名無しさん@お腹いっぱい。
01/09/25 17:59ID:???@files = sort { $ck{$b} <=> $ck{$a} } @files;
↑
こっちの方が早い
0341名無しさん@お腹いっぱい。
01/09/25 18:41ID:???まぁお好みで。
0342名無しさん@お腹いっぱい。
01/09/25 18:45ID:TUKvDv4A0343名無しさん@お腹いっぱい。
01/09/25 18:47ID:???環境による。
0344名無しさん@お腹いっぱい。
01/09/25 18:47ID:???自分で調べろ。
keys %ENV
0345名無しさん@お腹いっぱい。
01/09/25 18:49ID:???0346まげ
01/09/25 22:27ID:???自動チンコかきそふとを作ってください
0347名無しさん@お腹いっぱい。
01/09/25 23:27ID:???暫らくすると蟻が沢山寄ってくるのでそれをパンツに突っ込んで下さい。
上級者向けだけど・・・・頑張って!!
0348名無しさん@お腹いっぱい。
01/09/26 07:22ID:TfbH1r3A0349名無しさん@お腹いっぱい。
01/09/26 08:46ID:???自分で調べろ。
0350JAPU
01/09/26 09:12ID:???0351らくだ
01/09/26 15:40ID:???そういうときに簡単に関数の呼び、呼ばれリストが作成できるツールってないのかな?
0352名無しさん@お腹いっぱい。
01/09/26 15:46ID:???0353らくだ
01/09/26 15:55ID:???JavaのForteとかJbuilderみたいな。
0354名無しさん@お腹いっぱい。
01/09/26 17:11ID:???全文検索
0356名無しさん@お腹いっぱい。
01/09/26 17:15ID:???0357名無しさん
01/09/26 17:20ID:mymJ1qjA0358名無しさん@お腹いっぱい。
01/09/26 17:25ID:???まぁ必要だから聞いてるんじゃない?
つーか関数100個以上・・・・。
モジュールとかに分けろよ。
そっちがよっぽど厨房ゲフンゲフン
いやその前に関数多けりゃどうって話じゃねーだろ。
0359名無しさん@お腹いっぱい。
01/09/26 17:31ID:???馬鹿ばっかだな。
0360名無しさん@お腹いっぱい。
01/09/26 17:39ID:???0361名無しさん@お腹いっぱい。
01/09/26 17:40ID:???0362名無しさん@お腹いっぱい。
01/09/26 18:00ID:???0363らくだ
01/09/26 22:15ID:???モジュールでも共通度が高いと意味がない。
厨房SEはとりあえず黙って逝ってください。
あとgrepじゃ、全体が把握できないでしょ?
君は厨房UNIX使いだから逝っといてね。
0364名無しさん@お腹いっぱい。
01/09/26 22:18ID:SfAEbkLcプロファイラで代用するのは?
(1) hoge.plを実行してプロファイルtmon.outを作成
perl -d:Dprof hoge.pl
(2) tmon.outを解析して関数呼び出しのツリーを表示
dprofpp -t
ただし、あくまでもプロファイラの機能の一部なので、
実際に呼ばれた関数を記録して表示するだけ。
351の意図するところと多少違うとは思う。
0365名無しさん@お腹いっぱい。
01/09/26 22:32ID:???困った君だね。
0366名無しさん@お腹いっぱい。
01/09/26 22:41ID:???0367名無しさん@お腹いっぱい。
01/09/26 23:12ID:???0368当方へたれ
01/09/26 23:18ID:???http://www.bekknet.ad.jp/~bero/docj/module/03/index.html
関数呼び出しリストならPerlで書けそう。
へたれには無理だが。
つーか関数が把握できなくなるような設計はヘボだと思う。
strict使ったり,パッケージ分けやプロトタイプ宣言とか
スコープ狭くしたりすれば,あるていどはマシになるかと
0369名無しさん@お腹いっぱい。
01/09/27 01:01ID:wv3pEXiA0370名無しさん@お腹いっぱい。
01/09/27 01:14ID:???激しく同意。
>解答者を質問者が煽るというのが最近の流行りなのか?
らくだ氏は明らかに精神を病んでおられるので・・・・
0371名無しさん@お腹いっぱい。
01/09/27 02:55ID:Mu4f6YjEな書き方ができないのを今始めて知った。
なぜだ。何か問題があったのか。
03721
01/09/27 03:00ID:SujucJS2http://www.f2.dion.ne.jp/~impact14/
0373名無しさん@お腹いっぱい。
01/09/27 03:01ID:???forに修飾子はありません。
for修飾子が成立する時はforeachとして解釈されます。
よって()の中はリスト値でなければいけない、と。
0374371
01/09/27 03:27ID:Mu4f6YjEさんきゅう ふぉー ゆあ かいんどねす
そういえば、
print for(1..10);
みたいなことはできるんだよな。なるほど納得。
でも、senetense for(;;) で使ったときに、なんか不味いことでもあるんかなぁ。
見栄え上というか、他の意味と取り違えやすくなったりとか?
0375373
01/09/27 03:40ID:???修飾子の時は sentense for 1..10 みたいに書ける。
というか、自分は(1..10)みたくカッコ付けないです。
んで、(;;)の場合はカッコ無いと死んでしまう。
結局構文解釈上の問題なのかな?と。
# 多いに外している可能性があります。
# 識者の補足/説明希望。
0376名無しさん@お腹いっぱい。
01/09/27 14:58ID:199fgLMYActiveState社からVisual Perlが出ています。ただし有償ですけど。
ActivePerlは無償なんだけど、Debuggerは有償なんですね、ここ。
0377Perlあまちゅあ
01/09/27 15:34ID:n78xCnwcどうすれば良いのでしょう?
(例えば、コマンドラインで、パスワードを入力するときに、8文字なら8文字と決まっていて、
9文字目は入力しても、画面には表示されない。)
OS非依存が良いのですが、依存せざるを得ないのであれば、Win依存でお願いします。
(キーが押されたってことを検出できれば、それをループでまわせるとは思うんですが、
C言語のgetche や kbhitに相当するPerl関数がわからないんです。。とほほ。。。。)
厨な質問ですみません。(「CGIに依存しないPerlの話題一般」とのマルチポストでスンマソン)
0378名無しさん@お腹いっぱい。
01/09/27 15:43ID:???0379名無しさん@お腹いっぱい。
01/09/27 17:02ID:???そのまま掲示板に掲載することのできるCGIはありませんか?
0380名無しさん@お腹いっぱい。
01/09/27 17:14ID:???0381名無しさん@お腹いっぱい。
01/09/27 17:27ID:088OSBr6色々調べてみたのですが不明です。
0382むぎ茶
01/09/27 18:09ID:???┐(´ー`)┌
┏━━━━━━━━━┓
┃('Д')y ─┛~~ ┃
┃むぎ茶 ┃
┃[email protected] ┃
┗━━━━━━━━━┛
0383名無しさん@お腹いっぱい。
01/09/27 18:32ID:2d.Y65HwLWP::UserAgentを使ってPDA用中継サーバーを実験で作っています。
サーバーから送信されたcookieを受信して
$cookie_jar->save( $file );
でファイルに書き出すことはできたのですが
内容を要素毎に取り出す方法がよくわかりません。
要素毎に取り出してクライアントのブラウザに登録したいのですが
どのようにしたらいいのでしょうか?
初心者スレッドでする質問でもないような気がしますがほかに
いいスレッドがなかったのでここに質問しました。
0384Mr.ちん
01/09/27 18:43ID:Va6tTvlc質問があります。
CGI単体で指定フレームにリンクを飛ばせるものですか?
HTMLのMETAとか
Javascriptのlocationとかを吐き出させる方法以外で。
できるか、できないかだけでも教えてください。
宜しくお願いします。
0385名無しさん@お腹いっぱい。
01/09/27 19:00ID:???■ このスレッドは過去ログ倉庫に格納されています