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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2005/10/17(月) 00:47:17ID:???
Perlのコーディングで困ってる人のスレです。

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

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

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

過去ログやお勧めサイトは >>2-10
0362nobodyさん2005/11/04(金) 22:45:51ID:???
>>361
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:???
$&使うもよし、()でキャプチャして$1で読むもよし
foreach( $comment =~ /<.*?>/g ){ print "tag = $_\n"; }
みたいに先にリストに展開するもよし
0366nobodyさん2005/11/05(土) 23:49:03ID:???
たびたびの質問をお許し下さい.CGI.pmを使ってCGIを作成しています.

#保存ボタンが押されたらデータをファイルに保存する
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;

これだけでは何か穴がありますか?
0371nobodyさん2005/11/06(日) 15:24:52ID:???
>>370
モジュール使えば?
03723662005/11/06(日) 20:09:02ID:???
ブラウザの機能だったんですね.てっきり自分のコードにミスがあるかと思っていました.
以前のログを参照して,同じ投稿がないかチェックするようにして,二重投稿を防ぐようにして解決しました.

みなさんありがとうございました.
0373nobodyさん2005/11/07(月) 11:47:17ID:92Mo7mCM
DBI初心者なのですが、Perl+PostgreSQLでWebアプリを作っています。
DBI::Pg使用し、1度の接続で下記要件を満たすSQL文を教えて下さい。
SQLではなく、Perl+DBIのプログラミング方法で可能であれば、その方法を教えて下さい。

顧客テーブルと購入履歴テーブルがあります。
顧客一覧を出力する時に、顧客ごとに購入件数も表示したいです。

顧客一覧をwhile($hash= $sth->fetchrow_hashref){}で取得し、
whileの中でさらに、$hash->{hoge_no}から購入履歴をSELECTしたのですが、
うまくいきません。お願いします。
0374nobodyさん2005/11/07(月) 12:30:03ID:???
>>373
>>1

Perl::DBI
http://pc8.2ch.net/test/read.cgi/php/1015943725/
0375nobodyさん2005/11/07(月) 12:36:56ID:???
http://pc8.2ch.net/db/

それよりこっちでしょ。SQL文一つでできるし。
0376nobodyさん2005/11/07(月) 13:21:51ID:???
SQLでコケてるのか、ハッシュを見る段階でコケてるのか、切り分けができてない。
Data::Dumperモジュールなどを使ってハッシュ内容をダンプしてみれ。
0377nobodyさん2005/11/07(月) 21:52:51ID:ErqtfEJb
1:
画像の「横幅」を判別して設定値以上なら縮小
設定値以下ならそのまま表示というのをしたいです。

2:
if文で何とかなると思い、扱えるように勉強しましたが、
「画像の横幅を判別する」というのはどうやってやったらいいのか・・・。

ヒントだけでも構いません。宜しくおながいします。
0378nobodyさん2005/11/07(月) 21:57:05ID:???
>>377
>>1
0379nobodyさん2005/11/07(月) 21:59:49ID:ErqtfEJb
>>378
即レスどうも
と言うことはできるんですね。
勉強してきます。
0380nobodyさん2005/11/07(月) 22:07:40ID:???
ImageMagic ってすごいよね?
0381nobodyさん2005/11/07(月) 22:16:16ID:???
鯖負担すごいね
0382nobodyさん2005/11/07(月) 22:22:21ID:???
GIFは先頭から7,8バイト目が横幅。BMPなら19〜22バイト目。PNGなら17〜20バイト目。JPGはちょいと面倒だから割愛。
横幅取得くらいなら自前コーディングで十分。
0383nobodyさん2005/11/07(月) 23:54:29ID:???
GDに比べてGIFが遅すぎ
0384nobodyさん2005/11/08(火) 01:03:07ID:???
>>383
GIF てw
0385nobodyさん2005/11/08(火) 02:46:44ID:???
>>377
サイズだけ取得するのならImage::Sizeでも。
0386nobodyさん2005/11/08(火) 07:56:18ID:???
>>384
DoCoMo用にGIFで吐かなきゃならんのだ。
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 ファイルの種類:その他 文字コード:自動選択
で保存したものです。何年ぶりかなので何か忘れてるのかもしれません。
ど素人で済みませんがお願いします。
03883872005/11/09(水) 07:30:43ID:VFhSh5VA
ああ、sageてました。ageときます。
0389nobodyさん2005/11/09(水) 07:47:21ID:???
>>387
文字コードを euc にしてみ。
03903872005/11/09(水) 08:05:29ID:5otQfz0T
EUCで改行LFでもCR+LFでもダメでした。
03913872005/11/09(水) 08:16:09ID:5otQfz0T
とおもったら、>>389で元のロリポではできました。
wakwakの解析が逝かれてるのですかね?
0392nobodyさん2005/11/09(水) 08:53:46ID:???
ひとのせいにする前に勉強しろ
0393nobodyさん2005/11/09(水) 09:06:00ID:BFWlWPsi
@imglist=grep *.jpg, readdir DIR;
がエラーです。
多分正規表現の指定がおかしいと思います。
0394nobodyさん2005/11/09(水) 09:29:22ID:???
>>393
正規表現なら
@imglist = grep /\.jpg$/, readdir DIR;

ワイルドカード使おうとしてるところを見るとこのへんと混同してるのかも
@imglist = glob("*.jpg");
@imglist = <*.jpg>;
0395nobodyさん2005/11/09(水) 11:29:02ID:???
>>387
ちゃんとASCIIモードで転送しているのか?
ファイルの先頭に変なバイナリが付いていないかバイナリエディタ等で確認したのか?(UTF-8保存とかね)
0396nobodyさん2005/11/09(水) 11:51:52ID:???
>>387
> ファイルの先頭が
> #!/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:???
>>387
ASCIIモードかどうかは、文字コードとかの問題じゃなくて
FTP転送の問題ジャマイカ?

ていうかここまで来るともはやスレ違い。
0399nobodyさん2005/11/09(水) 22:36:27ID:???
どうでもいいのだけど >>387 に一言言いたい。
ヒアドキュメント使え。
0400nobodyさん2005/11/10(木) 00:00:36ID:???
niku.2ch.netみたいなDNSBLに登録されているか調べるモジュールは何ですか?
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:???
ありがとうございます!
入れました
04033872005/11/10(木) 06:37:47ID:XPue5Djf
おお、まんまり反応ないし>>392もあるんであきらめてたけど
色々ありがとう。

とりあえず
>>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:???
>>403
>でもあの書き方ではわかんないですよ。僕だけですかね・・・

おまいだけ。あと「supecial thnx」は恥ずかしいからやめておけ。
0405nobodyさん2005/11/10(木) 09:39:09ID:???
>>403
真性ですね。
0406nobodyさん2005/11/10(木) 10:11:45ID:???
釣られるなよ
0407nobodyさん2005/11/10(木) 10:52:53ID:CqV/pVhD
perlの開発ソフトってないですか?
ビルダーとかみたいな
0408nobodyさん2005/11/10(木) 11:38:03ID:???
>>407
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:???
とりあえずソースを全部、どこかのアップローダに上げろ
0411nobodyさん2005/11/10(木) 23:19:21ID:???
>>409
送信ボタンが押されたかのチェックなんてPerlの範疇じゃないと思うが
0412nobodyさん2005/11/10(木) 23:53:03ID:???
cgi.pm使ってdumpしてみりゃ
0413nobodyさん2005/11/11(金) 00:15:11ID:???
そもそもやりたいことがよくわからんのだが。
サブルーチンとか言ってるけど、ページの遷移はないってこと?
0414nobodyさん2005/11/11(金) 04:45:03ID:???
>>409-413
>>61
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:???
改行をsplitでもすればぁ
0418nobodyさん2005/11/11(金) 19:15:49ID:???
Perl の標準で一行ずつ巡回する方法 (メソッド) って無いんだっけ?

テキストの内容がでかいとでかい配列ができちゃうのがイヤだけど、

foreach my $line (split(/^/, $txt)) {
# $line に何かする
}
0419nobodyさん2005/11/11(金) 19:18:47ID:???
>>417,418
レスありがとうございます。

>>418
すいません。splitの/^/というのは??
この場合の^は行頭を表す^ですか?
04204182005/11/11(金) 19:22:14ID:???
>>419
そうです。
0421nobodyさん2005/11/11(金) 19:26:56ID:???
>>420
それで改行で切れるんですね。知りませんでした。
ありがとうございます。
0422nobodyさん2005/11/11(金) 20:30:27ID:???
while (/^(.*)$/smg) { 処理($1) }

とかでも
04234182005/11/11(金) 20:51:55ID:???
>>422
うお、そっちの方が無駄な配列生成しない分スマートじゃんね。吊ってくるわ・・・
0424nobodyさん2005/11/11(金) 22:14:13ID:???
>>422
ありがとうございます。
だいたいどんな事をやっているのか理解するのに
しばらくかかりました。^^;

オプションを使いこなせると便利になりそうですね。
0425nobodyさん2005/11/11(金) 23:15:24ID:???
WindowsXP、Perl5.8.7でPPMからDBD-SQLiteをインストールしましたが、connectやdisconnectは出来る(ファイルも生成される)ものの、prepareやdoメソッドを呼ぶとPerlインタープリタが強制終了してしまいます。
原因は何でしょうか?
0426nobodyさん2005/11/11(金) 23:23:21ID:???
よくある
0427nobodyさん2005/11/13(日) 16:57:21ID:???
$ua->credentials($netloc, $realm, $uname, $pass):
これを使ってBasic認証通過させたいんですが
鯖側の$realmが日本語になってるせい?なのか失敗します
アドバイスお願いします。。
0428nobodyさん2005/11/13(日) 18:56:49ID:???
>>427
文字コード合わせればええやん
0429nobodyさん2005/11/13(日) 22:03:50ID:???
>>427
文字コードがわからなければLWP::UserAgentのget_basic_credentialsを再定義して
$realmになに渡ってきてるのか調べてあわせてやればいいと思うよ。
0430nobodyさん2005/11/14(月) 09:03:21ID:???
>>428-429
通過出来ました。ありがとうございました。
0431nobodyさん2005/11/14(月) 11:00:01ID:W63Ukjvm
ReadParse()を使用してフォームから取得した変数を
open関数を使用して、UTF-8でテキストファイルに出力したいのですが
その方法がよくわからず困っています。

フォームから取得した変数はSHIFT_JISなので、
そのままopen関数で出力すると、テキストファイルの文字コードは
SHIFT_JISになってしまいます。

どなたか知っておられる方がいましたら、よろしくお願いします。
0432nobodyさん2005/11/14(月) 11:25:42ID:???
>>431
UTF-8だから
Jcode.pmを使えばいいのかなーとか思ったけど
0433nobodyさん2005/11/14(月) 17:51:10ID:WMignAMj
PHPでいうところのshuffleにあたる関数ってありますか?
つまり、やりたいことは、配列をランダムに並び替えることです。
0434nobodyさん2005/11/14(月) 18:03:25ID:???
>>433
http://boobar.hp.infoseek.co.jp/bench/randlist.txt
0435nobodyさん2005/11/14(月) 18:12:42ID:???
List::Util::shuffle がいいと思う。
パフォーマンスなんて問題になってから考えれば良い。
気になるならそもそも Perl なんか使わんし。
0436nobodyさん2005/11/14(月) 18:39:21ID:3zfzQPqE
ttp://other.free-uploader.com/up/download/1131960567298904.t6lFKb
DLPass:1234

windowsでActivePerl5.8を使っています。

IO::Socketを使い、コンソールでのチャットを作ろうと思っています。
現在は、サーバー側はechoserverのプログラムを、
クライアント側にはプロセスを受信・送信に分けたものを使おうと思っています。

実行すると文字は入力できるのですが、うまくserver側にデータが行かないようです。
たぶん原因はclient側なんですが・・。

煮詰まってしまいました。。ヒントお願いします(つд⊂)
0437nobodyさん2005/11/14(月) 19:04:07ID:???
>>436
■こんなCGI作ってください■
http://pc8.2ch.net/test/read.cgi/php/1102980903/
04384362005/11/14(月) 21:57:56ID:3zfzQPqE
ActivePerlでIO::Socketやプロセスについて勉強するには
どんな本やwebページがオススメですか?
0439nobodyさん2005/11/14(月) 22:07:01ID:???
>>438
とりあえずIO::Socketでググれ
0440nobodyさん2005/11/14(月) 22:09:16ID:???
perldoc
0441nobodyさん2005/11/14(月) 22:12:01ID:???
>>438
>>7-8
04424362005/11/14(月) 22:23:16ID:3zfzQPqE
もしかしてTCP/IPつかったconsoleチャットって難しい?^^;

ラクダもドキュメントも読んだけどよくわかんね^^;

神はー神はいないのかー>w<;
0443nobodyさん2005/11/14(月) 22:33:57ID:???
とんでもねぇ、あたしゃ神様だよ
04444362005/11/14(月) 22:59:47ID:3zfzQPqE
神様がだめなら妖精さんでもいいから降臨たのむ・・・
0445nobodyさん2005/11/14(月) 23:09:56ID:???
>>442
ラクダもドキュメントも読んだのに分からないのなら、Socket や
ターミナルを扱う為の基本的な知識が君には欠けている。
そしてその解説はこのスレの範疇ではない。
04464362005/11/14(月) 23:20:04ID:3zfzQPqE
初心者質問という言葉に甘えすぎました。
出直してきます。
0447nobodyさん2005/11/15(火) 00:24:28ID:???
つか何がわかんねーのかわからん状態の奴に何を答えりゃいいんだ
0448nobodyさん2005/11/15(火) 13:35:44ID:???
お前を、殺す!
0449nobodyさん2005/11/15(火) 14:05:37ID:???
通報、しますた!
0450nobodyさん2005/11/15(火) 15:28:57ID:???
ソケットを使うならこの辺りかしらん。

Programming UNIX Socket FAQ in Japanese
http://www.kt.rim.or.jp/~ksk/sock-faq/indexj.html

UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI
http://www.amazon.co.jp/exec/obidos/ASIN/4894712059/

どちらもCを読めること。
0451nobodyさん2005/11/15(火) 18:19:07ID:5cRd32ic
WEBページのアクセス数が多くなってきたため、ロードバランサを用いて負荷を分散しようと思います。

現行
インターネット--------WEBサーバ(DBなど含む)

現行↑の単純な構成を
↓の構成(WEBサーバ3台、DBサーバとにしたいのですが、

イメージ
                       WEBサーバ1
インターネット--------ロードバランサ----WEBサーバ2--------Perlプログラム&DBサーバ
                       WEBサーバ3


この時にPerlのプログラム等に関して注意事項、不具合予測等はありますか?
0452nobodyさん2005/11/15(火) 18:20:22ID:???
>>451
Perlが関わる部分なんて無いよ
大丈夫かおいw
0453nobodyさん2005/11/15(火) 18:20:45ID:5cRd32ic
WEBページのアクセス数が多くなってきたため、ロードバランサを用いて負荷を分散しようと思います。

現行
インターネット--------WEBサーバ(DBなど含む)

現行↑の単純な構成をロードバランサーを加えて
↓の構成(WEBサーバ3台、Perlプログラム&DBサーバ)にしたいのですが、

イメージ
                          WEBサーバ1
インターネット--------ロードバランサ----WEBサーバ2--------Perlプログラム&DBサーバ
                          WEBサーバ3
0454nobodyさん2005/11/15(火) 18:25:47ID:???
>>451>>453
板違い。使ってるOSがなにか知らんがUNIX板かLinux板逝け
04554532005/11/15(火) 18:26:44ID:???
失礼つかまった。
退散します
0456nobodyさん2005/11/16(水) 00:22:50ID:F5yPWKpZ
ひろゆきさん、おめっとー
0457nobodyさんNGNG
手軽にワイルドカードDNSにしとけ
0458nobodyさん2005/11/16(水) 01:49:10ID:???
すみません、誘導されて来ました。

画像掲示板をCGI-Perlで作ったんですが、
アドレス先に画像が存在しているかどうかを判別する事は可能でしょうか?
0459nobodyさん2005/11/16(水) 02:07:22ID:???
>>458
アドレス先って何のこと?
ローカル? リモート?
0460nobodyさん2005/11/16(水) 02:26:25ID:???
ローカルだったら訊いてこねえだろw
0461nobodyさん2005/11/16(水) 03:50:28ID:???
いや、わからんぞw
■ このスレッドは過去ログ倉庫に格納されています