Perlコーディング初心者質問スレ Part 44
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2005/10/17(月) 00:47:17ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0349nobodyさん
2005/11/03(木) 17:31:58ID:???if($cgi -> param(save)){
open(OUT,"> ./test.dat") || die;
$cgi -> save(OUT);
close(OUT);
}
このように,テキストエリアとチェックボックスのフォームデータを保存して,
別のcgiファイルで,読み込みをしています.
#フォームデータの読み込み
$file = "./test.dat";
open(IN,$file) if (-f $file);
$cgi = new CGI(IN);
close(IN);
テキストエリアはきちんと保存値が表示されたのですが,
チェックボックスが全て未チェックの状態になってしまいます.
なにかチェックボックスでは処理が必要なのでしょうか?
0350nobodyさん
2005/11/03(木) 17:50:23ID:???<input type="checkbox" name="hoge" value="hage" checked>
0351nobodyさん
2005/11/03(木) 17:51:21ID:???チェックボックスをチェックOn状態にするにはchecked属性が必要というのは理解してる?HTMLの話。
CGI側はvalueを複数受け取るけどね。
0352nobodyさん
2005/11/03(木) 17:54:36ID:???pirnt $保存値 eq '保存値'
? qq|<input type="checkbox" name="hoge" value="hage" checked>
: qq|<input type="checkbox" name="hoge" value="hage">|
;|
0353nobodyさん
2005/11/03(木) 17:56:14ID:???事故レスorz
pirnt $保存値 eq '保存値'
? qq|<input type="checkbox" name="hoge" value="hage" checked>|
: qq|<input type="checkbox" name="hoge" value="hage">|
;
0354nobodyさん
2005/11/03(木) 18:50:59ID:???0355nobodyさん
2005/11/03(木) 21:48:20ID:???そうやって,デフォルト値を操作して,チェックを入れた状態で表示するのではなく,
$cgi = new CGI (IN);
こうやって,ファイルを渡してあげて,保存値を反映したいのです.
テキストエリアではこの方法が上手く使えたのですが,
チェックボックスでは保存値が反映されなかったのです.
どうにかして,チェックボックスに保存値を反映したいのですが,どうすれば良いのでしょうか?
という趣旨でした.混乱させてもうしわけありませんでした.
0356nobodyさん
2005/11/03(木) 23:42:33ID:???ドキュメントを熟読して問題を切り分けよう。
http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod
1. フォームから送られてくるデータはプログラムに渡される時点で
コントロールの種別に関係なく name=value の形になっているので、
テキストエリアなら受け取れるがチェックボックスでは受け取れない
という事が起こるならそれはフォームの書き方かブラウザがおかしい。
2. save メソッドはドキュメントにあるように human readable な形で
書き出してくれるので、まず全てのデータが正常に受け取れ、且つ
書き出せているかを確認。更にファイルハンドルを渡して生成した
CGI オブジェクトが全ての保存値を読み込めているかを Vars メソッド
等で確認。ちなみに >>349 の読み込みコードはファイルの読込権限
が無いと open に失敗するのでエラーチェックになっていない。
3. 読み込んだデータは 1. と同じく名前と値のペアの集合でしかない
ので、保存値を反映したフォームを出力したいなら、それらを適切な
要素に当てはめ直す作業が必要。→ >>350-353
0357nobodyさん
2005/11/04(金) 01:23:13ID:???順を追って確認してみます.
特にVarsの使い方を教えていただき感謝いたします.
0358nobodyさん
2005/11/04(金) 10:40:02ID:???保存値はちゃんと渡せていましたが,チェックボックスの生成方法がオブジェクトを介さずに
CGI::checkbox と行っていたためでした.
みなさんほんとうに有り難うございました.
0359nobodyさん
2005/11/04(金) 18:07:49ID:???変数の後ろの文字列も含めて変数と解釈されてしまいます。
"${str}文字列"
"$str\文字列"
$str . "文字列"
などのようにエスケープなり逐一処理するしかないのでしょうか?
0361nobodyさん
2005/11/04(金) 22:23:15ID:???CPAN のエラーが出てモジュールを入れられなくてコマってます。
--01:20:02-- ftp://ftp.perl.org/pub/CPAN/authors/id/M/MS/MSCHWERN/CHECKSUMS.gz
(試行:18) => `-'
ftp.perl.org[163.143.1.21]:21 に接続しています... 接続しました。
anonymous としてログインしています...
サーバの応答にエラーがあるので、接続を終了します。
再試行しています。
こんなのがでて、ずっと先へ勧めません。
いった移動してよいやらこまってます。
FTPへ手動での接続はできているんですけど・・・
Convert::UUlib
Convert::TNEF
あたりも、みんな ftp/perl.org への接続で失敗してるようです。
どなたかお知恵を拝借できればと思います。
よろしくおねがいします。
0362nobodyさん
2005/11/04(金) 22:45:51ID:???http://www.ss.iij4u.or.jp/~somali/web/_ppm.html
0363nobodyさん
2005/11/05(土) 03:57:34ID:???文字列$commentがあって、
while($comment=~m//g){}を使って<tag>または</tag>を順々にマッチさせたいのです。
んでマッチしてから<tag>と</tag>のどちらがマッチ…
あ、わかった…$&で判定できるんですね…
鬱だ死のう
0364nobodyさん
2005/11/05(土) 04:13:08ID:???0365nobodyさん
2005/11/05(土) 04:14:32ID:???foreach( $comment =~ /<.*?>/g ){ print "tag = $_\n"; }
みたいに先にリストに展開するもよし
0366nobodyさん
2005/11/05(土) 23:49:03ID:???#保存ボタンが押されたらデータをファイルに保存する
if(($cgi -> param(add)) && ($cgi -> param(yomi)) && ($cgi -> param(kanji))){
open(OUT,">> $file") or die;
$kanji = $cgi -> param(kanji);
$yomi = $cgi -> param(yomi);
$data = "$kanji\t$yomi\n";
$cgi -> delete_all();
print OUT $data;
close(OUT);
}
param(add)には,submitボタンの値,yomiとkanjiにはテキストフィールドの値が入っています.
保存ボタンが押されるとちゃんと,ファイルにデータが追加されるのですが,
保存ボタンを押して,リロード(F5を押す)を行うと,データが繰り返し追加されてしまいます.
delete_all()して,Varsでもパラメータは消去されているのを確かめたのですが,
リロードすると,やはり値が繰り返し追加されてしまいます.
0367nobodyさん
2005/11/05(土) 23:53:00ID:???続き…
delete_allを行ったにもかかわらず,値が追加されるということは,どこかに値が保存されている
ということだと思いますが,それはどこにあるのでしょうか?
よろしくお願いします.
0368nobodyさん
2005/11/05(土) 23:56:09ID:???解決策はググルとたぶん見つかる
どっかで見た
0369nobodyさん
2005/11/06(日) 04:41:46ID:???0370nobodyさん
2005/11/06(日) 14:09:39ID:???$comment =~ s/<.*?>//gs;
これだけでは何か穴がありますか?
0372366
2005/11/06(日) 20:09:02ID:???以前のログを参照して,同じ投稿がないかチェックするようにして,二重投稿を防ぐようにして解決しました.
みなさんありがとうございました.
0373nobodyさん
2005/11/07(月) 11:47:17ID:92Mo7mCMDBI::Pg使用し、1度の接続で下記要件を満たすSQL文を教えて下さい。
SQLではなく、Perl+DBIのプログラミング方法で可能であれば、その方法を教えて下さい。
顧客テーブルと購入履歴テーブルがあります。
顧客一覧を出力する時に、顧客ごとに購入件数も表示したいです。
顧客一覧をwhile($hash= $sth->fetchrow_hashref){}で取得し、
whileの中でさらに、$hash->{hoge_no}から購入履歴をSELECTしたのですが、
うまくいきません。お願いします。
0374nobodyさん
2005/11/07(月) 12:30:03ID:???>>1
Perl::DBI
http://pc8.2ch.net/test/read.cgi/php/1015943725/
0375nobodyさん
2005/11/07(月) 12:36:56ID:???それよりこっちでしょ。SQL文一つでできるし。
0376nobodyさん
2005/11/07(月) 13:21:51ID:???Data::Dumperモジュールなどを使ってハッシュ内容をダンプしてみれ。
0377nobodyさん
2005/11/07(月) 21:52:51ID:ErqtfEJb画像の「横幅」を判別して設定値以上なら縮小
設定値以下ならそのまま表示というのをしたいです。
2:
if文で何とかなると思い、扱えるように勉強しましたが、
「画像の横幅を判別する」というのはどうやってやったらいいのか・・・。
ヒントだけでも構いません。宜しくおながいします。
0379nobodyさん
2005/11/07(月) 21:59:49ID:ErqtfEJb即レスどうも
と言うことはできるんですね。
勉強してきます。
0380nobodyさん
2005/11/07(月) 22:07:40ID:???0381nobodyさん
2005/11/07(月) 22:16:16ID:???0382nobodyさん
2005/11/07(月) 22:22:21ID:???横幅取得くらいなら自前コーディングで十分。
0383nobodyさん
2005/11/07(月) 23:54:29ID:???0387nobodyさん
2005/11/09(水) 07:29:42ID:???すごい久し振りにCGIをうPしたら、まったく忘れていたらしくエラーが出てしまいます。
しょうがないので、初心に返ってhello perlを出力しようとしたら、これもエラーです。
むかついたので、別に契約してあるプロバイダにCGIチェッカがついてるので
うPして何がおかしいか調べたら、
ファイルの先頭が
#!/bin/perl
#!/usr/bin/perl
#!/usr/local/bin/perl
でないか、CGI プログラムが ASCII モードで転送されていません
だそうです。????
ちなみにソースは
#!/usr/bin/perl
# HTML表示
print "Content-Type: text/html\n\n";
print "<HTML><HEAD>\n";
print "<BODY>\n";
print "Hello Perl World!\n";
print "</BODY>\n";
print "</HTML>\n";
ASCII モードになってないんですかね?
秀丸でファイル名:hoge.cgi ファイルの種類:その他 文字コード:自動選択
で保存したものです。何年ぶりかなので何か忘れてるのかもしれません。
ど素人で済みませんがお願いします。
0388387
2005/11/09(水) 07:30:43ID:VFhSh5VA0390387
2005/11/09(水) 08:05:29ID:5otQfz0T0391387
2005/11/09(水) 08:16:09ID:5otQfz0Twakwakの解析が逝かれてるのですかね?
0392nobodyさん
2005/11/09(水) 08:53:46ID:???0393nobodyさん
2005/11/09(水) 09:06:00ID:BFWlWPsiがエラーです。
多分正規表現の指定がおかしいと思います。
0394nobodyさん
2005/11/09(水) 09:29:22ID:???正規表現なら
@imglist = grep /\.jpg$/, readdir DIR;
ワイルドカード使おうとしてるところを見るとこのへんと混同してるのかも
@imglist = glob("*.jpg");
@imglist = <*.jpg>;
0395nobodyさん
2005/11/09(水) 11:29:02ID:???ちゃんとASCIIモードで転送しているのか?
ファイルの先頭に変なバイナリが付いていないかバイナリエディタ等で確認したのか?(UTF-8保存とかね)
0396nobodyさん
2005/11/09(水) 11:51:52ID:???> ファイルの先頭が
> #!/bin/perl
> #!/usr/bin/perl
> #!/usr/local/bin/perl
> でないか、
このメッセージは、列挙された3つの行のうち好きなものを書けば
いい、という意味ではなく、サーバに対して指定された、何れか一つの行を
書かなきゃだめ、ということだと思うが。
#!/usr/bin/perl
は本当に正しいのかな?
0397nobodyさん
2005/11/09(水) 18:03:19ID:???ttp://www.wakwak.com/info/connection-setup/ftp/custom-cgi.html
0398nobodyさん
2005/11/09(水) 18:24:22ID:???ASCIIモードかどうかは、文字コードとかの問題じゃなくて
FTP転送の問題ジャマイカ?
ていうかここまで来るともはやスレ違い。
0400nobodyさん
2005/11/10(木) 00:00:36ID:???PHPでNet_DNSBLを使っていて、PerlでもDNSBLチェックをしたいです。
0401nobodyさん
2005/11/10(木) 01:43:05ID:???こんなんとか。
http://search.cpan.org/~tjmather/Net-DNSBLLookup-0.03/lib/Net/DNSBLLookup.pm
0402nobodyさん
2005/11/10(木) 03:41:03ID:???入れました
0403387
2005/11/10(木) 06:37:47ID:XPue5Djf色々ありがとう。
とりあえず
>>389で、ロリポは動きました。
で、>>395御指摘のutf-8でwakwakも逝けました。
解決できました。
>>396
>サーバに対して指定された、何れか一つの行を
>書かなきゃだめ、ということだと思うが。
そうみたいですね。
#!/usr/bin/perlはダメで、#!/usr/local/bin/perlはいけました。
>>397のリンクで
>スクリプト先頭行には #!/usr/local/bin/perl と記述して下さい。
と書いてありました。
でもあの書き方ではわかんないですよ。僕だけですかね・・・
>FTP転送の問題
でなくてよかったです。
とにかく、supecial thnxです。
0404nobodyさん
2005/11/10(木) 06:43:00ID:???>でもあの書き方ではわかんないですよ。僕だけですかね・・・
おまいだけ。あと「supecial thnx」は恥ずかしいからやめておけ。
0406nobodyさん
2005/11/10(木) 10:11:45ID:???0407nobodyさん
2005/11/10(木) 10:52:53ID:CqV/pVhDビルダーとかみたいな
0408nobodyさん
2005/11/10(木) 11:38:03ID:???Perl書くのにどんなエディタ使ってる?
http://pc8.2ch.net/test/read.cgi/php/1014357485/
0409nobodyさん
2005/11/10(木) 22:41:58ID:???現在フォームメールを作っているのですが、どうもうまくいきません。
スクリプトの流れとしては、
(サブルーチンA)フォームデータの取り込み、デコード、データをハッシュ(%FORM)に代入。
ハッシュのデータをソートしてメールボディー用の変数($body。もちろんグローバル変数)へ代入。
↓
(メインルーチン)送信ボタンが押されたかチェック。
押されたら送信用のサブルーチンへ。
↓
(サブルーチンB)確認ページの表示。ハッシュのデータをソートして表示。
なのですが、確認ページで送信ボタン(キー名はsubmit)を押すとハッシュの中身はsubmitだけになってしまうし、$bodyはどこかへ消えてしまうし、どうにもさっぱりです。
どなたか導いてください。宜しくお願いします。
0410nobodyさん
2005/11/10(木) 22:44:24ID:???0412nobodyさん
2005/11/10(木) 23:53:03ID:???0413nobodyさん
2005/11/11(金) 00:15:11ID:???サブルーチンとか言ってるけど、ページの遷移はないってこと?
0415nobodyさん
2005/11/11(金) 08:59:41ID:???0416nobodyさん
2005/11/11(金) 18:22:32ID:???Perlでテキストファイルから1行ずつ読み込んで処理する時には
while(<>){}
で済みますが、
既に変数に入っているテキストを1行ずつ処理する場合、どうしたらよいのでしょうか?
0417nobodyさん
2005/11/11(金) 19:03:57ID:???0418nobodyさん
2005/11/11(金) 19:15:49ID:???テキストの内容がでかいとでかい配列ができちゃうのがイヤだけど、
foreach my $line (split(/^/, $txt)) {
# $line に何かする
}
0419nobodyさん
2005/11/11(金) 19:18:47ID:???レスありがとうございます。
>>418
すいません。splitの/^/というのは??
この場合の^は行頭を表す^ですか?
0422nobodyさん
2005/11/11(金) 20:30:27ID:???とかでも
0424nobodyさん
2005/11/11(金) 22:14:13ID:???ありがとうございます。
だいたいどんな事をやっているのか理解するのに
しばらくかかりました。^^;
オプションを使いこなせると便利になりそうですね。
0425nobodyさん
2005/11/11(金) 23:15:24ID:???原因は何でしょうか?
0426nobodyさん
2005/11/11(金) 23:23:21ID:???0427nobodyさん
2005/11/13(日) 16:57:21ID:???これを使ってBasic認証通過させたいんですが
鯖側の$realmが日本語になってるせい?なのか失敗します
アドバイスお願いします。。
0429nobodyさん
2005/11/13(日) 22:03:50ID:???文字コードがわからなければLWP::UserAgentのget_basic_credentialsを再定義して
$realmになに渡ってきてるのか調べてあわせてやればいいと思うよ。
0431nobodyさん
2005/11/14(月) 11:00:01ID:W63Ukjvmopen関数を使用して、UTF-8でテキストファイルに出力したいのですが
その方法がよくわからず困っています。
フォームから取得した変数はSHIFT_JISなので、
そのままopen関数で出力すると、テキストファイルの文字コードは
SHIFT_JISになってしまいます。
どなたか知っておられる方がいましたら、よろしくお願いします。
0433nobodyさん
2005/11/14(月) 17:51:10ID:WMignAMjつまり、やりたいことは、配列をランダムに並び替えることです。
0434nobodyさん
2005/11/14(月) 18:03:25ID:???http://boobar.hp.infoseek.co.jp/bench/randlist.txt
0435nobodyさん
2005/11/14(月) 18:12:42ID:???パフォーマンスなんて問題になってから考えれば良い。
気になるならそもそも Perl なんか使わんし。
0436nobodyさん
2005/11/14(月) 18:39:21ID:3zfzQPqEDLPass:1234
windowsでActivePerl5.8を使っています。
IO::Socketを使い、コンソールでのチャットを作ろうと思っています。
現在は、サーバー側はechoserverのプログラムを、
クライアント側にはプロセスを受信・送信に分けたものを使おうと思っています。
実行すると文字は入力できるのですが、うまくserver側にデータが行かないようです。
たぶん原因はclient側なんですが・・。
煮詰まってしまいました。。ヒントお願いします(つд⊂)
0437nobodyさん
2005/11/14(月) 19:04:07ID:???■こんなCGI作ってください■
http://pc8.2ch.net/test/read.cgi/php/1102980903/
0438436
2005/11/14(月) 21:57:56ID:3zfzQPqEどんな本やwebページがオススメですか?
0440nobodyさん
2005/11/14(月) 22:09:16ID:???0442436
2005/11/14(月) 22:23:16ID:3zfzQPqEラクダもドキュメントも読んだけどよくわかんね^^;
神はー神はいないのかー>w<;
0443nobodyさん
2005/11/14(月) 22:33:57ID:???0444436
2005/11/14(月) 22:59:47ID:3zfzQPqE0445nobodyさん
2005/11/14(月) 23:09:56ID:???ラクダもドキュメントも読んだのに分からないのなら、Socket や
ターミナルを扱う為の基本的な知識が君には欠けている。
そしてその解説はこのスレの範疇ではない。
0446436
2005/11/14(月) 23:20:04ID:3zfzQPqE出直してきます。
0447nobodyさん
2005/11/15(火) 00:24:28ID:???0448nobodyさん
2005/11/15(火) 13:35:44ID:???■ このスレッドは過去ログ倉庫に格納されています