Perlコーディング初心者質問スレ Part 46
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/01/18(水) 02:17:46ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0052nobodyさん
2006/01/19(木) 19:49:36ID:???005651
2006/01/19(木) 20:29:28ID:???ご返答有難うございます。
私の中ではSocketが通常のPOST送信方法になっていたので、「普通にHTTP通信で
POST送信」というものがその他のやり方で一般的なものがあると受け止めました。
Perlで他に一般的なやり方があるのでしょうか。
hiddenは使わないとおっしゃってたので、あくまでもPerl側だと思います。
尚、同名メソッド等はございません。
>>54さん
ご返答有難うございます。
偉い人はグループ内の別会社の方で関係が関係ですのでどうしても気軽に聞けません。
そのときに踏み入って聞けなかった自分に反省しております。
>>55さん
ご返答有難うございます。
エスパーだと思われてしまったのでしょうかね。。
納期が近いので逃避と闘っております。。
0057nobodyさん
2006/01/19(木) 20:58:15ID:???> Perlで他に一般的なやり方があるのでしょうか。
perl でなくとも、ふつーは HTTP 関係のライブラリ使うもんだよ。
その仕事向いてないから、転職をお勧めする。
地面の穴掘ってる方がずっと楽だと思われ。
0058nobodyさん
2006/01/19(木) 21:08:03ID:???ワロタwww
005942
2006/01/19(木) 23:24:03ID:???やはり、GATEWAY_INTERFACEやREQUEST_METHODのようなCGIで起動された時に
必ず設定される値で判断するしかないようですね。
(念のためdefinedでチェックしますが、設定されないことってないですよね?)
本当なら環境別にI/Fを分けたかったのですが、それだと呼出し元を全て
変更しなければならず、あまり時間をかけるわけにも行かないので
今回はこの方法で対処したいと思います。
ご回答下さった皆様、本当にありがとうございました。
また何かありましたら、よろしくお願い致します。
0060nobodyさん
2006/01/19(木) 23:29:14ID:???> (念のためdefinedでチェックしますが、設定されないことってないですよね?)
2ちゃんで人に聞かないと出来ないような仕事なら、その仕事やめればいいじゃん。
0062nobodyさん
2006/01/20(金) 00:02:24ID:???0063nobodyさん
2006/01/20(金) 00:04:00ID:???0064nobodyさん
2006/01/20(金) 01:32:35ID:???0066nobodyさん
2006/01/20(金) 02:43:55ID:???0067nobodyさん
2006/01/20(金) 02:46:05ID:f2sVrFSn変数をメモリに格納するときに
$template->param(AAA => ['BBB','CCC','DDD']);
ってやって、テンプレートで参照するときって、
いちいちLOOPでまわさないとダメなの?
phpのsmaryみたいな感じで、
<TMPL_VAR NAME=AAA.[0]>
てな感じで使えると楽なんですけど。
ドキュメント読んだ限りでは見つけられませんでした。
なんかLOOP使わなくていい楽な方法ありましたら教えてください。
よろしくお願いします。
0068nobodyさん
2006/01/20(金) 02:54:20ID:???なんと申しますか、不快にさせてしまいすみませんでした。
まだ1年目なのでもう少し続けさせていただきます。
ご返答有難うございました。
0069nobodyさん
2006/01/20(金) 03:26:25ID:???JAPUたんが頻繁に居た、ん年前はよかったなー。
0070nobodyさん
2006/01/20(金) 03:28:21ID:???まだ具体的なライブラリの名前が出てないから答えておこう
HTTP::Request+LWPで簡単に出来るよ
ttp://homepage3.nifty.com/hippo2000/perltips/LWP.html
ttp://homepage3.nifty.com/hippo2000/perltips/HTTP/Request.html
ファイルを送ったり複雑なリクエストを組むならHTTP::Request::Commonも併用
ttp://homepage3.nifty.com/hippo2000/perltips/HTTP/Request/Common.html
# Larry氏が言うプログラマの三大美徳の「Laziness」ってやっぱり大事だなぁ
0071nobodyさん
2006/01/20(金) 03:58:40ID:???不可能。所詮、簡易テンプレートなので、凝ったことしたければ TT 使うのが吉。
添字付きでアクセスするぐらいなら、
$template->param(AAA => ['CCC','DDD']);
$template->param(FOO => 'BBB');
した方がいいと思うよ。
>>69
そう思うんなら自分で答えれば?俺は逆に、質問者を諫めたりしないのは嫌いだったがね。
何でもありになってしまったら、長い目で見たら質問する人間にとっても損だよ。
答える人間がいなくなるからな。
0072nobodyさん
2006/01/20(金) 08:03:07ID:???007567
2006/01/20(金) 11:59:43ID:+eNmO4sVとりあえずはできないということで諦めます。
あまり時間もないので、1度だけLOOPするかたちでしのぎます。
最近はPHPばかりで、ひさびさにPerlやってるんですが、
フレームワークやテンプレートエンジンとか
良さげのありますか? PHPは少しずつ充実してきてますよね。
ちょっとすれ違いなので、ぱっと挙げて頂ければ
自分で調べてみますので、よろしくお願いします。
0076nobodyさん
2006/01/20(金) 12:24:40ID:???>良さげのありますか?
>>71がTTと言っているが読んでないのか?こういう奴がいるからスレが荒れるんじゃないのか。
0077nobodyさん
2006/01/20(金) 12:27:13ID:2Gzq7A/g0078nobodyさん
2006/01/20(金) 17:16:58ID:???親プロセスは戻ってブラウザを開放するということはできないのでしょうか?
Web上で調べたところ、Apache1.3ではできたけど、2.0ではできなくなったとの記述を見かけました。
また、 http://mm.apache.or.jp/pipermail/apache-users/2003-November/003533.html このような
記事も見つけたのですが、自分の環境では子が終了するまで待たされてしまいました。
もしブラウザを開放する方法がありましたら、ご教授願います。
0079nobodyさん
2006/01/20(金) 17:20:29ID:???0080nobodyさん
2006/01/20(金) 17:26:00ID:???こちらに投稿したのですが、スレ違いだったでしょうか?
0081nobodyさん
2006/01/20(金) 18:08:10ID:???Perl に限った話じゃないからね。
Apache〜嗜みとして〜 Part3
http://pc8.2ch.net/test/read.cgi/php/1043851302/
CGI: Common Gateway Interface part 13
http://pc8.2ch.net/test/read.cgi/php/1126436361/
0083nobodyさん
2006/01/20(金) 21:41:40ID:???0084nobodyさん
2006/01/20(金) 22:01:24ID:???0085nobodyさん
2006/01/20(金) 22:18:00ID:???確かに問題の本質はApacheの動作についてだと思います。
しかし、求めているのは「Perlに限って」の解決法であり、ApacheやCGIのスレにいっても
特定の言語についての質問だと言われそうなので、こちらで質問した次第です。
>>82
別に動的なコンテンツを作ろうとしてるわけではないので、Ajaxは少々大げさな気がします。
RSSを複数のサイトから読み込んで、それぞれの最新のものだけを抽出し、更新時間順に
表示する、というスクリプトを作っているのですが、データの処理待ち時間が結構あるのです。
そこで、「データ処理の間お待ちください」といった感じの文を親で表示してからブラウザを開放し
子で処理が終わったら結果を表示、という感じにしたいのです。
スクリプトの本筋とは関係のない、見た目の部分だけのことなので、できないならできないで
一向に構わないのですが、もし方法があるなら…、といった感じです。
0086nobodyさん
2006/01/20(金) 22:30:38ID:???処理をやって、CGI は結果だけを出すべき。
0088nobodyさん
2006/01/20(金) 23:09:53ID:???RSS読み込み だけ ならAjaxのサンプルで語れるレベル。スレ違いスマソ。
ttp://allabout.co.jp/career/javascript/closeup/CU20050531A/index.htm
0089nobodyさん
2006/01/20(金) 23:21:49ID:???頭がまわらないんだろう。
そもそもクライアントの環境依存度高すぎ。
ああ。WebPr(ry)だからね
まあなんでそういう仕様変更があったのか知らないけど、
逆に正当な理由のある仕様変更があった上で言語依存の回避方法が発見されたら
それはそれでセキュリティホールかなんかの部類に入るのでは?
0090nobodyさん
2006/01/20(金) 23:43:25ID:???同意。
>>87
想像してごらん。
・100人の人が同時に利用する。
・リロードしまくる人がいる。
・読み込む複数のサイトが100サイトぐらいあったりする。
・鯖落ちしているサイトの反応待ちに3秒程度取られる。
キャッシュしたりして、ある程度対策は取れるけど、
最初からcron等の別プロセスで収集させれば、問題解決。
0091nobodyさん
2006/01/21(土) 00:19:27ID:???0093sage
2006/01/21(土) 03:23:01ID:pqXier510094nobodyさん
2006/01/21(土) 04:28:56ID:???http://pc8.2ch.net/test/read.cgi/php/1060009605/
おまいらついにきましたよ
0096nobodyさん
2006/01/21(土) 10:55:15ID:???STDINに対してseekは無理なんでしょうか?
0098nobodyさん
2006/01/21(土) 12:14:39ID:???ん〜、組みなおそうorz
009978
2006/01/21(土) 20:08:40ID:???だと思いました。が、残念ながら今使ってる鯖ではcronは使用できませんでした。
そこで、画像として出力されるCGIをHTMLに仕込んで、アクセスをトリガーにそのCGIを起動し
そこからexecで処理スクリプトを起動するという方法を試してみました。
execはそこで現在のスクリプトを終了して次に飛ぶということなので、そこでブラウザが
開放されるかと思ったのですが、execから呼び出したスクリプトが処理を終えるまで読み込みが
続いてしまいました。
しかし、画像に見せかけたCGIをHTMLの一番最後に持ってくれば、空白画面のままブラウザが固まる
のは回避できるので、とりあえずこれでよしとすることにします。
みなさん、いろいろとアドバイスありがとうございました。
0100nobodyさん
2006/01/21(土) 21:33:57ID:???アクセスしてあげればいいんじゃね?
0101nobodyさん
2006/01/21(土) 22:04:27ID:???0103nobodyさん
2006/01/21(土) 22:43:48ID:???自鯖たててやるくらいなら、さくらのスタンダードでも借りた方が簡単そう。
電気代もかからんし、鯖管理しなくていいし。
0104nobodyさん
2006/01/21(土) 22:48:13ID:???0106nobodyさん
2006/01/21(土) 23:13:32ID:???0107nobodyさん
2006/01/21(土) 23:21:10ID:???0108nobodyさん
2006/01/21(土) 23:25:38ID:???0109nobodyさん
2006/01/21(土) 23:26:11ID:???0110nobodyさん
2006/01/21(土) 23:35:50ID:???国語大丈夫か?
0111nobodyさん
2006/01/21(土) 23:54:13ID:???わざとの人も多いから、なんか恥ずかしいアルネ。
0112nobodyさん
2006/01/22(日) 00:08:00ID:???0114nobodyさん
2006/01/22(日) 00:57:39ID:???0115nobodyさん
2006/01/22(日) 01:26:49ID:???検索のところは、plファイル内で
#$valueはフォームから受け取った文字列
if($data =~ /$value/m){
print "$data";
}
として、検索文字列にカタカナを指定した場合はエラーになってしまうのですが何ででしょうか?
0116nobodyさん
2006/01/22(日) 01:37:04ID:???これらのことはPERLで可能ですか?
PERLでプログラムを作って条件にあわせて、メールアドレス宛に
いってほしいURLを生成して送ります。
↓
そのメールが送ってきた人がそのURLをクリックして、リンク先にいくと
結果が載っていて、その結果は多数のHTMLのページをスタイルシートを利用して
1ページにまとめて組み合わせたものになっている。
というようなことは出来ますか?
簡単に言えば、
ページ1で山田さんがAとBとCの中からAを選び、DとEとFの中からEを選びます。
↓
すると、山田さん宛にAとEの内容が記述されたページのURLが届きます。
↓
そのURL先のページもcgiによって生成される(メールからAとEの変数を渡すことになるのかな?)
↓
その表示されたページは複数のHTMLページをあらかじめ作っておいて、それらを呼び出して、組み合わせで出来上がる。この場合AとEを呼び出す
0117116
2006/01/22(日) 01:38:53ID:???あらかじめHTMLページを用意しておいて、変数にしたいところのタグだけ $HOGEHOGE のようにしておいて、
cgiのほうに読み込み、$HOGEHOGEの変数の値を適用させて表示することって可能ですか?
0118nobodyさん
2006/01/22(日) 01:42:24ID:???>そのメールが送ってきた人がそのURLをクリックして、
ちゃんとした日本語文で書いてくれ
0119116
2006/01/22(日) 01:42:52ID:???の部分ですが、URLから判定させること出来ないですか?
その行き先のURLは一律で http://www.hogehogehoge.com/hoge.cgi というように決まっていて
hoge.cgi以降にAとEが表示されるように
http://www.hogehogehoge.com/hoge.cgi?A&E
みたいなURLを先ほど記述したメールで送っていて、これをクリックすると
hoge.cgiがAのhtmlとEのhtmlを組み合わせればいいということを判定して
これらをスタイルシートを使って組み合わせて1ページで出力するということです。
説明が分かりづらくてごめんなさい。
0122nobodyさん
2006/01/22(日) 02:12:52ID:???''(0バイト文字列)または'.'または'..'と言う文字列に「のみ」
合致する正規表現ってどう書けばいいですか?
「〜を含む文字列」なら自力でも書けそうな気がするんですが・・・orz
0126nobodyさん
2006/01/22(日) 02:49:48ID:???Perl 以前の問題
逆に聞きたいが、「スタイルシートを使ってページを組み合わせる」と自分で
書いているが、これは XSLT か? 「スタイルシートを使って組み合わせる」
という方法はいったいどこで聞きかじったんだ?
0128nobodyさん
2006/01/22(日) 03:59:08ID:???0130nobodyさん
2006/01/22(日) 06:28:00ID:???・htmlのselectでも使って選択させ、その内容をcgiに発射
↓
すると、山田さん宛にAとEの内容が記述されたページのURLが届きます。
・cgiで受け取った情報を元にURL作ってsendmailかなんかでメール発射
↓
そのURL先のページもcgiによって生成される(メールからAとEの変数を渡すことになるのかな?)
・受け取ったURLを押すとcgiが起動
↓
その表示されたページは複数のHTMLページをあらかじめ作っておいて、それ
AとEのhtmlを読み込み”s/$HOGEHOGE/なにか/g;”かなんかで変更して一緒に表示
単純すぎて説明しずらいorz
てか、ほんとにperlできるの?
0132nobodyさん
2006/01/22(日) 07:45:24ID:???1) 山田が hoge.cgi?select1=A&select2=E で発射
2) piyo.cgi?para=A、piyo.cgi?para=E というURL付メールが届く
3) piyo.cgi?para=A、piyo.cgi?para=E が加工したページを表示
簡単にPerlで実現できると思うのだが。
0133nobodyさん
2006/01/22(日) 08:12:49ID:???どこが解らないか言ってもらえれば詳しく解説したり、
モジュールを薦めたりいろいろやりようもあるんだがねぇ
# >>130の最後の一文を「ほんとにperlでできるの?」と読んで
# 130にレスを返そうとしてしまった件...アブナカッタ
0134nobodyさん
2006/01/22(日) 08:15:06ID:???1) 山田が hoge.cgi?select1=A&select2=E で発射
2) piyo.cgi?para=AE というURL付メールが届く
3) piyo.cgi?para=AE が加工したページを表示
だろ
piyo.cgi?para1=A¶2=E でもいいけど。
0135nobodyさん
2006/01/22(日) 08:17:25ID:???&amp;って書かないと駄目なのか
験し→&
0138nobodyさん
2006/01/22(日) 09:43:12ID:???0139nobodyさん
2006/01/22(日) 10:52:36ID:???それぞれの処理を Perl のどの機能を利用して実現したらいいのか
具体的なイメージが湧いていないように見える。慌てずに一つずつ
自分で対処してくれ。他にもいろいろ書かれているが、個々の処理は
どれも難しくないが、>>117 を読む限り、目的の処理全体を実現
するには君の力はまだかなり足りない。
0140nobodyさん
2006/01/22(日) 12:37:05ID:???例えば、passwdコマンドにパスワードを渡してその結果を得るにはどうすればいいのでしょう。
渡すだけならばopen(PASS,"| /usr/bin/passwd")で出力用パイプでできるのですが、
これだと結果を変数へ受け取れません。
試しに入力と出力のパイプを二つつけてみましたが、
Can't open bidirectional pipe
と言われてしまいました…。
0142nobodyさん
2006/01/22(日) 12:45:31ID:???ここはpasswdが、受け取るべき値を返すものと仮定してください…。
実際にやろうとしているコマンドはCourier-IMAPのuserdbpwです。
0143nobodyさん
2006/01/22(日) 12:47:03ID:???は…速い。
それですと値を渡せないと思います。
こちらから値を渡して、なおかつその結果を受け取りたいと思っています。
0144nobodyさん
2006/01/22(日) 12:53:47ID:???PIPEを入力と出力両方開くだけならこれ
http://search.cpan.org/~abergman/ponie-2/perl/lib/IPC/Open2.pm
しかしpasswdのような特殊な入力方式を使っているものでできるかは知らない…
0145nobodyさん
2006/01/22(日) 13:16:41ID:???おお、これでできそうな気がしますが…、すごいサイズのモジュールですね。
configureだけしてみましたが、大量のファイルを呼んでいる上に
なぜだかすごいWARNINGができるのちょっと入れるをの躊躇してしまいます…。
もう少し他の方法を探ってみます。
どうもありがとうございました。
0146nobodyさん
2006/01/22(日) 13:26:12ID:???あ、貼ったリンクのURLが悪かった、スマソ
IPC::Open2とIPC::Open3は標準モジュールだよん
0147nobodyさん
2006/01/22(日) 13:47:43ID:???おかげさまで何とかできました。
ただWriter->autoflush(1)とするとなぜか
Can't locate object method "autoflush" via package "IO::Handle"
といわれることや、closeしなくていいのか、という疑問がありますが、
自分で使う用のスクリプトなので、とりあえず今は目をつむることにします。
とても助かりました。
どうもありがとうざいました。
0149nobodyさん
2006/01/22(日) 14:33:51ID:???(゚Д゚)
0150116
2006/01/22(日) 15:08:15ID:???==========================================================================================================
HTMLページ(select使って変数発射)→hoge.cgiが条件などがURLを生成してメール送信→URLのpiyo.cgi?PARA=AEにAとEの
両方のページがインラインフレームを使って表示される。
==========================================================================================================
・htmlのselectでも使って選択させ、その内容をcgiに発射
↓
すると、山田さん宛にAとEの内容が記述されたページのURLが届きます。
・cgiで受け取った情報を元にURL作ってsendmailかなんかでメール発射
↓
そのURL先のページもcgiによって生成される(メールからAとEの変数を渡すことになるのかな?)
---------ここまでの過程はすべて自分でプログラムできます------------
分からないのは、ここからで、どのような処理を施せば、hoge.cgiが
・メール受け取ったURLをクリックするとpiyo.cgiが起動
↓
その表示されたページは複数のHTMLページをあらかじめ作っておいて、それ
AとEのhtmlを読み込む。
これですね。piyo.cgiが URLの piyo.cgi? 以降をどのような処理で読み込んで
AとEを合わせて表示しろ っていう処理の方法が分からなくて困っています。
0151150
2006/01/22(日) 15:13:29ID:???HTMLページ(select使って変数発射)→hoge.cgiが条件などからURLを生成してメール送信→URLのpiyo.cgi?PARA=AEにAとEの
両方のページがインラインフレームを使って表示される。 ^^^^
==========================================================================================================
訂正です。 条件など「から」 でした。すいません
■ このスレッドは過去ログ倉庫に格納されています