Perlでリクに答えるス ..
[2ch|▼Menu]
446:デフォルトの名無しさん
06/01/26 12:50:59
>>445
Perl はググる前に perldoc 。
URLリンク(www.kt.rim.or.jp)

447:デフォルトの名無しさん
06/01/27 11:51:12
>>442
use encoding でエンコード指定しておいて
$name !~ /[あいう]/ で判定する方がいいと思う。



448:デフォルトの名無しさん
06/01/27 11:54:17
>>445
最小マッチ

デフォルトは最大でマッチする。
たとえば 'abcabcabcabc' という文字列に対して /a.*a/ は 'abcabcabca'
の部分がマッチするが /a.*?a/ だと 'abca' がマッチする。


449:sage
06/01/27 17:48:26
>>448, 446
ありがとうございます。

>最小マッチ
Perl歴17年ですが、この正規表現は見落としていました。
わざわざ、(1)のような書き方をしてきましたが、
(1) <2>[^<]*</2>
(2)の方が読みやすいですね? 
(2) <2>.*?</2>
勉強になりました。

450:デフォルトの名無しさん
06/01/27 17:53:34
はぁ、どうして下らない嘘をつくかな

451:デフォルトの名無しさん
06/01/27 17:54:23
>>449
詳説 正規表現 第2版まじおすすめ

452:デフォルトの名無しさん
06/01/27 19:28:06
Perl 歴 17 年で正規表現もまともに使えないなんて、そんなの「歴」のうちに入らんよ。

453:449
06/01/27 21:55:45
>>452
>Perl 歴 17 年で正規表現もまともに使えない
正規表現の基本が分かっていなかったので、人にPerlを教える
のは無理でしょうが、研究機関の仕事を主にPerlでこなして
きたことは嘘ではありません。どんな書き方でも、限られた
時間内にバグがないスクリプトが書ければ、仕事がこなせま
す。

perlの良いところは、Larry Wallが言うように、>> 449 の
(1)でも(2)でも、様々な方法で目的が達成できる点です。

454:デフォルトの名無しさん
06/01/27 22:01:37
なんつーか・・
一生VB・HSPやってるようなモンだな
進歩がなけりゃただの・・

455:デフォルトの名無しさん
06/01/27 22:12:42
449 の2しか知らん

456:デフォルトの名無しさん
06/01/27 23:32:19
>>453
こなせてないじゃん。
>>435 程度のことも人に聞かないと出来ないんだろ?

457:デフォルトの名無しさん
06/01/28 14:14:55
Perl って1987年12月生まれなんだな。18年前か
URLリンク(history.perl.org)

まあ17年前からPerl(というかUNIX)やってて正規表現知らないなんて
ありえない

458:デフォルトの名無しさん
06/01/28 15:43:49
「Perlプログラマのレベル10」
URLリンク(d.hatena.ne.jp)
のレベル5に
> 多くの人たちがこのレベルを超えないのは、たとえ非効率であっても、
> 再利用可能なコンポーネントの作成を除けば、ほどんど何でもできるからである。
とあるように、必要性を感じられなければそれ以上のものはなかなか知ることが出来ないんだろうね…人間ってのは。
この機会にPerl5の奥深さを学んでみたらどうだ?その霧の先には素晴らしい世界が広がっているぞ

459:デフォルトの名無しさん
06/01/28 17:48:46
>>457
最短マッチが使えるようになったのはPerl5以降だよ。
それ以前に覚えた正規表現をそのまま使い続けていたんだろうね。


460:デフォルトの名無しさん
06/01/28 18:00:14
ああ、最短マッチを知らなかったってことだったのか
斜め読みしてた

461:デフォルトの名無しさん
06/01/30 15:42:23
>>449
くっ。負けた。俺、Perl歴16年。


462:デフォルトの名無しさん
06/01/31 17:18:44
お願いします。

♂チームと♀チームが2つのコートで♂♀別総当り戦をしたく
両コート同時進行として

♂が4チーム・♀が2チームの場合・・・
【Aコート】  【Bコート】
♂1-♂2 ♂3-♂4
♀1-♀2 ♂1-♂3
♂2-♂4 ♀1-♀2

↑の3回戦で総当りになる。

では♂が7チーム・♀が3チームってなったとき
どう組み合わせればよいかみたいなのを計算させたいです。

できれば3連チャンとかで試合することにならないように・・・

463:デフォルトの名無しさん
06/01/31 17:30:13
>>462
♀1-♀2 が2回あるのはただの総当りではないと思われるが
どういう規則なのかね?


464:デフォルトの名無しさん
06/02/01 11:03:17
>>463
スミマセン間違いです・・・。

♂が4チーム・♀が2チームの場合・・・
【Aコート】  【Bコート】
♂1-♂2 ♂3-♂4
♀1-♀2 ♂1-♂3
♂2-♂4   -



465:デフォルトの名無しさん
06/02/05 15:52:03
>>462
こうですか? わかりません。

use strict;
use warnings;
local($a,$b);
my(@t,@p,@f,@ct,$w,$i,$j,$k);
($t[0],$p[0])=('',$f[0]='0');
$t[$_]='♂'.$_,$p[$_]=0,$f[$_]='011111111000',substr($f[$_],$_,1)='0' for (1..8);
$t[$_]='♀'.($_-8),$p[$_]=0,$f[$_]='000000000111',substr($f[$_],$_,1)='0' for (9..11);
@ct=('A:',' B:');
do {
++$_ for (@p);
for (@ct) {
$a=$b=$w=0;
for $k (1..$#p) {
$i=$j=0;
($i,$j) = ($p[$_]>$j && substr($f[$_],$k,1))?($_,$p[$_]):($i,$j) for ($k..$#f);
($a,$b,$w) = ($k,$i,$j<$p[$k] ? $j : $p[$k]) if $p[$k] && $j && ($w<$p[$k] || $w<$j);
}
print $_,$t[$a],'−',$t[$b];
$b=$p[$a]=$p[$b]=substr($f[$a],$b,1)=substr($f[$b],$a,1)=0;
}
print "\n";
$b+=/1/ for (@f);
} while($b);


466:デフォルトの名無しさん
06/02/06 13:29:43
>>462
CPAN には、順列、組み合わせを扱う Algorithm::Permute
というモジュールがある。これが使えるんじゃないの?
(オレは使ったことは無いけど)

467:デフォルトの名無しさん
06/02/08 10:27:13
総当たりの全組合せを求めた後で、それの並べ方を考えればいいのでは
ないだろうか。同じチームがなるべく連続しないようにするなど。
そして最後にコート分けする。


468:デフォルトの名無しさん
06/02/11 11:07:49
直リンクが不可能なアップローダー cgi あったら便利だと思う

直リンクされたことによって消滅するアップローダは多いからな

perl で書かれたものキボン

469:デフォルトの名無しさん
06/02/11 13:48:02
マルチ
スレリンク(tech板:308番)

470:デフォルトの名無しさん
06/02/11 13:49:32
>>468
ってかんなもんすでにあんだろが

471:デフォルトの名無しさん
06/02/12 06:11:09
>>470
直リンクを不可能にするような状態のcgiアップローダのスクリプトって配布されてる?
されていないんじゃ?

472:デフォルトの名無しさん
06/02/12 11:00:38
REFERER が期待する値以外だったらリジェクトするだけじゃん


473:デフォルトの名無しさん
06/02/24 06:43:47
URLリンク()にソケット飛ばしてHTMLデータを引っ張ってくるにはどうしたらいいですか?

474:デフォルトの名無しさん
06/02/24 08:44:13
>>473
ソケットは飛ばない。
perl -MLWP::Simple -e "get q|URLリンク(www.example.com)"

475:デフォルトの名無しさん
06/02/27 01:08:32
ファイル内の *.gif を *.bmpへ変換するプログラム作ってもらえませんか?
正規表現だったらどうなるでしょうか?

476:デフォルトの名無しさん
06/02/27 01:11:06
拡張子だけ(名前の変更(M))だけ、できればよいので、、、。
変更しなければならないものが100近くあるので^^;助けてください

477:デフォルトの名無しさん
06/02/27 01:21:50
>>475
そんな見当違いな質問をしてると
perlのスクリプトを書いても「どうやって実行するんですか?」
とか聞かれそうだと思われて誰にも相手されないよ

478:デフォルトの名無しさん
06/02/27 01:28:06
>>475
名前の変更(M)とか書いてる所を見るとWindowsだと思うが、
ファイル名をマジで変えるだけなら、DOS窓で

C>CD 変えたいファイルがあるディレクトリ
C>RENAME *.gif *.bmp

でいいんじゃマイカ?

UNIX系なら
% cd 変えたいファイルがあるディレクトリ
% mv *.gif *.bmp

どちらにしろ同じか。

※ データ形式は変わらないから開けなくてもしらん。

479:デフォルトの名無しさん
06/02/27 01:48:34
>>478
> % mv *.gif *.bmp
> % mv *.gif *.bmp
> % mv *.gif *.bmp
> % mv *.gif *.bmp
> % mv *.gif *.bmp
> % mv *.gif *.bmp

480:デフォルトの名無しさん
06/02/27 03:01:53
>>478
それは Windows/DOS じゃないと使えない技だぞ。

481:デフォルトの名無しさん
06/02/27 03:34:00
「名前の変更(M)」って書いてるくらいだから
Windows前提で答えれば良いっしょ

482:デフォルトの名無しさん
06/02/27 11:36:48
>>475はファイル名だけ変えたいんだね。
拡張子がbmpであるgifファイルを作りたいんだね。
いや、きっとそうなんだろうね。質問の内容からして
そうだし、他の人もそう理解しているようだし。


483:デフォルトの名無しさん
06/02/27 12:17:25
perl -pi -e "s/\.gif/\.bmp/g" <ファイル>

484:デフォルトの名無しさん
06/02/27 15:27:57
>>478
有難うございました。WinとLinux(UNIX)では、コマンドが違うからsystem()関数を使っても
同じプログラムとはいかないわけでしたね。
それに、Perlを使わなくてもできるんですね。
Cで書かれたコマンドがすでにあるからこれを使わない手は無いですね。OSにです。




485:デフォルトの名無しさん
06/02/27 15:30:28
今だCでプログラム書いたり、Cで書かれたexeばかり使っているので、手持ちのperlスクリプトを増やしたかった訳でした。。


486:デフォルトの名無しさん
06/02/27 15:31:53
いつもCで事足りてしまうみたいです。。有難うございました。

487:デフォルトの名無しさん
06/02/27 15:34:07
UNIX(Linux)とWindowsのコマンドが違う以上、汎用的なものを作るのってなかなか難しいですね。。。。?

488:デフォルトの名無しさん
06/02/27 15:35:30
本当、Cプログラマで良かったとつくづく思います。。

489:デフォルトの名無しさん
06/02/27 19:52:06
日記はチラシの裏に

490:デフォルトの名無しさん
06/02/28 00:02:26
リアルで会ったら頭蹴り飛ばしてやんのに

491:デフォルトの名無しさん
06/02/28 00:24:24
>>490
乙w死ねw

492:デフォルトの名無しさん
06/02/28 00:26:39
>>490
リアルで会ったら頭蹴り飛ばして殺してやるのにw

493:490
06/02/28 00:32:52

人格異常者だと思われてるから、普段リアルで誰にも相手されないよ〜

494:490
06/02/28 00:37:48
会社訪問した際、面接官に目が包丁のようだよと言われますた。
腹が立ったので、帰る際後ろから面接官の頭蹴り飛ばしてやりました。

電車に乗ると、たくさんのひとの頭を蹴り飛ばさなければならないので
怖くて乗れません。

495:490
06/02/28 00:39:55
別にいつ死んでもいいので、PG組んでます。

496:デフォルトの名無しさん
06/02/28 00:42:55
(;´д`)

497:デフォルトの名無しさん
06/02/28 00:45:32
世の中みんないい人ばかりじゃないしねぇ

498:490
06/02/28 00:46:15
ファイル内って書いてて答えがこれ?
C>RENAME *.gif *.bmp
死ね

499:490
06/02/28 00:53:16
491-495
で、だれ?おまえら

500:デフォルトの名無しさん
06/02/28 00:58:17
おれだよ、おれ
500

501:デフォルトの名無しさん
06/02/28 01:00:00
とりあえずここには
>>478以外、まともな人間はいなさそうだw

502:490
06/02/28 01:01:11
これ書いてる奴が?
% mv *.gif *.bmp

503:デフォルトの名無しさん
06/02/28 01:03:27
>>490
(;´д`) いや 話しかけてこないで。さよなら

504:デフォルトの名無しさん
06/02/28 01:45:20
ローマ字で入力すれば、あらゆるその読みの文字にマッチするスクリプト
gyouで行やら業やらぎょうやらギョウやらgyouやら

505:デフォルトの名無しさん
06/02/28 02:04:59
migemo

506:デフォルトの名無しさん
06/02/28 17:45:14
だってあれ完璧じゃないんだもん

507:デフォルトの名無しさん
06/02/28 18:53:11
>>506
migemo の「辞書」が完璧じゃないんだろ?
「辞書」をしっかり作れ。Perlでmigemoみたいなこと
をやるにせよ、辞書が命だ。

508:505
06/02/28 23:27:34
おまえも>503おまえも>506
死ね

509:デフォルトの名無しさん
06/03/01 17:08:44
>>508
うはwwwカッコヨスwwww
俺にも氏ねって言ってぇぇvvvvvv

510:505
06/03/02 04:09:38
>509
しねしねしねー♪从´∇`从

511:デフォルトの名無しさん
06/03/06 21:20:04
カウンターで
0=あ
1=1

49=を
50=ん
って感じに変換するにはどーすればいいんですか?

512:デフォルトの名無しさん
06/03/06 21:24:12
日本語でおk

513:デフォルトの名無しさん
06/03/06 21:33:41
>>511
my %c = (
 '0' => 'あ',
 '1' => '1',
# 略
 '49' => 'を',
 '50' => 'ん'
);

などと作っておいて $c{$count} のような感じで対応する文字列を求める。

514:デフォルトの名無しさん
06/03/11 00:49:18
>>1
楽天とかで任天堂DSを購入するスクリプト組んでくれよ。人力じゃ無理 買えないw

515:デフォルトの名無しさん
06/03/12 16:39:03
連投スクリプトください

516:デフォルトの名無しさん
06/03/12 16:52:43
#!perl
use LWP::Simple;
while (1) { get 'URLリンク(pc8.2ch.net)'; }

517:デフォルトの名無しさん
06/03/12 16:53:39
連投スクリプトください

518:デフォルトの名無しさん
06/03/12 16:54:45
連投規制、バーボンに引っ掛からない2ch投稿スクリプト希望

519:デフォルトの名無しさん
06/03/12 17:18:26
#!perl
use LWP::Simple;
while (1) {
get 'URLリンク(pc8.2ch.net)';
sleep 30;
}


520:デフォルトの名無しさん
06/03/12 17:40:11
明らかに悪用する気満々だから嫌。

521:デフォルトの名無しさん
06/03/12 17:47:13
スレを埋めるときに使うんです(><;)

522:デフォルトの名無しさん
06/03/12 18:49:39
スレ埋めは、自分でスクリプトを書ける者にのみ許される神聖なる儀式であルッ!!

523:デフォルトの名無しさん
06/03/12 18:51:08
思いっきり悪用の気配やんか

524:デフォルトの名無しさん
06/03/15 20:52:25
あんま調子にのんなよ

525:デフォルトの名無しさん
06/03/16 23:41:18
テキスト処理でおうかがいします。
半角数字と全角数字が混在したテキストがありまして、
一桁のみの数字は全角、二桁以上の数字は半角に統一したいのです。
中身を見てみると、「33」とか「679」とかになっていて、
どういう入力をしたのか不思議でなりません。
何かよいお知恵はないでしょうか。

Perl 5.8.1、Mac OS XのTerminalで作業をしています。
入力ファイルのエンコードはUTF-16(中国語処理のため)、
use utf8;で処理しています。

526:デフォルトの名無しさん
06/03/16 23:43:46
適当に正規表現で変換してったらいいんじゃないの?

s/1/1/

527:デフォルトの名無しさん
06/03/17 00:20:14
全部半角にしてから全角に直すだな

528:525
06/03/17 23:51:02
>>526
>>527

こんな感じで書いてみました。

while(<>) {
tr/[0-9]/[0-9]/;
s/(¥D)1(¥D)/$11$2/g;
(中略)
s/(\D)9(\D)/$19$2/g;
print;
}

ただ、これだと2回同じ処理をしないといけないですよね。
最初の処理でtr行、次の処理でs行になるんでしょうか。
これを効率よく1回の処理ですませたいのですが、いいやり方をご存知ないですか?

529:ヽ(´ー`)ノ ◆.ogCuANUcE
06/03/18 00:13:06
use utf8;
use Unicode::Normalize;

$str = NFKC($str);
$str =~ s/(?<!\d)(\d)(?!\d)/(my $ret = $1) =~ tr[0-9][0-9]; $ret/ge;

これでどうだろう。

530:デフォルトの名無しさん
06/03/18 17:46:30
>>528
逆。数字をまず全部全角にして、
その後2文字以上連続する全角数字を半角にする。

531:http://www.vector.co.jp/soft/win95/util/se072729.html
06/03/18 21:12:31
TextSS のWindowsXP(Professional)64bit化おながいします

もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?

そういや64bitにネイティブ対応している2chブラウザてありましたっけ?





532:デフォルトの名無しさん
06/03/18 21:35:05
テキスト置換で64bitに対応してると
なんかいいことあんの?

533:デフォルトの名無しさん
06/03/18 22:40:20
>>531
マルチ + スレ違い乙


534:525
06/03/18 23:37:27
>530

ご指摘どうもありがとうございます。
他にも処理が山ほどあり、あまり時間がなくてテンパってました。

>529

うまくいきました。どうもありがとうございました。
こういうときに先読み・後読みを使うんですね。
教えていただいたものを流用して、
2桁のみ半角にすることもできました。

535:ヽ(´ー`)ノ ◆.ogCuANUcE
06/03/19 00:33:20
>>529 を書いて気が付いたんだが、Encode::JP::H2Z が変換できるのは
カタカナだけなんだな。

日本語処理で凝ったことしようと思ったら、Jcode なんかねぇ…。

536:デフォルトの名無しさん
06/03/19 03:25:47
>>532
読み込みの段階で64ビットは有利

537:デフォルトの名無しさん
06/03/19 09:25:18
うそつけ

538:デフォルトの名無しさん
06/03/22 21:16:20
>>528
「¥」と来たか。「\」ではないと。


539:デフォルトの名無しさん
06/03/29 06:15:44
すいません、リクです。

数字を有効数字の桁数で丸めるスクリプトを探しています。
例えば、round(数字, 桁数)の形で使うとすると、
round(-12345.067, 4)
round(-12345.067, 7)
round(0.0567, 1)
round(1234567890123456, 4)
は、それぞれ
-12350
-12345.07
0.06
1.235e+015
を返す、というようなものなんですが、どなたかお願いできませんか

540:デフォルトの名無しさん
06/03/29 12:19:00
最後の1つはprintfの%.3eでいいだろうし、上3つはMath::SigFigsのFormatSigFigsが
使えると思うから、値の範囲かなんかで場合分けしてそれぞれ食わせればいいんで
ないかな。


541:539
06/03/29 23:21:01
>>540
出来ました。どうもです。

あと、CPANを漁っていたらNumber::Formatに似たような機能をみつけたので、
これを改変してもうまくいきました。

sub round {
my ($number, $digits) = @_;
my $sign = $number <=> 0;
my $result = abs($number);
my $index;
if($number =~ /(.*)e(.*)/) {
$result = $1;
$index = $2;
}
my $precision = $digits - length(int($result));
if($result =~ /^0(\.0*)/) {
$precision += length($1);
}
my $multiplier = (10 ** $precision);
$result = int($result * $multiplier + 0.5000001) / $multiplier;
$result = -$result if $sign < 0;
$result *= (10 ** $index) if $index;
return $result;
}

542:デフォルトの名無しさん
06/03/32 03:59:17
$ip_sample = 222.4.xxx.xxx #フォームや環境変数から取得
$ip_data <<END_DATA;  #外部ファイルから読み込んだデータ(実際は約2万4千行程度)
国名A-221.184.0.0-221.191.255.255
国名B-221.240.0.0-222.15.255.255
国名C-222.144.0.0-222.151.255.255
END_DATA
foreach (@ip_data) {
($cctld,$ip_a,$ip_b) = split(/-/,$_);
if ( 判定ルーチン ){$ans = $cctld
last;
}
}
print $ans;#この場合は"国名B"と表示したい

$ip_dataを参照して$ip_sampleの値が$ip_dataのどの行に在るかの判定を行い
$ansへ該当する$ip_deta行の$cctldを返すようにしたいのですが
判定方法でつまずいています。gethostxxx関数を使えという方向は無しにして
元の$ip_dataを増やさずに行える極力短い判定のルーチンを教示おねがいします
このテの質問はwebプでやれと言われそうな気がするけど質問の内容が
板を選ぶ以前のレベルの自覚があるので敢えてこちらに投下しまふ。

543:デフォルトの名無しさん
06/03/32 06:32:36
こういうパズル的なのはどこでも答えてもらえそう

my $target = "222.4.0.0";
my @iptable = qw( 国名A-221.184.0.0-221.191.255.255 国名B-221.240.0.0-222.15.255.255 国名C-222.144.0.0-222.151.255.255 );

$target = pack("C"x4, split(/\./, $target));

for(@iptable){
my($country, $from, $to) = split /-/;
$from = pack("C"x4, split(/\./, $from));
$to = pack("C"x4, split(/\./, $to));
if($from le $target && $target le $to){
print "$countryが範囲内でした\n"
}
}

544:デフォルトの名無しさん
06/03/32 06:34:47
ありがとうございます
早速走らせて見ます


実は・・・・
- foreach (@ip_data) {
+ foreach ($ip_data) {
ですた、阿呆ですんませんです・・・ orz

545:デフォルトの名無しさん
06/03/32 07:51:49
その2万4千行のデータの状態によっては物凄く処理速度に差が出そうだ。
データを読みながら1回から2万4千回判定するのがいいか、
全部配列に読み込んでおよそ5回判定するのがいいか。

546:デフォルトの名無しさん
06/03/32 07:54:50
違った。14回?

547:542
06/03/32 14:00:16
>>543
web鯖にはまだ置いてませんが手元の環境では問題なく動きました。
答えを教えてもらうと、なるほどなぁと納得行くのですが
その答えをせめて自分で作れるまでにはなりたいです。
ネットでも資料沢山あるけどラクダ本がほしくなったので
日曜日にでも街に探しにイッテキマス
目標は脱ド初心者w

>>545
できれば色々なパターンをベンチ取って一番軽い処理を使いたいですw
どうしても重かったらIP国別データを2〜3000行程度に分けて
IPの最初の8ビットを参照して呼び分けてみようかなと思ってますが・・・

548:デフォルトの名無しさん
06/03/32 20:14:29
>>547
アルゴリズムの勉強したほうがいいよ。
>>545-546でバイナリサーチに気づかないのはかなり重症

549:デフォルトの名無しさん
06/04/02 05:03:28
>>547


550:デフォルトの名無しさん
06/04/02 05:08:26
スマソ。書き込む前に送信してもうた・・・

>>547
IPをキー、国名を値にもつハッシュを作り、データベースクラスにtieしてみては?
2万4千行をメモリに持つのはつらいと思う。

551:550
06/04/02 05:38:58
ちょっと練習で書いてみた。IPは悩んだ末、強引に10進数に変換した。

my $data = <<EOF;
A-221.184.0.0-221.191.255.255
B-221.240.0.0-222.15.255.255
C-222.144.0.0-222.151.255.255
EOF
unlink 'test.db';
use Fcntl;
use DB_File;
tie my %db, 'DB_File', 'test.db', O_RDWR|O_CREAT, 0644, $DB_BTREE or die;
foreach(split/\n/, $data) {
my ($country, $from, $to) = split /-/;
for($from, $to) {
s/(\d+)\.(\d+)\.(\d+)\.(\d+)/$1*256**3+$2*256*256+$3*256+$4/e;
}
$db{$from-1} = 'N/A';
$db{$to} = $country;
}
untie %db;
sub find_country {
my $query = shift;
$query =~ s/(\d+)\.(\d+)\.(\d+)\.(\d)/$1*256**3+$2*256*256+$3*256+$4/e;
my $x = tie my %db, 'DB_File', 'test.db', O_RDONLY, 0644, $DB_BTREE or die;
my ($ip, $country) = ($query, 'N/A');
$x->seq($ip, $country, R_CURSOR);
return $country;
}

print find_country('221.239.0.1');

552:デフォルトの名無しさん
06/04/02 06:41:56
# IPアドレス→32bit整数
$ip = unpack('N', pack('CCCC', split(/\./, $ip)));
これで2倍くらいの速度になった
キャプチャが大きいんかなぁ

2個目のIPアドレス変換部分、最後が\d+じゃなくて\dになってたよ。
桁数が多いから計算ミスかと思ったけど、数字が文字列として尻についてただけなんだね。

553:デフォルトの名無しさん
06/04/04 17:06:58
>>552
use Socket; して inet_aton() 使ったら?


554:デフォルトの名無しさん
06/04/05 11:25:50
ベンチしたらinet_aton意外にとてつもなく遅いです。あとは
・「.」でばらすのはsplitより正規表現でキャプチャする方が速い
・4つの10進数から32bit整数にするのは、シフト>掛け算>pack-unpackの順で速い。
552の言うのとは逆の結果になったわけだがなんでかね?

Benchmark: running inet_aton, multiple_re, shift_re, unpack_re, unpack_split for at least 3 CPU seconds...
inet_aton: 5 wallclock secs ( 1.62 usr + 1.46 sys = 3.08 CPU) @ 425.97/s (n=1312)
multiple_re: 7 wallclock secs ( 3.26 usr + 0.00 sys = 3.26 CPU) @ 229803.99/s (n=749161)
shift_re: 3 wallclock secs ( 3.08 usr + 0.03 sys = 3.11 CPU) @ 274049.84/s (n=852295)
unpack_re: 3 wallclock secs ( 3.10 usr + 0.00 sys = 3.10 CPU) @ 183073.87/s (n=567529)
unpack_split: 4 wallclock secs ( 3.13 usr + 0.00 sys = 3.13 CPU) @ 119672.52/s (n=374575)


555:デフォルトの名無しさん
06/04/05 11:26:39

use Benchmark;
use Socket qw(inet_aton);
my $ip_a = 100.100.100.100;

timethese(undef,
{
unpack_split => sub {
my $ip = unpack('N', pack('CCCC', split(/\./, $ip_a)));
},
unpack_re => sub {
$ip_a =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
my $ip = unpack('N', pack('CCCC', $1, $2, $3, $4));
},
multiple_re => sub {
$ip_a =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
my $ip = $1*256*256*256 + $2*256*256 + $3*256 + $4;
},
shift_re => sub {
$ip_a =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
my $ip = $1 << 24 + $2 << 16 + $3 << 8 + $4;
},
inet_aton => sub {
my $ip = inet_aton($ip_a);
},
}
);


556:デフォルトの名無しさん
06/04/05 12:29:42
すまん、どうにも直観と反する結果なのでさらに調べていたらなんのことはない
my $ip_a = 100.100.100.100;

になっていたorz... もちろん正しくは

my $ip_a = '100.100.100.100';

なのでベンチ取り直した。

Benchmark: running inet_aton, multiple_re, shift_re, unpack_re, unpack_split for at least 3 CPU seconds...
inet_aton: 3 wallclock secs ( 3.16 usr + 0.00 sys = 3.16 CPU) @ 267949.37/s (n=846720)
multiple_re: 3 wallclock secs ( 3.16 usr + 0.00 sys = 3.16 CPU) @ 69144.94/s (n=218498)
shift_re: 4 wallclock secs ( 3.11 usr + 0.00 sys = 3.11 CPU) @ 74248.87/s (n=230914)
unpack_re: 3 wallclock secs ( 3.21 usr + 0.00 sys = 3.21 CPU) @ 68071.03/s (n=218508)
unpack_split: 2 wallclock secs ( 3.13 usr + 0.00 sys = 3.13 CPU) @ 95474.76/s (n=298836)

まとめ:

inet_atonはやっぱり速いので、自分で書くのはやめよう。


557:デフォルトの名無しさん
06/04/05 13:42:14
v文字列以外では
・ inet_atonはpackしたIPアドレス("100.100.100.100"なら"dddd")を返すのに、他は整数(1684300900)を算出している。
・ "+"演算子は"<<"演算子より優先度が高いため($1 << 24)とカッコで括らなければならない。

一応 sub getRandIPString { join '.', int rand 256, int rand 256, int rand 256, int rand 256; } といったものを用意して
全てバイナリ文字列を出力するコードにしてからベンチ取ったけど、inet_atonが常に1位だった。

今更だけど、後で直接比較可能にするための前処理として保存しとけば速度関係無かったね。

558:デフォルトの名無しさん
06/04/19 06:59:49
Mac OS XでPerlを使っています。
Macで作成したテキストを処理したいのですが、改行コードがCRになるのでうまく処理できません。
LFでないため、全て1行として認識されてしまいます。

標準入力を常にLFとして読み込んだ後、それに対してマッチや置換を行いたいのです。
以下のように書いてみましたけどダメでした。

while (<>) {
s/\x0D\x0A|\x0D|\x0A/\x0A/g;
if (/aaa/) {
print;
}
}

出力されたデータはLFになりましたが、マッチはうまくいきませんでした。
何かいいやり方はないものでしょうか。

559:デフォルトの名無しさん
06/04/19 09:14:57
求めてるのは<>使う前の $/ = "\x0D"; か /aaa/m あたりかも

560:558
06/04/19 19:51:43
>559さん

入力時の区切り文字をCRに決めてやればいいんですね。
解決しました。ありがとうございました。

561:デフォルトの名無しさん
06/04/19 23:24:22
すいません。行のナンバリングをリクエストしてもよろしいでしょうか。

あいうえお(段落1)
かきくけこ(段落2)
さしすせそ(段落3)

たちつてと(段落4)
なにぬねの(段落5)
はひふへほ(段落6)

という文章があって、これを、

1:あいうえお(段落1)
2:かきくけこ(段落2)
3:さしすせそ(段落3)

1:たちつてと(段落4)
2:なにぬねの(段落5)
3:はひふへほ(段落6)

のように空行をはさんで新たにナンバリングを開始したいのですが方法が思い浮かびません。


562:デフォルトの名無しさん
06/04/19 23:59:01
言いたいことが分からんが新たにナンバリングを開始したいところで
ナンバリング用の変数を初期化して空行を出力するだけじゃないのか?

563:デフォルトの名無しさん
06/04/20 02:27:54
>>561は、単純にすべての行に通し番号でナンバリングするプログラムは作れるのか?

564:561
06/04/20 23:04:01
>563

あっ、はい。

my $i = 0;

while (<STDIN>) {

if (/^./) {
print ++$i;
print ": ";
print;

}

}
ちょっと冗長ですけど。

565:デフォルトの名無しさん
06/04/21 00:11:57
うーん、、、自分で作りたい?それとも誰かにサクッと作って欲しい?

566:デフォルトの名無しさん
06/04/21 10:46:46
>>564
そこまでかけるなら
else で $i = 0; を書けないか?


567:デフォルトの名無しさん
06/04/21 10:55:29
空行が来たらカウントをリセットする、というと、こんな感じ?

$n = 1;
while (<>) {
 $n = 1 if (/^\s*$/
 print "$n: $_";
 $n++;
}


568:デフォルトの名無しさん
06/04/21 10:58:13
あ、閉括弧とか忘れた。まあいいや。脳内で修正してくれ。

569:561
06/04/21 22:35:44
>566

elseを使っても結果が変わらないんです。
マッチがヘボいんでしょうか。

>567

実行させると入力がぶっとんでしまいました…

>565

いろいろ試してみたのですが、自分の力ではムリっぽいです…
あつかましいとは承知していますが、作っていただくと助かります。

570:561
06/04/22 19:48:05
出来てしまいました!

my $i = 0;
while (<STDIN>) {
 if (/^..+/) {
 print ++$i;
 print ": ";
 print;
 } else {
 $i = 0;
 print;
 }
}

else文で「my $i = 0;」にしていたのがまずかったようで、
空行になっても$iが初期化されなかったみたいです。
レス下さったみなさん、ありがとうございました。
おさわがせしました。
私ってPerlの才能ないのかな…

571:デフォルトの名無しさん
06/04/23 05:53:25
>>570
完成おめ!
才能がどうかは知らないけど、結局経験じゃないですかね?
俺も本スレで叩かれたりしながら勉強してますw

一応俺が用意してたスクリプト貼っておきます。。。
use strict;
my $c = 1;
open IN, 'filename';
while (<IN>) {
    (/^$/) ? $c = 1 : print $c++ . ':';
    print;
}
close IN;


572:561
06/04/23 12:42:55
>571

ありがとうございます。
自分のはだいぶ冗長だと思うので、用意していただいたスクリプトを参考にさせていただきます。
今自分の書いたものを見直してみると、if (/^./)でいいですよね...
恥ずかしい...

573:デフォルトの名無しさん
06/04/23 14:49:38
>>570
myはローカル変数の宣言。単なる代入では無いよ。
myを使うと、同名の新たな一時変数を作る事になる。
んで、詳しい条件は忘れたが、ブロック抜ける時とかに消える。

長いコードになると
「この変数名って他で使われて無かったっけ…?」
ってなるけど、my使えばそんな心配が減るワケ。

574:デフォルトの名無しさん
06/04/23 18:39:57
>>558

>>560では解決しちゃったみたいだけど、これ俺も知りたい。
コマンドラインから入力されたテキストの改行コードをLFに統一、
という前処理をしてからwhileループ処理をかますってできるのかな?
あんまりセパレータとか変えたくないんで。

575:デフォルトの名無しさん
06/04/23 21:25:04
>>574
>セパレータとか変えたくない

なんで?

576:デフォルトの名無しさん
06/04/23 22:10:27
>575

セパレータも一文字として認識されてしまわない?
回避する方法があればいいんだけど。

577:デフォルトの名無しさん
06/04/23 23:08:11
認識できるから区切れるんだが。
いまいち言いたいことが分からん。

578:デフォルトの名無しさん
06/04/23 23:40:26
メタキャラ「.」って改行を除く一文字にマッチするじゃん。
でも「.」もCRにマッチしちゃわね?
LF読み込むときと処理が変わっちゃうからイライラすんだよね。

579:デフォルトの名無しさん
06/04/24 00:10:50
自分の都合に合わせてセパレーター変えるなり置換するなりすりゃいいじゃん。

580:デフォルトの名無しさん
06/04/24 03:57:29
あーいう変数ってlocal出来ないっけ?

581:デフォルトの名無しさん
06/04/24 23:15:36
whileで読み込む前に処理しとくって、
できないってことでおk?

582:デフォルトの名無しさん
06/04/25 04:35:21
質問は質問スレ行け

583:デフォルトの名無しさん
06/05/01 22:52:12
Win32::GUI::ListView ソートメソッドないじゃん・・・orz

 た・・・す・・・け・・・て・・・・


584:デフォルトの名無しさん
06/06/15 22:54:05
りすとびゅーか...
なにもかもがな・・つ・・か・・し・・ぃ・・

585:デフォルトの名無しさん
06/06/16 20:37:02
一瞬、不治痛の電子帳票ソフトかと思った

586:デフォルトの名無しさん
06/07/09 11:10:16
初めまして。

浅知恵で掲示板の改造を試みています。
オートリンク機能付き掲示板に記事修正機能を追加したのですが、
記事修正をするたびに、文中にあるリンク先が
<A href=URLリンク(www.a.b.c)<) target=_blank>
URLリンク(www.a.b.c<)
と、タグが無制限に追加されていきます。

そこでお願いしたいのは、
記事修正時にファイルに保存されているデータ
----------------------------------------------
<A HREF=URLリンク(www.a.b.c)<)
----------------------------------------------
を一端
----------------------------------------------
URLリンク(www.a.b.c)
----------------------------------------------
というデータに戻すサブルーチンを作成したいのですが、
行き詰まっています。
よろしくお願いします。

オートリンク機能のスクリプトは以下の通りです。
***************************************************************
#オートリンク
sub auto_link {
my($msg) = $_[0];
$msg =~ s/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#]+)/$1<A HREF=$2 target=_blank>$2<\/A>/g;
return $msg;
}


587:デフォルトの名無しさん
06/07/09 11:15:33
↑ ありゃ、文字がおかしい。

全角にしてありますが、Aタグです。
URLリンク(www.a.b.c) の後ろは、</A>

588:デフォルトの名無しさん
06/07/10 01:11:44
そういう時は表示時にオートリンクを適用すればいい。
保存時にいじっちゃうと後でいじりにくくなるというのは定説。
ファイル構造上、改行の置換とかは仕方無いと思うけどさ。

589:デフォルトの名無しさん
06/07/10 10:01:41
>>586

ようするに、すでに<A>タグ化されている部分を除外すればいいわけだな?

590:デフォルトの名無しさん
06/07/10 10:03:49
ああ、ごめん。>>586にいての>>588の意見を読んでなかった。
確かに保存時は生データのまま記録し置いて、閲覧時に
http:なんた

591:デフォルトの名無しさん
06/07/10 10:06:04
>>590
途中で送信しちゃった。

保存時は生で。閲覧時は「http:なんたら」の条件で抽出→<A>タグ化のほうが効率的だね。

592:586
06/07/10 14:07:06
みなさん、ありがとうございました。
発想の転換ですね。
私の堅い頭では思いつきませんでした。

保存時ではなく、表示時にオートリンクを適用でうまくいきました。
ありがとうございました。

593:デフォルトの名無しさん
06/07/18 22:59:04
俺は全く解らないので、申し訳ないけど誰かに頼みたいorz
ボタンを押したらカウントが増えるシンプルなシステムを作って欲しいです。

594:デフォルトの名無しさん
06/07/19 02:59:10
どこにでもあると思うが…

595:デフォルトの名無しさん
06/07/19 16:54:07
>>593

use CGI;
my $cgi=new CGI;
my $n=$cgi->param('n')+1;
print $cgi->header(-charset=>'Shift_JIS'),
$cgi->start_html(-lang=>'ja',-encoding=>'Shift_JIS',-title=>'simple count'),
$cgi->a({href=>"$ENV{'SCRIPT_NAME'}?n=$n"},$n),
$cgi->end_html;


596:デフォルトの名無しさん
06/07/20 00:02:04
>>593

<?php
if (! $HTTP_COOKIE_VARS{'Num'}) {
$start=0; $i=1; setcookie("Num",$i,time()+30);
} else {
$i=$HTTP_COOKIE_VARS{'Num'}+1;
setcookie("Num",$i,time()+30);
}
echo $start.$HTTP_COOKIE_VARS{'Num'}."<br>\n";
echo "<form method=POST action=><input type=submit value=count_up></form>\n";
?>


597:デフォルトの名無しさん
06/07/20 01:41:37
>>593
<input type="button" value="0" onclick="this.value++">

598:デフォルトの名無しさん
06/07/20 02:06:11
どんどん簡易な物になってくな

599:デフォルトの名無しさん
06/07/20 20:10:06
つーかスレタイに反してPerlですらなくなってるな
このスレ自体がアレなのは確かだが

600:デフォルトの名無しさん
06/07/21 00:49:26
待て待て、Web物とは一言も言ってないぞ?

# CUI
use Term::ReadKey;
binmode STDIN;
ReadMode 3;
print my $count = 0;
print "\r", ++$count while (defined ReadKey 0);
ReadMode 0;

# GUI(Perl/Tk)版
use Tk;
my $count = 0;
my $mw = MainWindow->new();
my $label = $mw->Label(-text => $count)->pack();
$mw->Button(
-text => 'Count up',
-command => sub { $label->configure(-text => ++$count) },
)->pack();
MainLoop;

601:デフォルトの名無しさん
06/07/21 12:46:48
Term::ReadKey を入れてないおいらが来ましたよ。

#!/usr/bin/env perl
print my $i = 0 ; $i ++ ;
system "stty -echo" ;
print "¥e[1K" . $i ++ while <STDIN> ;
system "stty echo" ;

このスクリプト ( hoge.pl )、perlcc が通ったのには笑った。@5.6.6
perlcc -o counter hoge.pl

602:デフォルトの名無しさん
06/07/21 13:24:24
なんで笑えるのかわからんが、もっと短くしてみた。
perl -e '`stty cbreak -echo`;print $i++,"\r" while getc'

603:デフォルトの名無しさん
06/07/21 13:49:37
cbreakはサポートしてないものもあるよ

604:デフォルトの名無しさん
06/07/21 17:11:49
>>602
いや system 関数ってみるからにコンパイルの時コケそうじゃないですか。

605:デフォルトの名無しさん
06/08/06 00:00:47
頭が混乱してきた。
ETRADEのポートフォリオのページを取得するスクリプトつくって。

6時間考えたけど、いっぱいいっぱい。だめぽ

606:デフォルトの名無しさん
06/08/06 00:29:53
既製品を探すという作業を飛ばしたようだね。

607:デフォルトの名無しさん
06/08/06 00:52:42
>>605 だけど。
やっとできたよ。

しばらく POSTとGETの仕組みと INPUTタブの仕組みを
忘れてた。



608:デフォルトの名無しさん
06/08/06 03:44:01
inputタブだってよ

609:デフォルトの名無しさん
06/08/08 10:10:47
ディレクトリ内にある.jpgファイルを全て
1.jpg, 2.jpg, 3.jpg, ... というように連番のファイル名に変換するプログラムを
つくって頂けませんか。
そのディレクトリには.jpgファイルしか置いてません。(全部変換する)
もともとのファイル名は、*****.jpg もしくは ******.jpg (*は数字)
という形です。
こういうプログラムを作るのにperlが適しているのかどうかはわからないのですが、
他に作成依頼できそうなスレがみつからなかったので。

お願いします。

610:デフォルトの名無しさん
06/08/08 10:16:02
folderの中にある複数の圧縮ファイル(zip, rar)の中のファイルの情報の一覧(text fileでOK)
を作ってくれるscriptがほしいです。

611:デフォルトの名無しさん
06/08/08 10:55:06
>>609
perl -e'my $i = 1; foreach(glob("*.jpg")) { rename $_, "$i.jpg"; $i ++;}'
動くかどうかはしらん

612:609
06/08/08 11:52:55
>611
できてるぽいです!
ありがとうございます。

613:デフォルトの名無しさん
06/08/08 16:23:26
アクセスしてきたPCのポートスキャンをするcgi
目的:自分のPCのセキュリティーチェックをしたいので

614:デフォルトの名無しさん
06/08/08 18:06:17
嘘付け

615:613
06/08/08 18:24:59
最初はIPアドレスを入力して入力されたIPをもつPCのポートスキャンができるようにとおもったのですが、
>>614さんのように邪推される方がいると思ったのでアクセスしてきたPCのポートスキャンということにしました。
さらにいうなら、IDパスワード認証をしてそのチェックを通過した人だけセキュリティーチェックできるようにお願いします。
もっともIDパスワードをさらしておいて他人のPCのポートスキャンができることも懸念されますが・・・・。。

616:デフォルトの名無しさん
06/08/10 16:45:15
>>610
while (<*>) {
 if ((/\.zip$/i) or (/\.rar$/i)) {
  open(AAA, "unrar l $_ |") || die "err";
  $list = <AAA>;
  close(AAA);
 }
}
こんなもんで、よろしいんじゃないですか?

617:デフォルトの名無しさん
06/08/24 20:33:41
perl -e '`stty cbreak -echo`;print $i++,"\r" while getc'

618:デフォルトの名無しさん
06/08/30 14:53:13
LINUXのCRONで動かしているPerlがあるんだが、自分自身2重起動を阻止したい。
リクエストお願いします。

619:デフォルトの名無しさん
06/08/30 15:34:33
>>618
例えばlockファイルを使う。perldoc -q lock

use Fcntl qw(:DEFAULT :flock);

sysopen(LCK, "/tmp/lockfile", O_WRONLY|O_CREAT) or die "open: $!\n";
flock(LCK, LOCK_EX|LOCK_NB) or die "flock: $!\n";

sleep 100;

620:デフォルトの名無しさん
06/08/31 19:03:19
なんじゃそりゃ

621:デフォルトの名無しさん
06/09/07 21:41:40
5分経過したら再認証のページに飛ぶものを作って下さい。
お願いします。。。

622:デフォルトの名無しさん
06/09/07 21:50:03
>>621
仕様がはっきりしなさ過ぎて無理

623:デフォルトの名無しさん
06/09/07 22:12:49
>622
タイムアウト処理だけでも無理ですか?

624:デフォルトの名無しさん
06/09/07 23:40:42
同じ学校のやつか?

964 名前:デフォルトの名無しさん 投稿日:2006/09/07(木) 21:36:27
質問です!
ログインして10分経過後、再認証を行なうプログラムについて教えて下さい。
学校の課題なんですがさっぱり分りません。。。


625:デフォルトの名無しさん
06/09/08 00:13:21
マルチかよ

626:デフォルトの名無しさん
06/09/08 16:15:04
>>623
sleep(300);

627:デフォルトの名無しさん
06/09/08 19:48:59
>>621

 鯖に「ID=************が何時何分何秒にログインした」ってファイルを
作っておいて、その人がCGIにアクセスするたびに最終ログイン時刻を
チェックする。規定時間をオーバーしていると、ログイン画面に飛ばす。

って感じのやつはダメ?

628:デフォルトの名無しさん
06/09/12 05:37:49
そーいや前に、タイムアウトの処理を
HTMLのタグでやってるの見たことある

ブラウザ側で簡単に回避されるっての…w

629:デフォルトの名無しさん
06/10/22 15:34:50
マルチにマジレス カコワルイ

630:デフォルトの名無しさん
06/10/23 11:35:28
質問させてください

「開始」と「終了」の間に入っている文字列をリンクアドレスにするにはどうすればいいですか?

たとえば$STR="開始test.html終了"; とあったとき
出力結果が

<a href=test.html>test.html</a>になるようにしたいんです。


$START="開始";
$END="終了";


631:デフォルトの名無しさん
06/10/23 12:07:01
2chに書き込むスクリプトってどうやるんですか?

632:デフォルトの名無しさん
06/10/23 12:34:24
2ちゃんねる2GETスクリプトの改良おねがいします
スレリンク(tech板)

633:デフォルトの名無しさん
06/10/23 12:46:54
Perlでつくってください

634:デフォルトの名無しさん
06/10/23 13:30:24
>>630
正規表現で一発やん

635:デフォルトの名無しさん
06/10/23 14:49:23
>>634
ごめんなさい、わからないんです。
とりあえず、ここまでは出来ました
「開始」と「終了」に挟まれる$1を抽出した後、その$1をURL形式に変えてアドレスにして置き換えていきたいんです。

例えば
$in{'data'}="開始なにか終了hogehogehoge開始てすと終了"だったとしたら
これが

$in{'data'}="<a href=URLリンク(hoge.com)なにか</a>hogehogehoge<a href=URLリンク(hoge.com)てすと</a>"

みたいな形式に置き換えたいんです


use URI::Escape;
$START="開始";
$END="終了";
$SEARCHADD="URLリンク(hoge.com)

while ($in{'data'}=~ m/$START(.*)$END/g) {
$output = $1;
$urikeyoutput = uri_escape($output);
$in{'data'} =~ s/$START$output$END/<a href=$SEARCHADD$urikeyoutput>$output<\/a/g;
}

636:デフォルトの名無しさん
06/10/23 16:03:57
>>635
> while ($in{'data'}=~ m/$START(.*)$END/g) {

これを

while ($in{'data'}=~ m/$START(.*?)$END/g) {

ってすりゃいいんじゃないか?
(.* じゃなくて .*? ってことね)


637:デフォルトの名無しさん
06/10/23 16:23:43
>>636
変えてみましたけど、無理でした
while ($in{'data'}=~ m/$START(.*?)$END/g) { の時点で拾ってきてくれてないみたいです
書き方おかしいですか?

638:デフォルトの名無しさん
06/10/23 16:53:05
>>637
while ($in{'data'}=~ m/$START(.*)$END/g) { ... の中で更に
$in{'data'} =~ s/$START$output$END/ ... なんてしてるから
マッチ開始位置がおかしな事になる。下の一文で済む。

$in{'data'} =~ s{\Q$START\E(.*?)\Q$END\E} {
  my $url = $1;
  my $query = uri_escape($url);
  qq|<a href="$SEARCHADD$query">$url</a>|;
}eg;

639:デフォルトの名無しさん
06/10/23 16:58:47
>>638
ご回答ありがとうございます。
その方法で問題なく出来ましたが

開始、終了のペアが2つ以上でてきた場合エラーが発生します。

$in{'data'} ="開始テスト1終了開始テスト2終了";
だったとき

最初の開始から 最後の終了までを1つだと思っているみたいです

640:デフォルトの名無しさん
06/10/23 17:16:50
>>639
大方 (.*?) を (.*) と写し間違えているんだろう。

641:デフォルトの名無しさん
06/10/23 17:19:31
>>640

>>638さんのものを、そのままコピペして使ってるのですが
>>639に書いた症状が出ます


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4348日前に更新/217 KB
担当:undef