Perlコーディング初心者質問スレ Part 48
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/04/26(水) 18:00:50ID:RLbnve1J【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0332nobodyさん
2006/05/11(木) 17:14:10ID:???初歩的間違い >> 331
0333325
2006/05/11(木) 17:33:07ID:mIPF1ZNxイテレーションを5000回に増やして試してみました。
なお、>>332さんの方はreverseが必要になると思うので、追加しています。
Benchmark: timing 5000 iterations of No.330, No.332, foreach, until...
No.330: 3 wallclock secs ( 3.31 usr + 0.39 sys = 3.70 CPU) @ 1350.26/s (n=5000)
No.332: 5 wallclock secs ( 3.94 usr + 0.23 sys = 4.17 CPU) @ 1198.75/s (n=5000)
foreach: 4 wallclock secs ( 3.89 usr + 0.19 sys = 4.08 CPU) @ 1226.09/s (n=5000)
until: 3 wallclock secs ( 3.42 usr + 0.14 sys = 3.56 CPU) @ 1403.31/s (n=5000)
0334325
2006/05/11(木) 17:35:50ID:mIPF1ZNxBenchmark: timing 5000 iterations of No.330, No.332, foreach, until...
No.330: 4 wallclock secs ( 3.30 usr + 0.36 sys = 3.65 CPU) @ 1367.99/s (n=5000)
No.332: 4 wallclock secs ( 3.42 usr + 0.28 sys = 3.70 CPU) @ 1350.26/s (n=5000)
foreach: 4 wallclock secs ( 3.83 usr + 0.28 sys = 4.11 CPU) @ 1216.84/s (n=5000)
until: 4 wallclock secs ( 3.23 usr + 0.38 sys = 3.61 CPU) @ 1385.04/s (n=5000)
0335nobodyさん
NGNG読みやすいコードでいいんじゃないかな?
0336nobodyさん
2006/05/11(木) 17:38:51ID:???0337nobodyさん
2006/05/11(木) 17:40:42ID:???>>332の方式は、先頭から空行でなければ$lineへ代入を末尾まで行う方式のためreverseすると間違いです。
@dataがオンメモリという前提だとあまり効率的でないかも?ですが、
ファイルからの読み込み時にそのまま適応できる、ということですね。
0338325
2006/05/11(木) 17:40:59ID:mIPF1ZNx>>325に書いたスクリプト、reverseの位置を変えただけで処理速度がかなり上がります。
foreach (reverse @data) {
if ($_) {
$line = $_;
last;
}
}
結果:
Benchmark: timing 5000 iterations of No.330, No.332, foreach, until...
No.330: 4 wallclock secs ( 3.42 usr + 0.33 sys = 3.75 CPU) @ 1333.69/s (n=5000)
No.332: 3 wallclock secs ( 3.47 usr + 0.30 sys = 3.77 CPU) @ 1328.02/s (n=5000)
foreach: 4 wallclock secs ( 3.25 usr + 0.34 sys = 3.59 CPU) @ 1391.21/s (n=5000)
until: 4 wallclock secs ( 3.27 usr + 0.39 sys = 3.66 CPU) @ 1367.24/s (n=5000)
ここまで来ると誤差の範囲ですね…。ではまた。
0339nobodyさん
2006/05/11(木) 17:46:37ID:???0340nobodyさん
2006/05/11(木) 17:56:23ID:???こうか。
0341nobodyさん
2006/05/11(木) 17:57:32ID:???0342325
2006/05/11(木) 17:58:35ID:???なるほど、勘違いして失礼しました。
結果は貼りませんが、reverseを追加しなければ僅差でNo.332が最速でした。
まあどれもほとんど同じ、お好みでって事になりますね。
>>339
No.332以外は最下行からループするアルゴリズムになっていると思います。
ただNo.332は上から全部見て行っても遅くありませんでした。
0343nobodyさん
2006/05/11(木) 18:07:20ID:???添え字付けアクセスは結構遅いということか。
0344nobodyさん
2006/05/11(木) 18:23:21ID:???do {
$line = pop @data;
} while($line eq "");
0345nobodyさん
2006/05/11(木) 19:19:12ID:???$_ ne '' and $line = $_, last for @data;
until で書くと
1 until ($line = pop @data) ne '';
0346nobodyさん
2006/05/11(木) 19:20:50ID:???$_ ne '' and $line = $_, last for reverse @data;
短いのは until のやつかな。
0347nobodyさん
2006/05/11(木) 20:50:54ID:V8lYCtov$maximum = 99999;#カウンターの最大値(最大値を超えると0に戻ります。)
$value = "%05d";#カウンターの桁数( %04d, %05d, %06d ←このように桁数を変更して下さい。)
$countfile = "count.txt";#ログファイル(カウンター)
$ipfile = "ip.txt";#ログファイル(IP)
open (COUNT, "<$countfile");
flock(COUNT, LOCK_SH);
chomp($count = <COUNT>);
$iplog = <COUNT>;
close(COUNT);
$ip = $ENV{ 'REMOTE_ADDR' };
$maximum = sprintf("$value", $maximum);
if( $ip ne $iplog ){ $count++; }
if( $maximum < $count){ $count = 0; }
open (IP, ">$countfile");
flock(IP, LOCK_EX);
print IP ($count."\n");
print IP ($ip);
close(IP);
0348nobodyさん
2006/05/11(木) 20:53:04ID:V8lYCtov($sec, $min, $hour, $day, $mon, $year) = localtime(time);
$year = $year + 1900;
$mon++;
$sec = sprintf("%02d", $sec);
open (LOG, ">>$ipfile");
flock(LOG, LOCK_EX);
print LOG ($ip."\n");
print LOG ($year."/".$mon."/".$day."\t".$hour.":".$min.":".$sec."\t".$ENV{ 'HTTP_USER_AGENT' }."\n\n");
close(LOG);
$count = sprintf("$value", $count);
print "Content-Type: text/html\n\n";
print "document.write('$count')";
exit;
0349nobodyさん
2006/05/11(木) 20:55:54ID:???これをもっと高速化するにはどうしたらいいですか?
SSIのexecとincludeが使用できないので、Javascriptで
呼び出しています。
他にもっといい呼び出し方などあったら是非教えてください。
0350nobodyさん
NGNG突っ込みどころは沢山あるけど
0351nobodyさん
2006/05/11(木) 20:58:34ID:V8lYCtovその突込みをお願いします。
0352nobodyさん
2006/05/11(木) 20:58:55ID:???この行必要?
0353nobodyさん
2006/05/11(木) 21:11:01ID:???・ファイルのオープンには絶対エラーチェックを入れる
・ファイルを二回にわけてオープンしてたら、ロックの意味が無い
最低この二点を勉強して。
0354nobodyさん
2006/05/11(木) 21:12:04ID:???あえて一つ突っ込むなら、$countfileを一旦閉じて開きなおしてるのはいかん。
これじゃアクセスが重なると空回りするぞ
+<モードで開いておいて、読み終わったら頭にseekして書き込み、
そして閉じる前にtruncateするのが最適解かと。
0355nobodyさん
2006/05/11(木) 21:22:32ID:???でいいと思う。
行にゼロは無いと仮定しているレスばかりだが、いいのか?
0357nobodyさん
2006/05/11(木) 21:56:16ID:???0358nobodyさん
NGNG0359nobodyさん
2006/05/11(木) 22:13:02ID:???スコープの範囲によって変数の値が変わる場合があるから。
グローバル変数にするとスコープの範囲がグローバルになるから、範囲を気にする必要なくなる。
>グローバル変数だけのプログラムは何故だめなの?
規模が大きくなると破綻するらしいけど、自分で管理できるならグローバル変数でOKなんじゃない?
>引数なしの関数は何故悪いの?
暗黙のうちにグローバル変数を使うことになるから。
0360nobodyさん
2006/05/11(木) 22:22:38ID:???my()宣言するのがとても大変です。
またグローバルで使う場合もある処理の場合、そのままコピペできればと思うのですが
よろしくお願いします
0362nobodyさん
2006/05/11(木) 22:38:48ID:???+<でopen
read
seek
truncateで0バイト化
って手順てこと?
truncateで0バイト化するならseekは要らない気もするけどどうなんでしょ?
言葉が足りなくて上げ足取りみたいな感じたらスマソ
それとも桁が減った場合を考えてのtruncateを使用ってことでしょうか?
0363nobodyさん
2006/05/11(木) 22:40:33ID:???$lineが拾えないのですが…。(undefになっているようです)
>>361
ファイルの最終行が空行かも知れません。
その前の行も空行かも知れません。
0364nobodyさん
2006/05/11(木) 22:46:51ID:???my($linecnt) = $#data;
my($lastline);
if($linecnt){ $lastline = @data[$linecnt]; }
0366nobodyさん
2006/05/11(木) 22:53:24ID:???そうゆうことがあるなら・・・
$linecnt = $#data;
for $i ($linecnt..0){
$lastline = chomp($data[$i]);
if($lastline){
last;
}
}
もしループを抜けて$lastlineが空なら、@dataは空か、改行だけしかないデータとなる
0367nobodyさん
2006/05/11(木) 22:58:30ID:???スマソ、少し説明が足りなかった。桁が減った場合を考えて、だね。
truncateとprintが逆で、書き込んだ後に、tellしてその長さにそろえるの。
read
seek
truncateで現在位置(tell)まで切り詰め
truncateは位置が頭に戻ることを保障されてないから、その場合でもseekを消すとまずいかも。
susv3のftruncate仕様より
> The value of the seek pointer shall not be modified by a call to ftruncate().
0368nobodyさん
2006/05/11(木) 23:13:43ID:???書き込み後のファイル位置まで削るってことか。
書き込み後のファイル位置は気にしたこと無かったから想像できなかったわ
0369nobodyさん
2006/05/11(木) 23:16:04ID:???本物のプログラマはローカル変数を使わない
・本物のプログラマは全てのグローバル変数を混乱せずに管理出来る。
・本物のプログラマはサブルーチンを作るときに引数を使わない。
・本物のプログラマは不要になった変数空間が解法されずに残ることを恐れない。
本物のプログラマなら誰でも知っている通り、有用な変数のスコープはグローバル変数しかないのだ。
さまざまな関数の一時変数や再帰、さらにはクロージャの変数管理はすべてグローバル変数で実装可能であり、わざわざ複雑な構造を取り入れてプログラミング言語をごちゃごちゃにせずとも、ただの特殊な場合として扱うことが可能なのである。
このような手の込んだ構造の最悪な点は、それらを使うときにいちいち宣言しなければならないと言うことにある。
0370nobodyさん
2006/05/11(木) 23:22:13ID:???0372nobodyさん
2006/05/12(金) 00:21:46ID:???0373nobodyさん
2006/05/12(金) 00:40:59ID:???$data = "\0\0\0\x0a";
$data =~ s/([\x00-\xff]{$n})$/ func($1) /e;
データ末尾 nバイトを置き換えようとしてるんですが
なぜか 0x0A にマッチしてくれません。
これは一体どうゆうことでしょうか?
そしてこれはどう書くべきなのでしょうか?
お願いします
0374nobodyさん
2006/05/12(金) 00:55:45ID:???s/(.{$n})\z/ func($1) /se
ttp://www.kt.rim.or.jp/~kbk/perl5.005/perlre.html
| s 文字列を単一行(single line)として扱います。つまり、``.''が通常はマ ッチしないような改行を含めた、全てのキャラクターにマッチするようにします。
| $ 行の終端(もしくは行末の改行の直前)にマッチします
| \z 文字列の終端にのみマッチします
0375nobodyさん
2006/05/12(金) 01:07:50ID:???ありがとです。
スッキリしました。
0376nobodyさん
2006/05/12(金) 01:36:29ID:???$_が項で主張してるとPerlっぽくない。
というかもし、最終行以外捨てるならそこが一番重いところになる。
$line = grep /./, @data;
0377nobodyさん
2006/05/12(金) 02:33:59ID:???$line = (grep /./, @data)[-1];
それもよさそうだね。
>>377 >>345 >>346あたりが最小限の走査ですむように
工夫されてるのでよさそう。
0379nobodyさん
2006/05/12(金) 03:55:19ID:???0381325
2006/05/12(金) 09:22:53ID:???Benchmark: timing 50000 iterations of No.330, No.332, No.344, No.345, No.346, No.366, foreach(338), grep(377), until(327)...
No.330: 3 wallclock secs ( 2.98 usr + 0.06 sys = 3.05 CPU) @ 16409.58/s (n=50000)
No.332: 4 wallclock secs ( 4.06 usr + 0.08 sys = 4.14 CPU) @ 12074.38/s (n=50000)
No.344: 3 wallclock secs ( 2.92 usr + 0.02 sys = 2.94 CPU) @ 17018.38/s (n=50000)
No.345: 3 wallclock secs ( 2.91 usr + 0.00 sys = 2.91 CPU) @ 17205.78/s (n=50000)
No.346: 3 wallclock secs ( 2.88 usr + 0.13 sys = 3.00 CPU) @ 16666.67/s (n=50000)
No.366: 3 wallclock secs ( 2.75 usr + 0.03 sys = 2.78 CPU) @ 17979.14/s (n=50000)
foreach(338): 3 wallclock secs ( 2.73 usr + 0.03 sys = 2.77 CPU) @ 18076.64/s (n=50000)
grep(377): 3 wallclock secs ( 3.08 usr + 0.05 sys = 3.12 CPU) @ 16005.12/s (n=50000)
until(327): 3 wallclock secs ( 2.84 usr + 0.03 sys = 2.87 CPU) @ 17391.30/s (n=50000)
個人的には>>376-377さんのgrepを使ったアルゴリズムが好きです。
注)
@dataが壊れる(壊れても構わないのですが)場合、結果がおかしくなるので
公平を期すため、全てのテストルーチンには@data = @backup;を入れています。
それが不要なアルゴリズムは、省けばさらに速くなります。
(昨日出したベンチマーク結果は毎回ファイル開いて読んでました…無駄すぎですね)
また、@dataにはchompが掛かっているので>>366さんからはそれを省いています。
0383325
2006/05/12(金) 10:03:29ID:???backup: 3 wallclock secs ( 2.72 usr + 0.02 sys = 2.74 CPU) @ 18281.54/s (n=50000)
謎です、これじゃ引き算出来ません。
benchmarkの測り方を間違えていたなんていう強力なオチがありそうで怖いですが…。
どこかにスクリプト自体をアップした方が良いですかね?
0384325
2006/05/12(金) 10:16:16ID:???何となくパス付き:perl
テストデータは同梱していません。
そこそこ大きいテキスト+末尾に4〜5空行を入れてtest.datとして保存して下さい。
0385nobodyさん
2006/05/12(金) 10:21:57ID:???>>327 >>344 >>345
popで配列の後ろから取り出して調べる
>>330 >>366
配列の後ろから添え字アクセスで調べる
>>338 >>346
配列を一旦reverseして、先頭から調べる
>>332
配列の先頭から調べる
>>377
grepで空要素を排除してから、最後の要素を取り出す
0386nobodyさん
2006/05/12(金) 10:43:29ID:???もちろんそのまま引き算できるわけでなく、たとえば 回数/s の逆数をとって一回あたりの
秒数をだして引き算するわけよ。
0387325
2006/05/12(金) 11:03:32ID:???まとめ、大変分かりやすいです。どうもありがとうございます。
>>386
なるほど、あの結果はあれでおかしくはないんですね。
とりあえずスクリプトは>>384でアップしましたので、お好きな方にカスタマイズは
お任せするつもりです。
0388nobodyさん
NGNG0389nobodyさん
2006/05/12(金) 13:08:04ID:???それは自分への言葉ですか?
分かってるなら消えろよカスwww
0390nobodyさん
NGNG0391nobodyさん
2006/05/12(金) 14:15:44ID:DNrRJ4oV0392nobodyさん
NGNGBe全体をあぼーんでもしてるのだろうか(笑)
0393nobodyさん
2006/05/12(金) 14:35:17ID:???0394nobodyさん
NGNG0395nobodyさん
NGNGファイル掲示板のcgiで、ファイルのDLカウンターを付けたい
編集対象個所
<a href=\"$i_Url/$ico\" target=_blank>
$i_Url ファイルの置き場所のパス
$ico ファイル名
置換したいcgi呼び出し
./downcon.cgi?down=http://ohayou.com/test.zip&name=test.zipファイル&hp=http://ohayou.com
私の書き換えたコード
./downcon.cgi?down=$i_Url/$ico&name=$icoファイル&hp=hp=http://ohayou.com
結果
CGI呼び出しエラーのページが表示されてしまう
何がいけないのでしょうか?
教えてくださいませ。
0396nobodyさん
NGNG改造スレ池
0397395
NGNGめげずに頑張ってみるものですね!
0398nobodyさん
2006/05/12(金) 17:25:50ID:???煮沸消毒しる!
0400nobodyさん
2006/05/13(土) 00:50:41ID:RdM+BVxRprint "Content-type: text/html\n\n";
print "こんにちは!\n";
↑これだとInternalServerErrorが出るんですが、
#!/usr/bin/perl -w
に書き換えると正常に『こんにちは!』と表示されるのですが、どうしてでしょうか?
-wはエラーがあったら表示、みたいに思いこんでたんですが…
0401nobodyさん
2006/05/13(土) 00:57:56ID:???-wはwarningオプションなのでエラーとはまた違います。
(こういう書き方はイカンとか、間違ってるかも知れないとかの警告)
それで、ぱっと見た感じ間違いは無さそう。
正常に表示されるスクリプトから、「 -w」の3バイトを丁寧に削ってまた試してみては?
0402nobodyさん
2006/05/13(土) 01:04:20ID:RdM+BVxRなるほど、Warningの略だったんですね。
アドバイス通りに『 -w』を削ってみました。
1バイトあたり1分ぐらいかけて慎重に削り、パーミッションも744にしたのですが、
やはり『 -w』が無いと動かないようです。
というか、MovableTypeを見ていて『-w』と書いてあるのを見てマネしたら動いちゃった、
って感じなのですが、『-w』をつけないと動かないってことはあり得るんでしょうか?
0404nobodyさん
2006/05/13(土) 01:12:21ID:RdM+BVxRなるほど、それが原因なんですか…
これも既出もいいとこかもしれませんが、仕事中なのでコッソリ教えてもらえるとうれしいです。
IEでFTP接続しているんですが、AsciiモードやBinaryモードを切り替えることはできるのでしょうか?
よろしくお願いします。
0405nobodyさん
2006/05/13(土) 01:14:24ID:???0406nobodyさん
2006/05/13(土) 01:29:23ID:RdM+BVxR普段はFFFTPを使ってるんですが、今使ってるサーバーはFFFTPだと
ファイル一覧が取得できないんですよね…
しかし、MovableTypeはIEでアップロードして動いたのに、不思議なものです…
スレ違いになってしまったので、このあたりで失礼します。
親切にありがとうございました。
0407nobodyさん
2006/05/13(土) 01:41:49ID:???スレ違いで難だけど一応ここまで聞いちゃったら…
ホストの設定の"NLST -Rを使って高速に再帰取得"を切ってみれ。
それで駄目なら"LISTコマンドでファイル一覧を取得"にチェックを入れてみれ。
#!/usr/bin/perl[CR][LF] だとOSは"/usr/bin/perl[CR]"というコマンドを起動しようとする。
よってそんなインタプリタは見つからないのでエラー。
#!/usr/bin/perl -w[CR][LF] だとOSは"/usr/bin/perl"に"-w[CR]"を渡そうとする。
perlはCRを無視して無事起動。そういや、どこかの入門サイトでエラーになることがあるから、
shebang行には#!/usr/bin/perl -と書けと言っている迷サイトもあったと聞いたな。
0408nobodyさん
2006/05/13(土) 01:56:30ID:RdM+BVxRありがとうございます。
おかげさまでFFFTPでファイル一覧が取得できてしまいました。
今までの苦労は何だったんだ、と怒りに震えるほど感謝しています。
今までの23年間の人生で初めて涙を流して感謝しました。
0409nobodyさん
2006/05/13(土) 10:11:20ID:???0410nobodyさん
2006/05/13(土) 19:48:15ID:???foreach $line (@list_hoge) {
my ($key, $value) = split ":", $line;
$hash_ref_hoge->{$key} = $value;
で、my がループ毎に実行されるのが気分的によくないです。
繰り返しブロック中の一時的な変数って、ブロックの中/外、どちらで
宣言するのが一般的なんでしょうか?中で宣言するとループ毎に別変数に
なってしまう(と思う)し、外で宣言すると my の意味が無い気がする。
0411nobodyさん
2006/05/13(土) 20:55:01ID:???{ my $hoge;
for(@fuga) {
}
}
0412nobodyさん
2006/05/13(土) 20:56:24ID:???そういう事じゃなかったらごめん
0413nobodyさん
2006/05/13(土) 21:28:32ID:???0414nobodyさん
2006/05/13(土) 21:49:46ID:???0415nobodyさん
2006/05/13(土) 21:56:02ID:vvOrsJnf#ちなみに、'chop'と'chomp'が混在してるスクリプトの場合です
0416nobodyさん
2006/05/13(土) 22:04:22ID:???chopとchompは意味が違うので、無条件に置き換えられるかどうかは不明
わざわざ混在してるとなると、置き換えられないかも
作者に聞いてくれ
0418nobodyさん
2006/05/13(土) 22:15:50ID:???それでいいんだよ。
その1周分のループの中でしか使わないし、その明言でもある。
違和感あると言うけど、ひょっとして「my付けろって言われたからつけてる」って程度の認識だったりしない?
0420410
2006/05/13(土) 22:33:22ID:???自分は >>414 と同じ考え方で質問に書いた書き方をしてるんだけど
「普通こう書くだろう」っていうのがあれば、と思い質問した次第です
(412 が「普通こう書く」なのかな?)
#あまり気にしないことにします。
0421410
2006/05/13(土) 22:52:39ID:???>>418 違和感は、
自分は「$key、$value はこの foreach ブロック(!=ループ)でワーク変数として使う」
つもりで宣言しているのに、ループ毎に別変数が生成されると、何か
変数入れるメモリがもったいないんじゃない?とか思ってしまう
からなわけです(貧乏性)。もしかしてループ毎に前のループの変数は
開放されるのかな? であれば問題ないな。
0422nobodyさん
2006/05/13(土) 22:58:00ID:???0423nobodyさん
2006/05/13(土) 22:58:15ID:???ループ中のmy宣言されてるものはその都度新しく生まれ変わってる別物です
0424nobodyさん
2006/05/13(土) 23:02:54ID:???その場合は、同じ変数を使い回す事になる。
split後の$key, $valueの文字列長が、ループ内でだいたい同じ程度なら
Cレベルでのreallocもあまり気にしなくて良くなる。
一方、ループ内に入れた場合は、変数のメモリはループ毎にヒープに返される。
最適化がどうなってるか分からないけど、
もしかしたら同じスカラを使い回しているかも知れない。
微妙な違い。多分、ループ外に置いた方が速い。
0425nobodyさん
2006/05/14(日) 01:28:41ID:???内側が基本。
外側で宣言しちゃったら値の局所化、名前の局所化どちらも意味なくなっちゃうじゃん。
このPart48スレで何回か話題なったから読み返してみ。
もちろん、ループの進行と共に変化していく系の変数なら外のスコープで宣言するしかない。
0426nobodyさん
2006/05/14(日) 02:15:49ID:EM3+kg+P$message =~ s/<a href="\.\.\/test\/read\.cgi\/$FORM{'bbs'}\/$FORM{'key'}\/n?\d+-?\d*" target="_blank">(>>\d+-?\d*)<\/a>/$1/g;
$message =~ s/<r>>>(\d+)-(\d+)<\/r>/<a href="..\/test\/read.cgi\/$FORM{'bbs'}\/$FORM{'key'}\/n$1-$2" target="_blank">>>$1-$2<\/a>/g;
$message =~ s/<r>>>(\d+)-<\/r>/<a href="..\/test\/read.cgi\/$FORM{'bbs'}\/$FORM{'key'}\/n$1-" target="_blank">>>$1-<\/a>/g;
$message =~ s/<r>>>(\d+)<\/r>/<a href="..\/test\/read.cgi\/$FORM{'bbs'}\/$FORM{'key'}\/n$1" target="_blank">>>$1<\/a>/g;
これの一部分から“n”を抜いても問題はないですか?
具体的には、次の部分を右のように変更しました。
一行目:n?\d+-?\d → \d+-?\d
二行目:n$1-$2 → n$1-$2
三行目:n$1- → $1-
四行目:n$1 → $1
これで動作異常とか出ることないですか?
0428nobodyさん
2006/05/14(日) 02:26:46ID:???抜いて問題があるかないかと言えば、抜いたら問題があるから入っているんでしょうとしか言えないです。
そもそも、何でnを抜きたいのでしょう?
見た限り、パラメータとして掲示板の投稿No.をn1〜n10みたいに示すためのnのようですが、
受ける側の処理もそれに合わせて書き直せばnを抜こうが何だろうが大概動きますよ。
0430nobodyさん
2006/05/14(日) 02:31:40ID:???>>427
なぜかn抜いても1見えますです。
>>428
抜かなかったら、ソース見たとき変な現象がおきるです。
たとえばこんな感じに。
<a href="../test/read.cgi/php/1146042050/n2-10" target="_blank"><a href="../test/read.cgi/php/1146042050/2-10" target="_blank">>>2-10</a>
<a href="..">が二個連続で表示されて、その片方にnを含むのが出ますです。
ちなみに、n消したら二個連続の表示ではなくなりますた。
■ このスレッドは過去ログ倉庫に格納されています