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

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

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

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

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

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

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

前スレ http://pc10.2ch.net/test/read.cgi/php/1164519503/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0685nobodyさん2007/04/26(木) 10:50:46ID:???
$logfileの中身とどういう風に動いて欲しいかの説明がないと
書いたとおりに動いてるだろと言われて終了だよ。

あとはエスパーさんよろしく。

なぜ/&n/でsplitするのかとか、あとでまたsplitするのはなぜかとか
$text1, $text2はどこへいったのかとか、@lineどんどん太るぞとか
いろいろつっこみどころはありそうだが。
0686682=6772007/04/26(木) 10:59:54ID:???
>>685
レスありがとうございます。
$logfile は下記です。
log.txt
------------------------
1_g9gnt3<>text1<>text2<>
2_ghtt3d<>text1<>text2<>
・
・
------------------------
やりたいことはログの一括編集です。
(掲示板なんかの編集機能などログファイルの一行だと思いますが
  それの複数行を一括で編集するような機能)
&nの理由は&だけで分割したらforループ時回数がわからなくなってしまうなぁ、、
というなんとなくでやってみました。ループ中にもう一回splitした理由は
=で分割しないといけないかなぁ、、という理由です。
@lineが太るということについてはわかりません、、すみません。。
0687nobodyさん2007/04/26(木) 12:23:48ID:???
>>684
あまりにアレすぎて添削する気が萎えるので、チェックポイント。
・フォームデータのデコードはCGI..pmにやらせる
・フォームでtext1とtext2が何回も出てくるので、それが各行のnoの値とちゃんと対応させられるか保証がない
 →そういうときは、
 <tr><td><input type="hidden" name="no" value="1_g9gnt3">1_g9gnt3</td>
 <td><input type="text" name="text1_1_g9gnt3"></td><td><input type="text" name="text2_1_g9gnt3"></td></tr>
 というように、name属性にnoの値をつけて、CGIプログラムでデータを受けたときに参照しやすいようにすると吉。
つづく
0688nobodyさん2007/04/26(木) 12:27:08ID:???
・同じname属性で複数の値があるときは、CGI.pmは配列として参照できるから、
 use CGI;
 use strict;
 my $q = new CGI;

 # noに指定された値の入力欄が存在するかの判定用
 # name="no"のhiddenタグと、対応するtext1、text2のフィールドが
 # 必ず対応していることが条件
 my %no_exist = map { $_ => 1 } $q->param("no");

 my @data;
 open(R, $logfile) or die $!;
 while (<R>) {
  my($no, $text1, $text2) = split(/<>/);
  push(@data, $no_exist{$no}
   ? join("<>", $no, $q->param("text1_$no"), $q->param("text2_$no"))."<>\n"
   : $_
  )
 }
 close(R);

 open(W, "> $logfile") or die $!;
 print W @data;
 close(W);
 ※全角スペース使用のためコピペ注意。

結局全部書いてしまった…orz
動作確認してません。
$logfileの中身を@dataに全部食わせるので、ファイルサイズがでかいとメモリも食います。
0689nobodyさん2007/04/26(木) 13:30:23ID:???
初心者にそんなソース見せてもまた質問が増えるだけだろアホか
「input nameの付け方が悪い」
これだけでおk
0690nobodyさん2007/04/26(木) 14:21:39ID:2xFOBqUQ
ディレクトリを新しく作り、ディレクトリにフォームから入力した名前をつけ
そのディレクトリに別のディレクトリの中身をコピーしするCGIを作りたかったのですが
動きません>< 環境はジオシティーズのジオプラスです

ソース

#!/usr/bin/perl

# 1.REQUEST_METHODをチェックしてリクエストプロトコル(GET or POST)を判断する
if( $ENV{'REQUEST_METHOD'} eq "GET" ) {
# 2.GETであれば、QUERY_STRINGからクエリを読み込む
$buffer = $ENV{'QUERY_STRING'};
} else {
# 3.POSTであれば、CONTENT_LENGTHを使用してリクエストのサイズを調べ、
# 標準入力からクエリを読み込む
read( STDIN, $buffer, $ENV{'CONTENT_LENGTH'} );
}

print "Content-Type: text/html", "\n\n";

print "<HEAD>", "\n";
print "<META HTTP-EQUIV='Refresh' CONTENT='5;URL=index.html'>", "\n";
print "<META name='GENERATOR' content='IBM HomePage Builder 2001 V5.0.3 for Windows'>", "\n";
print "<title>作成</title>", "\n";
print "</HEAD>", "\n";
print "<font size=5>書き込み中</font>", "<br>\n";
print "<b>Data</b> ", $buffer, "<br>\n";
print "<b>Split Data</b><br> ", "\n";
0691nobodyさん2007/04/26(木) 14:25:00ID:???
>>690
本を一冊読め・・・
ソースにはディレクトリなんてひとかけらも出てきてないだろ
クエリ受け取ってそれ表示してるだけ。
もうなんていうか死ねばいいのに。
06926902007/04/26(木) 14:25:54ID:2xFOBqUQ
# 4.クエリをアンパサンド( & )で分割
my @pairs = split(/&/,$buffer);
foreach $pair (@pairs){
# 5.イコール( = )で連結されたキーと値を分割(kye=value)
my($name, $value) = split(/=/, $pair);
# 6.プラス( + )をスペース( )に変換
$value =~ tr/+/ /;
# 7.16進数にエンコードされた文字列をデコード
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
@data = ($name, $value);
print "$name : $value<br>";

mkdir (".$name", 0755) || die "ディレクトリ生成失敗 : $!";


open(IN,"./index.html"); #コピー元ファイル をオープン
while(<IN>){    # 一行毎の読み込みループで変数$Bufに読み込む
 $Buf .= $_;}
close(IN);     #ハンドル IN が不要になったので閉じる

open(OUT,"> ../$name/index.html); #コピー先ファイル をオープン
print OUT $Buf;     #ソースの内容($Buf)を書き出す
close(OUT);       #ハンドル OUT が不要になったのでクロス
}


と、このように書いてみましたがエラー表示が出て動きません><
エラーの詳細がわからないので直し方がわかりません。
エロイ人教えてください。
0693nobodyさん2007/04/26(木) 14:28:28ID:???
エラーログ見ろ
0694nobodyさん2007/04/26(木) 14:30:01ID:???
■ Perl言語 ■ 何でも質問コーナー ■
http://mixi.jp/view_bbs.pl?id=17607679&comm_id=1401396
Perlに関すること、cgiに関すること
なんでも質問できるコーナーです(たとえばApacheとかでもOKとします!)
(Web系であればOK)

ルール:
Google検索で調べてわかるようなことでも質問してもOKです
(初心者のうちは、どの情報を取捨選択したらイイのかわからないと思うので)
回答してくださるかたは、暖かく質問者を迎えてやってください
o(^^o) (o^^)o


ここ池
0695nobodyさん2007/04/26(木) 14:30:49ID:???
>>684
スクリプトの2行目に
use CGI::Carp qw(fatalsToBrowser);
と書きましょう。

シンタックスエラーの原因が表示されるようになります。

# まずは、これでいいんじゃね?>ALL回答者
0696682=6772007/04/26(木) 17:01:44ID:???
>>687-688
ずっとあれからやってたのですがなぜかハッシュに代入されなくて
ソース部分を別CGIとして作り、データを投げたところ上手く行きました。
これからもっともっと勉強して色々覚えたいと思います。
本当にありがとうございました!
0697nobodyさん2007/04/26(木) 23:13:22ID:???
複数のLWP::UserAgentオブジェクトををマルチスレッド風に
動かすにはどうしたらいいのでしょうか?

IO::SelectはIO::Socketでないと使えないのでしょうか?
0698nobodyさん2007/04/27(金) 09:34:20ID:???
LWPを無理矢理マルチスレッドに使うくらいだったら
素直にsocket使うべき。
0699nobodyさん2007/04/27(金) 14:53:44ID:???
POE
0700nobodyさん2007/04/27(金) 20:33:48ID:???
POE知らなかった!
入所前(7年前)にはそんなの無かったはず

いやぁ〜プログラミングは楽しいね
0701nobodyさん2007/04/27(金) 21:57:47ID:???
POEってわりと大きいから、ちょっとしたものだったらlwpでシングルスレッドのほうが早かったりもするけどね。
0702nobodyさん2007/04/27(金) 22:44:25ID:???
遅いサーバが混じってたらしぬる
0703nobodyさん2007/04/28(土) 00:13:57ID:???
lwpってあまりタイムアウトの設定が効果ないよね?
下のように書いても5秒どころか30秒位待たされることがあるよ。
なんでだろう?

$ua = LWP::UserAgent->new;
$ua->timeout(5);

0704nobodyさん2007/04/28(土) 01:22:35ID:???
$ua->timeout( $secs )

Get/set the timeout value in seconds. The default timeout() value is 180 seconds, i.e. 3 minutes.

The requests is aborted if no activity on the connection to the server is observed for timeout seconds. This means that the time it takes for the complete transaction and the request() method to actually return might be longer.
0705nobodyさん2007/05/02(水) 11:13:15ID:sZgTnz1H
素朴な疑問ですがお願いします。

my $a = 2/3;
としたら一体どうなるのでしょうか?
割り切れない数なのでforの∞ループみたいに悲惨なことになりますか?

今暗算練習のCGIを作ってます。足し算引き算までつけてあるのですが、
割り算もつけようかなと考えてたらこの問題にぶちあたりました。

my $a = int (rand 100) / int (rand 100);
実際はこんな感じで使おうと思ってたのですが、割り切れない計算になったときどうなるのでしょうか?
適当なところでやめてもらえるのでしょうか?
それとも/演算子に対して「小数点第5位まででやめろ」という命令をあらかじめだしておけるでしょうか?
0706nobodyさん2007/05/02(水) 11:14:07ID:???
やってみ
0707nobodyさん2007/05/02(水) 11:19:00ID:???
なんでやったらすぐ分かる事を
やらずに質問するの?
脳の一部に障害のある方ですか?
0708nobodyさん2007/05/02(水) 11:28:03ID:???
>∞ループみたいに悲惨なことになりますか?
これが気になってんだろう
0709nobodyさん2007/05/02(水) 11:35:47ID:???
無限ループをプチッと殺せない環境で作ってるのかな。

> my $a = int (rand 100) / int (rand 100);
これ、計算せずにエラー吐いてくれるときがあるよ。
07107052007/05/02(水) 11:58:22ID:sZgTnz1H
>>709
その通りです。

>ときがあるよ。
というのは運任せという意味ですか?
それともuse strictのような無限ループコードストップモジュールでもあるという意味ですか?
0711nobodyさん2007/05/02(水) 12:12:57ID:???
ランダムだから分母に0がきたらエラーになるさ
0712nobodyさん2007/05/02(水) 12:20:33ID:???
初心者スレらしくて素晴しいね!
0713nobodyさん2007/05/02(水) 12:46:53ID:???
なんで無限ループになるなんて思い込んだんだか
0714nobodyさん2007/05/02(水) 13:12:51ID:???
>>60
>#!〜から始まる1行目(名前を忘れた)に変数を初期化するオプションがあったはず
SpeedyCGIのオプションって、
ttp://perldoc.jp/docs/modules/CGI-SpeedyCGI-2.21/SpeedyCGI.pod
ここ見つかりましたが、
#!/usr/bin/speedy
にどんなオプションつければ、いいでしょうか?
07157052007/05/02(水) 13:22:14ID:sZgTnz1H
>>711
なるほど。
では0ではないときの全てが無限ループのような事になってしまうのですか?
0716nobodyさん2007/05/02(水) 13:40:10ID:???
>>715
君にはこの言葉を送ろう

「馬鹿の考え休むに似たり」
0717nobodyさん2007/05/02(水) 13:47:59ID:???
あれもこれも無限ループになりそうで怖い→リモートで作るのをやめよう
という発想にはならんのかな。
07187052007/05/02(水) 14:14:41ID:sZgTnz1H
どなたかわかる方はいませんか?
my $a = 2/3;
print $a;
とすると無限ループのように延々6.6666666666666666666666666666666666...
となるんでしょうか?ならないんでしょうか?
0719nobodyさん2007/05/02(水) 14:16:22ID:???
しねばいいのにwwwwwwwww
0720nobodyさん2007/05/02(水) 14:28:30ID:???
まあ氏ぬべきだな
0721nobodyさん2007/05/02(水) 14:33:08ID:???
>>718
自分で試してみてはどうでしょうか
というか自分で試さないのはなぜでしょうか
私はPerlの実行環境がないのでPHPで試してみました
結果は
0.66666666666667
でした
ただみんながこの結果になるとは限りません
パソコンの環境(特にCPU)が変われば結果も変わることが多いです
0722nobodyさん2007/05/02(水) 16:04:38ID:???
× 分かる人が居ない!
○ あまりに馬鹿すぎて答えたくない
0723nobodyさん2007/05/02(水) 16:13:48ID:???
[これはひどい][死ねばいいのに]
07247052007/05/02(水) 17:33:02ID:sZgTnz1H
>>721
ありがとうございます!
なるほどです。適当なところで打ち切るようになっている可能性が高いわけですね。
ではその打ち切る桁数、小数点第何位までせよという命令は出せますか?出せませんか?

私の環境では小数点第15位のところで四捨五入されるようです。
小数点第30位まで計算させるなどはperlで制御はできないものなのでしょうか?
0725nobodyさん2007/05/02(水) 17:42:01ID:???
Perlがどうこう以前に

コンピュータのことをもっと勉強してください。
0726山本山2007/05/02(水) 18:10:10ID:???
わかりました。
0727nobodyさん2007/05/02(水) 18:57:52ID:???
標準モジュールで出来るけど
その方法は絶対お前に教えてやんねー
少しは自分でやってから質問しろカス
07287052007/05/02(水) 19:05:56ID:sZgTnz1H
ずっと無視されてるのにどうしてそんなに絡んでくるんだ?
そんなにカマって欲しいのか?
確実に俺より頭いいだろうに精神年齢は俺以下じゃ恥ずかしいよ。

回答する気がなければ無視を決め込むというのがどこのスレでも回答者の大人のマナー。
0729nobodyさん2007/05/02(水) 19:15:55ID:???
このスレの存在意義を考えれば
自然と答えは出てくるさ
0730nobodyさん2007/05/02(水) 19:24:54ID:???
ずっと煽り続けて
いつか >>728 みたいにキレる所を
見るのが楽しみで仕方がないから
0731nobodyさん2007/05/02(水) 19:25:46ID:???
質問者が回答無視してどうすんだよww
0732nobodyさん2007/05/02(水) 23:06:30ID:???
あまりに哀れ杉だったので…
packとかsprintfでも適当にググってください
でなきゃ数値変換あたらでさがせばヒントぐらいはでてくるかと

で、それが分かったらプログラミングは卒業してください
0733nobodyさん2007/05/02(水) 23:59:24ID:???
>>705
もし、あなたが誰かに「カップラーメンの待ち時間を3分から5分に
変えたら味はどうなりますか?」と質問されたら、どう答える?

 とりあえず「味が変わります」と答えたとして、
 更に「どう味が変わりますか?」と質問されたら?

 それに対して「美味しくなくなります」と答えたとして、
 更に「どの位美味しくなくなりますか?」と質問されたら?

 それに対して「食えなくもない不味さ」と答えたとして
 更に「じゃあ、4分なら大丈夫ですか?」と質問されたら?

書き込みから>>705には、そういう質問者の感じがする。
だから、みんな「自分で試してみろ」と答える。
すごく自然。大人な対応。精神年齢も低くない。
むしろ、不自然なのは、そこまでしても自分で調べようとしない>>705
0734nobodyさん2007/05/03(木) 02:48:42ID:4s8Yv8pi
open関数では別のサーバーにあるファイルは展開できないようなのですが、別サーバーのファイルを読み込む方法ってありますか?
教えてください
0735nobodyさん2007/05/03(木) 03:40:24ID:???
6.6666666666666666666666666666666666
っていうのは循環(無限)小数でしょ。算数(数学)をもう少し勉強してね。
無限ループっていうのは、
while (1) { print "6" }
のように、永遠に終わらないループのこと。
int(rand(100))は、何から何までの整数を返す可能性があるかわかって使っていましたか?
なお、コンピュータは内部的には2進数で計算しているので、丸め誤差というのがあるよ。
でかい小数桁数を扱うためのモジュールはあるけど、その手前のことをすべてこなしてから考えたら?
0736nobodyさん2007/05/03(木) 04:03:11ID:???
>>705
> それとも/演算子に対して「小数点第5位まででやめろ」という命令をあらかじめだしておけるでしょうか?
my $a = sprintf "%3.5f",int (rand 100) / int (rand 100);
これじゃダメ?
第5位までの結果を出せ、ってので、主旨とはそれるけど
0737 ◆TWARamEjuA 2007/05/03(木) 09:18:53ID:????2BP(6824)
(´-`).。oO(パンチ2/3の次は無限ループかぁ。。。)
0738nobodyさん2007/05/03(木) 10:27:51ID:???
>734
IO::Allが助けになるかもしれない
0739nobodyさん2007/05/03(木) 11:12:02ID:???
LWPにダウンロードと同時にファイルに書き出してくれる関数なかったっけか
0740nobodyさん2007/05/03(木) 13:51:24ID:???
>>374
プロトコルは何を使う?
0741nobodyさん2007/05/03(木) 15:42:37ID:???
>739
&LWP::Simple::getstore
0742nobodyさん2007/05/04(金) 04:42:05ID:???
>>737
パンチは2/5なw
0743nobodyさん2007/05/04(金) 16:26:45ID:???
掲示板スクリプトにて

書き込みと表示を同一スクリプトでやる場合はファイルロックすればいいと思うんだけど、
書き込みと表示を別スクリプトにした場合、
書き込み用でログファイルに書き込みしてる時に表示用でログファイルを開くとログファイルが壊れると思うんだけど、
こういう場合はどういう風にすればいいの?
0744nobodyさん2007/05/04(金) 16:38:32ID:???
別スクリプトでもロックすれば問題ないよ。

こういう頓珍漢な質問してるようだとロックを正しく理解してないから
勉強しなおせ。
0745nobodyさん2007/05/04(金) 16:51:01ID:???
ロックはアクセス権
一度に1プロセスのみがアクセスしていいよという自前のルール
ルールを無視したプロセスが一つでもあれば壊れる
0746nobodyさん2007/05/04(金) 17:23:16ID:???
>>744-745
ありがとう
勉強してみる
0747nobodyさん2007/05/05(土) 02:51:43ID:???
PHPみたいにperlの公式マニュアルってないですか?
0748nobodyさん2007/05/05(土) 03:25:19ID:???
英語版ならあるよ。
PHPみたく日本語版の公式マニュアルはないけど。
0749nobodyさん2007/05/06(日) 23:46:01ID:???
perldoc がある。
コマンドラインにて
perldoc -h
して使い方をまなんで、
perldoc perl
perldoc perlfaq1
perldoc perlre
あたりから入れ
0750nobodyさん2007/05/07(月) 02:13:17ID:???
CGIでjpegファイルを読み込んで画像処理をしたいんですが
それぞれの画素のRGB値を一発で配列に入れてくれるようなモジュールありませんか?
0751nobodyさん2007/05/07(月) 02:51:49ID:???
>>750
cpan で探せば?
動かす鯖によっては、全く動かないか、アカウント停止食らうだろうね。
0752nobodyさん2007/05/07(月) 03:16:37ID:???
そういったメモリをガスガス使うような事は自鯖でやってください
0753nobodyさん2007/05/07(月) 11:11:07ID:???
一発で入れてくれるやつは知らんが
X/Y値を指定してRGB情報を取ってくる
モジュールならどこかで見た覚えがあるので
後は気合と根性で
0754nobodyさん2007/05/07(月) 11:35:40ID:???
Image::MagickのgetPixelsでも使えばいいんでないの?
メモリが足りるかどうかは知らんけど。

ttp://www.imagemagick.org/script/perl-magick.php
07557502007/05/07(月) 21:07:25ID:???
レスありがとう。参考にして色々試してみます。
メモリは気を付けます。
0756nobodyさん2007/05/08(火) 00:26:12ID:???
(JPG の場合) 640W * 480H * 32bit = 1,228,800 byte = 1.2MB

でけぇ〜
是非共有鯖ではやってくれるな
0757nobodyさん2007/05/08(火) 00:59:03ID:???
フルカラーは24bitだろ。
32bitってのは、ビデオメモリに展開する時の話であって。
0758nobodyさん2007/05/08(火) 01:11:06ID:???
とは限らないんだなそれがまた
0759nobodyさん2007/05/08(火) 01:24:11ID:???
(PNG の場合)
0760nobodyさん2007/05/08(火) 18:48:57ID:???
ラジオボタンをチェックさせて処理結果を表示させるCGIで、
処理結果を表示した状態からラジオボタンのフォームへ復帰するのに、

print
$cgi->td($cgi->a(href=>{$ENV{SCRIPT_NAME}},
$cgi->input({type=>"button", value=>"戻る"})));

と書いてローカルのapache2.2に置いてiceweselで動作をチェックしたら戻るボタンで正常に復帰したのですが、IEでチェックしたら戻るボタンが機能しませんでした。

仕方なくJavaScriptを使って

print
$cgi->td(
$cgi->input({type=>"button", value =>"戻る",
onClick=>"history.back(-1)"}));

と書いてみたらIEでも戻るボタンが機能したのですけども、これではJaveScriptが使えないブラウザから使えません。
w3mとかでも使いたいので、なんとかJavaScriptに頼らない良い方法は無いでしょうか?
ブラウザの名前を取得してIEとIE以外で場合分けするしか無いのでしょうか?
0761nobodyさん2007/05/09(水) 01:46:37ID:???
戻るボタンがブラウザの「戻る」ボタンなのかINPUTタグのボタンなのか
イマイチ意味不明だけど、$cgi->aの引数が違うんじゃね

> $cgi->a(href=>{$ENV{SCRIPT_NAME}},
$cgi->a({ href => $ENV{SCRIPT_NAME} },

それとAタグの中にINPUTタグ入れてるみたいだけど君は正しいと思うのかい?
0762nobodyさん2007/05/12(土) 23:27:21ID:???
Perlメモの改行コードを統一するのところでわからないところが
あるので質問させてください。
http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify

s/\x0D\x0A/\n/g;
tr/\x0D\x0A/\n\n/;

上記の部分の1行目は x0Dx0A を \n に変換していると理解したのですが
2行目はなぜ必要なのでしょうか?1行目が終了した時点で
x0Dx0A は \n に変換されているので必要ないのではと思ったのですが。。
0763nobodyさん2007/05/12(土) 23:50:46ID:???
説明ちゃんと嫁

いちばん頭に書いてある

s/\x0D\x0A|\x0D|\x0A/\n/g;

を高速化したのが

s/\x0D\x0A/\n/g;
tr/\x0D\x0A/\n\n/;

1行目だけだと足りないだろ。
0764nobodyさん2007/05/13(日) 00:11:57ID:???
>>762
tr のことを調べよう。
2行めは \x0D\x0A と一続きになったものを処理してるわけじゃない。
0765nobodyさん2007/05/13(日) 00:19:19ID:???
>>763
>>764
解決しました。
764さんの述べられている通りtrは \x0D\x0A と一続きに
なったものを変換しているものと思い込んでいました。
ありがとうございました。
0766nobodyさん2007/05/13(日) 21:00:15ID:J1kSit9o
ちと質問させてください。
掲示板のスパム対策に、"http"って文字列が5個以上投稿に含まれてる場合に
その投稿を弾こうと思って

if($FORM{'comment'} =~ /(http){5,}/){ &error(); }

とやったんですが、どうやらちゃんとマッチできてないようです。
どこがおかしいんでしょう・・・
0767nobodyさん2007/05/13(日) 21:10:24ID:???
a{n,} てのは n回以上の「繰り返し」へのマッチだす。
0768nobodyさん2007/05/13(日) 21:13:04ID:???
/(http){5,}/
は "http" が5個以上連続したら、って意味だから
"httphttphttphttphttp" って文字列が含まれてないとマッチしない

@l = ($FORM{comment} =~ /http/g); if (@l >= 5) 〜
とかすればいいんでないかい
0769nobodyさん2007/05/13(日) 21:35:09ID:???
$FORM{'comment'} =~ s/http/http/g;
か、
scalar(@tmp = $FORM{'comment'} =~ /http/g);
じゃまいか。
0770nobodyさん2007/05/13(日) 22:45:32ID:J1kSit9o
>767-769
初歩的な勘違いだったんですね・・・
ありがとうございます。
0771nobodyさん2007/05/14(月) 03:20:34ID:ha/4Ezv5
変数 $aaa
特定の文字列 「HOGE」
を、
$aaa「HOGE」$aaa「HOGE」$aaa「HOGE」$aaa.......
というように$aaaで「HOGE」を挟む形で並べたいのですが、
while(){
$fuga .= "$aaa「HOGE」";
}
$fuga =~ s/「HOGE」$//;

とやるのはおかしくないでしょうか?
何となく野暮ったい感じがするんですが、
こういった処理のセオリーみたいなものはありますか?
他にも「これの方がまだマシ」という書き方があれば是非アドバイスお願いします。
0772nobodyさん2007/05/14(月) 03:42:42ID:???
>>771
$fuga = $aaa;
while( ... ){
$fuga .= "「HOGE」$aaa";
}

あとは、0回の繰り返しも必要なら、全体をifで囲むとか。
07737712007/05/14(月) 03:55:40ID:???
>>772
おぉ、なるほど!
先に$fugaに入れてしまえばスマートにいきますね。
こんな時間に即レス、ありがとうございました!
0774nobodyさん2007/05/14(月) 06:53:09ID:???
>>771
my @aaa = ( $aaa, $aaa, $aaa, ........) ;
$fuga = join q{「hoge」}, @aaa ;
0775nobodyさん2007/05/14(月) 09:28:37ID:???
$fuga = "${aaa}「HOGE」" x 回数 . $aaa
難しく考えすぎ
0776nobodyさん2007/05/14(月) 17:37:17ID:oZfrkKb+
$insertid = $dbh->{mysql_insertid};
接続直後だと 0 になるのですが、
DB接続→INSERT後にしかAUTO_INCREMENTの値を取得できないのでしょうか?
またその場合、INSERT前に取得して利用したい場合どういう方法がありますでしょうか?
0777nobodyさん2007/05/14(月) 18:15:30ID:???
けつまでしーくしてそのレコードを取得すりゃえぇやんけ
0778nobodyさん2007/05/14(月) 18:36:36ID:???
>>776
先に欲しいなら、AUTO_INCREMENTを捨てて、自前で発行するしかないんじゃない?
0779nobodyさん2007/05/14(月) 18:37:28ID:oZfrkKb+
cronで色々と処理後にMySQLのレコードは削除してしまうので
普段テーブルにはレコードがありません。

でもphpMyAdminでは「次へ Autoindex」と見れるので、何か方法があると思うのですが
0780nobodyさん2007/05/14(月) 19:45:44ID:???
INSERT後にUPDATEしないでDELすりゃ取得できるんじゃ?
きれいな方法かどうかは知らないけど・・・
0781nobodyさん2007/05/14(月) 19:55:30ID:???
>>779
それはshow table statusで調べているのだと思われる。
普通のプログラムでこれから値を抜き出して使うのは
おすすめしません。

多分何か変わったなことをしようとしているからそんな
値が必要になってるんじゃないかという気がするので
そもそもそこに立ち戻って考え直したほうがいいんじゃ
ないか。
0782nobodyさん2007/05/14(月) 20:00:29ID:oZfrkKb+
SHOW TABLE STATUS LIKE 'テーブル名'

phpMyAdminでは↑のSQLでテーブル情報取得してるんですね。
DBIで上記SQL発行して、Auto_incrementフィールド読み込んで処理することにします
0783nobodyさん2007/05/14(月) 22:36:32ID:???
INSERT前に取得したとして
別プロセスもINSERT前に同じ値を取得したりして整合性とれるの?
0784nobodyさん2007/05/15(火) 12:03:46ID:???
>>783
ほぼ同時に処理された場合か。
でもそれって mysql_insertid でも言えるんじゃね
■ このスレッドは過去ログ倉庫に格納されています