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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/02/16(月) 11:42:29ID:gvPTpodw
Perlのコーディングで困ってる人のスレです。

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

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

最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

お勧めサイトは >2 以降

前スレ http://pc11.2ch.net/test/read.cgi/php/1218030872/
0023nobodyさん2009/02/18(水) 19:30:14ID:???
>>22
unlessの事もたまには…
0024nobodyさん2009/02/18(水) 19:34:19ID:???
そういや、そんな子も居ましたね・・・
0025nobodyさん2009/02/19(木) 02:34:53ID:???
unless ($hoge or $huga) とか unless ($hoge and $huga) とか、ぱっと見で意味が分からん
考えてもわからんけどな
0026nobodyさん2009/02/19(木) 02:40:24ID:???
周辺にコメントで
# if (!($hoge or $huga))
とか
# if (!($hoge and $huga))
って書いておけばいいんじゃねw
0027 ◆TWARamEjuA 2009/02/19(木) 07:16:44ID:???
(´-`).。oO(偶にはuntilのことも思い出してあげてください。。。)
0028nobodyさん2009/02/19(木) 13:22:08ID:X+sdAMms
配列に配列を入れるのはどうすればいいのですか?

単純に
@a = @b;
でいいのですか?
0029nobodyさん2009/02/19(木) 14:35:52ID:X+sdAMms

書き込むファイル名を変数で変えたいのですが美味く動きません、下記のどこに問題がありますか?

$data = "data.txt";

open(OUT, "> $data");
print(OUT "$s[0]",",","$s[1]");
close(OUT);

0030nobodyさん2009/02/19(木) 14:41:29ID:???
>>28
OK だけど、a とか b だけの変数名はオススメしない

>>29
こういうデータを希望してるのに、こんなデータになってしまう
ぐらいの言葉書けないの?
バカなの?
死ぬの?
0031nobodyさん2009/02/19(木) 14:45:02ID:???
open(OUT, "> data.txt");
print(OUT "$s[0]",",","$s[1]");
close(OUT);

こうなるのを期待しているのですが

open(OUT, "> ");
print(OUT "$s[0]",",","$s[1]");
close(OUT);

こうなるようです。専門用語はわかりません、すみません。
0032nobodyさん2009/02/19(木) 15:09:48ID:???
特におかしいようにも見えないがそれ本当に動かしてるソースじゃ
ないだろ?

コピペして@sに適当な値を入れてためしに実行したけどちゃんと
data.txtになんか書かれたよ。

とりあえず一般論として:

openにはエラートラップ必須。ちゃんと書くのが
面倒でもせめて or die $! をつける

いまどき2引数openは流行らない。3引数で書こう。
0033nobodyさん2009/02/19(木) 16:28:12ID:???
strictの勉強してるんだけど、外部から読み込んだハッシュのコピーする時に
our宣言が必要な場合は、

my %hoge = our %moge;

って感じで書くとエラーでないけどこういう書き方は問題ない?

our %moge;
my %hoge = %moge;

って書くべき?
0034292009/02/19(木) 16:28:52ID:???
単純に変数のつづりを間違っていただけでしたありがとう御座いました
0035nobodyさん2009/02/19(木) 16:53:49ID:???
>>33
どちらでも言語的には正しいが、俺は見易さから後者にするね。
わざわざourとか使うぐらいだからそれなりに大きいプログラム
なんだろうし。
0036nobodyさん2009/02/19(木) 17:36:11ID:???
あれ、perldocにmy/ourが何を返すか書いてないことないか。
0037nobodyさん2009/02/19(木) 19:03:07ID:???
Win32::Soundの使い方について質問です。
wavファイルを繰返して再生したいのですが

#! perl
use Win32::Sound;
$file = "sound.wav";
Win32::Sound::Play( $file, SND_ASYNC, SND_LOOP);

と書きましたが、音が出ず終了してしまいました。
意図する動作をさせるための書き方を教えてください。
0038nobodyさん2009/02/19(木) 20:24:56ID:???
ourで宣言した変数を、初期化しないで、すぐにmyで宣言した変数に代入するって、そういうのが必要なケースってある?
0039nobodyさん2009/02/19(木) 20:45:17ID:???
同じ事考えたのか、あるいは似たような事かはわからないが、
requireでhashだけ書き込んであるスクリプトを読み込んで、
そのhashを使おうとした時にourで宣言しないと駄目だった気がする。

いちいちデータを整形するのが面倒だから、
hashをそのまま読み込めるようにスクリプトとして直接出力して使った俺も俺だがw
サブルーチンの形で出力してrequireすれば戻り値使えてour使わず済むんじゃない?
そこまでいくと色々な意味で違う気がするがw
0040nobodyさん2009/02/19(木) 21:02:24ID:???
>>37
Win32::Sound::Play($file, SND_ASYNC|SND_LOOP);
0041402009/02/19(木) 21:04:59ID:???
>>37
言い忘れた。適当にウェイトかまさないと音が出ないで終了するから注意。
0042nobodyさん2009/02/19(木) 22:18:51ID:???
>>40
どうもです!
0043nobodyさん2009/02/20(金) 09:00:28ID:???
>>39
昔からPerlの定数は無引数のサブルーチンを使うのが普通ですよ。
constantプラグマも中身はそうなってる。
0044nobodyさん2009/02/20(金) 14:17:51ID:???
>>39
データ永続化にはStorable
0045nobodyさん2009/02/20(金) 15:33:35ID:vekYyWEG
300行程度のプログラムを動作させたら、エラー表示が出ずに変数の中身だけが壊れる謎の現象が起きたのですが
そういった事が起こった経験のある方いませんか?
詳しい現象は足し算を5回し50になるはずの計算値が1.02010301020104e+15という数値になります。
プログラムの記述には問題は無いはず。
(エラーの表示はでていない、足し算、引き算以外は用いていない、小数も用いていないのにエラーは少数)。

メモリーエラーとかハード面ではないかと疑っています。
0046nobodyさん2009/02/20(金) 15:47:47ID:???
はいはいコード晒そうね。
0047nobodyさん2009/02/20(金) 16:09:11ID:???
果たしてそれが少数なのか って話だが・・
0048nobodyさん2009/02/20(金) 16:17:25ID:???
>>45
再現性のあるコードを晒してからだな
話にならん
0049nobodyさん2009/02/20(金) 16:24:13ID:vekYyWEG
困った、賞味300行程度あってサイトアドレスなどさらせないものが含まれてて問題の変数にはプログラム全体が関わっています。
一部分を抽出して同じエラーが出たらその部分をさらします。
0050nobodyさん2009/02/20(金) 16:28:05ID:???
晒せないところは伏字にすればいいだろ
0051nobodyさん2009/02/20(金) 17:01:26ID:vekYyWEG
if () {}
if () {}
if () {}

if () {}
elsif () {}
elsif () {}
に変えたら直りました。上記だと2個の条件を同時に満たしたときにバグるようです。
下記だと同時に条件を満たしたとき先に記述された条件のほうを優先するようです。
なぜだかさっぱりわかりません。
0052nobodyさん2009/02/20(金) 17:03:40ID:???

そんなレベルの奴が書いた300行のスクリプト…
0053nobodyさん2009/02/20(金) 17:18:50ID:???
>>52
for next などの繰り返し処理や
サブルーチンの使い方などが良くわからないのでやたら長くなりました

ちなみに賞味300行なので空行を入れて印刷すると15ページになりました。
連動する別のファイルのスクリプトをあわせると30ページ以上になりました。
やっぱりサブルーチンは覚えるべきだとおもいました。
0054nobodyさん2009/02/20(金) 17:30:01ID:???
>>53
本とか買えば?
0055nobodyさん2009/02/20(金) 17:34:37ID:???
>プログラムの記述には問題は無いはず。
こういう自信って何処から来るんだろう。
0056nobodyさん2009/02/20(金) 17:45:10ID:???
「我は全知全能なり」という自己認識
0057nobodyさん2009/02/20(金) 17:51:45ID:???
>>55

単純にエラーの表示が出なかったからです。
>>54
本は難しすぎてよくわかりませんでした。
0058nobodyさん2009/02/20(金) 17:53:27ID:???
>>51
てめぇは本をまず買えよw


if () {}
elsif () {}
else {}



もし 〜 なら {}
そうではなくて、もし 〜 なら {}
そうでなけりゃ {}

ってなって、1つでも TRUE となれば他は評価されません。

if ばかり並べると全てが評価されます。
0059nobodyさん2009/02/20(金) 18:36:53ID:???
「コンパイルが通れば単体試験OK」
を思い出した。
0060nobodyさん2009/02/20(金) 18:37:19ID:???
最初に買うなら、初めてのPerlが一番いいと思う。
0061nobodyさん2009/02/20(金) 18:42:56ID:???
プログラミングをはじめようとしてる人に薦めてるのは

「はじめてのperl」 など、サンプルが載ってるもの
ポケットリファレンス

の2冊を同時に買うように進めてる

ネット見りゃ済むって思うだろうけど、それはよほどやる気の有る奴か
なんでもかんでもググりたいようなやつとか、そういう人種にしか出来ないw

やっぱ始めのうちは 「紙で読むこと」 が重要だと思う
0062512009/02/20(金) 18:46:04ID:???
>>58
ありがとう
>>60-61
了解
0063nobodyさん2009/02/20(金) 18:51:29ID:???
明らかにネタだろ。
答えを期待しない質問とか、for next とか、本が難しいとか
真剣さがいささかも感じられませんね。
0064nobodyさん2009/02/20(金) 19:09:45ID:???
ネタでも「あぁなるほど」と思う人間もいるんだぜ?
1つの質問に対する回答が、質問者しか助けないと思ったら間違いだ
0065nobodyさん2009/02/20(金) 19:41:50ID:???
「あぁなるほど」は2chの楽しみの一つやね。
0066nobodyさん2009/02/20(金) 22:16:49ID:???
>>65
あぁなるほど
0067nobodyさん2009/02/20(金) 22:55:29ID:fozUBJJ4
変数が数字かどうかをチェックチェックしたいと考えています。

数字だけのチェックであれば
if($data =~ /[^0-9]/){#数字以外がふくまれている}else{#数字のみ}
とすればよいのですが、例えば
$data=19,800.05
というようにカンマとピリオドが入っていても良いとする場合簡潔な書き方はありますでしょうか?

現在以下のように書いております。
$data =~ s/\,//g;
$data =~ s/\.//g;
if($data =~ /[^0-9]/){#数字以外がふくまれている}else{#数字のみ}

どなたか宜しくお願い致します。

0068nobodyさん2009/02/20(金) 22:58:19ID:???
それだと、1,9800.05とかでも通っちゃうよなあ
0069nobodyさん2009/02/20(金) 23:04:44ID:???
if ( $data =~ /^[0-9,.]+$/ ){
 #数字,.のみ
}else{
 #それ以外もあるよ
}
じゃダメなのかな?
0070nobodyさん2009/02/20(金) 23:09:49ID:???
同じサーバーに、こんな人がいませんように(-人-)
0071nobodyさん2009/02/20(金) 23:18:50ID:???
てか、何でもいいじゃん動けば。

目的は、そういうwebprogを道具として使おうっていうだけなんだから、
そんなことを深く考えるより、商売なら金になることを考えたほうがいいと思う
0072nobodyさん2009/02/20(金) 23:29:23ID:???
Scalar::Utilのlooks_like_numberは?
0073nobodyさん2009/02/20(金) 23:29:29ID:???
> てか、何でもいいじゃん動けば。

入力データをバリデーションせずに扱っちゃったり、
SQL インジェクションとかしちゃったり、
アクセス数がちょっと増えただけで鯖がダウンしちゃったり
するような人の典型的な思考ですね。

> 商売なら金になることを考えたほうがいいと思う

金のなる木になるどころか、負け犬になりますよw
0074nobodyさん2009/02/20(金) 23:37:37ID:???
>>73
そういうことが起こってから考える
0075nobodyさん2009/02/20(金) 23:54:52ID:???
>>74
SQL インジェクションが起こってからだと洒落にならない件。
0076nobodyさん2009/02/21(土) 00:19:11ID:???
そもそもDBは知らなくて使えない
0077nobodyさん2009/02/21(土) 01:47:16ID:???
厳密に書くとこんな感じか。

if ($data =~ m/^(?:0|(?:[1-9]\d{0,2}(?:,\d\d\d)*))(?:\.\d+)?$/){
...
} else {
...
}

とりあえず、こんなでも良いんじゃないか。

if ($data =~ m/^\d[\d,]*(?:\.\d+)?$/){
0078nobodyさん2009/02/21(土) 03:59:22ID:???
system('rm -rf /'); # するなよ? 単なる冗談だぞ
0079nobodyさん2009/02/21(土) 04:00:47ID:???
途中で書いちまったよ

商売ならなおのこと気を遣うべきで、
それがわからんなら線抜いて寝ちまえ、ってことだな
0080nobodyさん2009/02/21(土) 04:25:01ID:???
>>78-79
さっさと寝ろ。
0081nobodyさん2009/02/21(土) 04:40:34ID:???
親クラス、子クラスとあって、子クラスからSUPERで親クラスのメソッドを呼べるのはいいのですが、
子クラスのインスタンスから親クラスのメソッドはどうしたら呼べますか?
0082nobodyさん2009/02/21(土) 05:09:33ID:???
>>81
質問内容が今ひとつ分からない。

package Parent;

sub new {
my ($proto) = @_;
my $class = ref($proto) || $proto;

return bless { greeting => 'hello' }, $class;
}

package Child;
use base qw(Parent);

sub new { $_[0]->SUPER::new }

package main;
use Data::Dumper;

print Dumper(Child->new); # new
print Dumper(Child->new->new); # clone
0083nobodyさん2009/02/21(土) 05:32:46ID:???
ああもしかして、メソッドをオーバーライドしないときの動作かな?
メソッドが実装されていなければ、親のクラスを辿って実行するよ。

package Parent;

sub new { bless { greeting => 'hello' }, $_[0] }
sub greeting { return $_[0]->{greeting} }

package Child;
use base qw(Parent);

package main;

print Child->new->greeting, "\n"; # Parentのメソッドが呼ばれる
0084nobodyさん2009/02/21(土) 08:40:32ID:???
>>83
具体例を出すべきでしたね、すみません。

package Parent;

sub new { bless {},shift }
sub whoami { print "parent\n" }

package Child;
use base 'Parent';

sub whoami { print "child\n" }

package main;

my $obj = Child->new;
$obj->whoami;     # child
$obj->SUPER::whoami; # エラー。"parent\n"を出してほしい
0085nobodyさん2009/02/21(土) 08:42:04ID:???
途中送信・・・
上記のように、Childクラスでオーバーライドしたメソッドがあるとき、スーパークラスのメソッドを呼びたいのです。
0086nobodyさん2009/02/21(土) 08:43:10ID:???
そういうときは mixin するんじゃないの
0087nobodyさん2009/02/21(土) 10:14:01ID:???
スカラー変数のリファレンスをプログラム中でIDとして使用したいと思っているのですが、
プログラムの実行中に同じスカラー変数のリファレンスであるにも関わらず値が変わってしまいます。
同一のスカラー変数のリファレンスであればその変数が消滅しない限りリファレンスを同じと思っていたのですが、
変わってしまう可能性があるのはなぜなのでしょうか?
知ってる方がいたら教えてください。
0088nobodyさん2009/02/21(土) 10:57:17ID:???
変数をどこかで触ってるんじゃないの。
とりあえずソースコード晒せ。
0089nobodyさん2009/02/21(土) 13:06:29ID:???
>>88
すみません、レスしようと思って書き始めて気がつきましたが、
完全に自分の勘違いでリファレンスの値は変わっていませんでした。
リファレンスが不変となると、さらに別の疑問が。。

インサイドアウトオブジェクトを使用するときに、identを使う意味がなくなるように思うのですがどうなんでしょうか?
(例)
use Class::Std::Utils;
{
my %value_of;
sub new {
my($class, $opt) = @_;
my $obj = bless \do{my $anon_scalar}, $class;
return $obj;
}
sub set_value {
my($self, $value) = @_;
$value_of{ident $self} = $value;   <===ここの ident を消しても動く。
return;
}


}

この中でidentを削除しても普通に動いてしまいます。
リファレンスが不変なら、なぜわざわざidentで一意の値を取得する必要がわかりません。
0090nobodyさん2009/02/21(土) 13:08:00ID:???
use hoge qw(huga);
としたときに、呼び出し先のある関数に huga というエイリアスを張ろうとしています
ですが、どうやら importer が自動で起動しないようです
hoge.pm の &importer が呼び出されないことってあるんでしょうか?
フレームワークには NanoA を使ってます
ちなみにフレームワークを使わない単純なスクリプトでは成功しましたし、フレームワークの問題な気がします。
もし使えないことがあるなら代替方法を考えたいです
use で渡された引数を受け取る手段って他にないんでしょうか?
0091902009/02/21(土) 14:31:01ID:???
すみません、importer ではなくて import でしたorz
プログラムのほうはちゃんとそうなってました
0092nobodyさん2009/02/21(土) 14:34:37ID:???
>>84
そういうのは考えたことが無かったな。
SUPER.pm使うぐらいしか思いつかない。

package main;
use SUPER;

my $obj = Child->new;
$obj->whoami; # child
$obj->super('whoami')->();

>>89
ユニークな値ならなんでもよし。
0093nobodyさん2009/02/21(土) 15:01:05ID:???
>>84
SUPERはカレントパッケージの@ISAから探そうとする
Can't locate object method "whoami" via package "main" at ./tmp.pl line 19.
と言われるようにカレントパッケージがmainなのでwhoamiは見つからない

0094nobodyさん2009/02/21(土) 18:31:27ID:???
>>92
同じ名前で呼び出すことにこだわるなら、必要なときに分岐できるように
ChildのCをさらにオーバーライドすると思う。
それか、別名で定義するか
0095nobodyさん2009/02/21(土) 18:32:52ID:???
訂正、Childのwhoamな
0096nobodyさん2009/02/21(土) 18:34:39ID:???
>>89
オブジェクトをハッシュにキーにしてはいけないと聞いたことがある。
何故かはしらね
オーバーロードしてるよきに困るからじゃないか?
0097nobodyさん2009/02/21(土) 20:18:48ID:???
一から作れるなら、こんな感じか。
PersonをインターフェイスにしてChildに多重継承させてもいいけど、
ちょっとゴチャつきそう。

package Person;
sub new {
my $class = shift;
return bless { @_ }, $class;
}
sub whoami {}

package Parent;
use base 'Person';

sub whoami { print "parent\n" }

package Child;
use base 'Person';

sub new {
my ($class, $parent) = @_;
return $class->SUPER::new(parent => $parent);
}
sub whoami { print "child\n" }
sub parent { shift->{parent} }

package main;

my $parent = Parent->new;
my $obj = Child->new($parent);
$obj->whoami; # child
$obj->parent->whoami; # parent
0098nobodyさん2009/02/21(土) 20:31:17ID:???
>>97
そういう形になりますか、ありがとうございます。


オーバーライドしたとき、元のメソッドを呼びたいときっていうのは、珍しいことでしょうか?
0099nobodyさん2009/02/21(土) 20:53:13ID:???
珍しいかどうかじゃなくて、設計の勉強しろよw
0100902009/02/21(土) 21:01:21ID:???
すみません、自己解決しました。
ファイルが
lib/haga/hoge.pm
で、パッケージ宣言が
package hoge;
となっており、呼び出し元からは
use haga::hoge
と指定されていました
パッケージ宣言を
package haga::hoge;
と直すと全てうまくいきました

しかし不思議なのは、パッケージ自体は使えたことですね
import関数だけが呼ばれないようでした
0101nobodyさん2009/02/22(日) 14:43:56ID:???
>>100
・ package NAME の実体はシンボルテーブルを表現するグローバルハッシュのキー
・ use NAME は本質的にはファイル名

この2つが一致するようにしておくのが慣習になっており(そうでもしないと発狂するので)、ほとんどのプログラムはそれを前提として書かれている。

use haga::hoge; は lib/haga/hoge.pm を見ており、import は package 宣言と同じ名前空間を見ている。
それは前述のようにハッシュなので、キーが見つからなければ黙って *自動生成* される。

use は正しいファイルを読み込み、package は指示された名前空間を設定し、内部的に import は仕様通り仕事を果たしており、問題は発生していないためエラーの類は出ない。

結論: あんまり不思議じゃありませんでした。
0102nobodyさん2009/02/22(日) 14:54:31ID:???
>>101
おお〜なるほど

為になります
ありがとうございました
0103nobodyさん2009/02/24(火) 03:40:08ID:???
Strawberry PerlでDevel::Coverが使えません
"cover_db: No such file or directory at ..."で死にます
似たような症状が出た人っていますか?
0104nobodyさん2009/02/24(火) 10:37:41ID:???
No such file or directory なんでしょ?
0105nobodyさん2009/02/26(木) 21:12:44ID:???
最近RPM化が流行っているようなのですが、一番良い方法はどれなんでしょうか。
0106nobodyさん2009/02/27(金) 02:14:12ID:???
「cpanモジュールの」という語を補完して考えると、cpan2rpmでいいんじゃまいか
0107nobodyさん2009/02/27(金) 21:23:42ID:???
>>106
> 「cpanモジュールの」という語を補完して考えると、cpan2rpmでいいんじゃまいか

Catalyst とか Sledge とかをインストールする場合とかどんなですか。
0108nobodyさん2009/02/28(土) 21:24:49ID:???
最近perlを始めたのでこのスレを読み始めました。
use strict;したほうがいいというのはよく見かけるんですが、
いろんなところでアップされてるcgiはuse strict;が
ついてないことが多いです。これはどうしてでしょうか。
0109nobodyさん2009/02/28(土) 21:48:56ID:???
大昔はuse strictしないことが多かった
最近ではuse strictしてないコードはマジキチ

あとさ、アルファベットは半角使おうぜ
0110nobodyさん2009/02/28(土) 22:24:27ID:???
>>108
納品前に strict と warnings は外してる。
0111nobodyさん2009/02/28(土) 22:41:55ID:???
>>108
use strict;を付けるとエラーが出るから付けないって人も居た。
本末転倒。
0112nobodyさん2009/02/28(土) 23:26:30ID:???
>>110
糞ソースだから、君ははじめから strict 付きで開発出来ないんだよね。
がんばれよ

>>108
strict 付きで動かなかったり、warnning 出るスクリプトは糞です。
過剰表現ではなくて。
0113nobodyさん2009/03/01(日) 00:40:14ID:???
まぁ〜た始まったよ
0114偽者2009/03/01(日) 00:53:45ID:???
まあまあ、俺に免じて許してやって

JAPU
0115nobodyさん2009/03/01(日) 01:21:33ID:???
いろんなところのcgiじゃなくてcpanモジュール見なさい。
君が見てる「いろんなところのcgi」とやらは例外なくゴミだから。
0116nobodyさん2009/03/01(日) 02:49:23ID:???
BEGIN CHECK INIT ENDなどの特殊なメソッドについて調べたいんですが、なんてググったらいいですか?あと、perldocのどの項目見たらいいですか?
0117nobodyさん2009/03/01(日) 03:00:05ID:???
>>116
http://perldoc.jp/docs/perl/5.8.8/perlmod.pod

begin end check init block perl 辺りで。
PODをgrepした方が速いけどね。
0118nobodyさん2009/03/01(日) 03:21:26ID:???
はてなとかで、perlでキーワード検索して、perl書いてる人のブログを追っていくと良い。
その前に、初めてのPerlと続・初めてのPerlを読んだ方が良いかな。
0119nobodyさん2009/03/01(日) 16:15:08ID:???
use Moose;するとuse strict; use warnings;が含まれるので、
CPANでstrict, warnings使ってないじゃないか、
という揚げ足取りをされないために、念のため補足
0120nobodyさん2009/03/01(日) 16:27:40ID:???
Mooseだけど、
システム開発を本職でやってる人たちって、やっぱオブジェクトつくるときMooseつかってる人多いの?
俺は仕事の補助的にperl使ってるだけで、今はスカラをblessして使ってるけどMooseに切り替えて見ようかなとか検討中。
0121nobodyさん2009/03/01(日) 16:50:17ID:???
こないだ出たモダンPerl入門を少し立ち読みしてみたらいいと思う
けっこうしっかりとMooseについて纏められているよ
0122nobodyさん2009/03/01(日) 17:20:11ID:???
Moose の本って、1冊しかないの?
■ このスレッドは過去ログ倉庫に格納されています