Audio-Beep-0.07 >
0.10
との差分
Audio::Beep 0.10 と 0.07 の差分
1 | 1 | |
2 | 2 | =encoding euc-jp |
3 | 3 | |
4 | 4 | =head1 名前 |
5 | 5 | |
6 | 6 | Audio::Beep - 素敵な方法で、コンピュータの警報機を使うモジュール |
7 | 7 | |
8 | 8 | =head1 概要 |
9 | 9 | |
10 | 10 | #関数的な簡単なやりかた |
11 | 11 | use Audio::Beep; |
12 | 12 | |
13 | 13 | beep($freq, $milliseconds); |
14 | 14 | |
15 | 15 | #オブジェクト指向的なより音楽的なやりかた |
16 | 16 | use Audio::Beep; |
17 | 17 | |
18 | 18 | my $beeper = Audio::Beep->new(); |
19 | 19 | |
20 | 20 | # lilypond サブセット文法が受け入れられます。 |
21 | 21 | # 相対的な記法がデフォルトです。 |
22 | 22 | # (今現在実装されています) |
23 | 23 | my $music = "g' f bes' c8 f d4 c8 f d4 bes c g f2"; |
24 | 24 | # モデスト・ムソルグスキーの「展覧会の絵」 |
25 | 25 | |
26 | 26 | $beeper->play( $music ); |
27 | 27 | |
28 | 28 | =head1 使用法 |
29 | 29 | |
30 | 30 | =head2 export される関数 |
31 | 31 | |
32 | 32 | =over 4 |
33 | 33 | |
34 | 34 | =item beep([FREQUENCY], [DURATION]); |
35 | 35 | |
36 | 36 | Plays a customizable beep out of your computer beeper. |
37 | 37 | |
38 | 38 | カスタマイズできるビープ音を、コンピュータの警報機で再生します。 |
39 | 39 | |
40 | 40 | FREQUENCY is in Hz. Defaults to 440. |
41 | 41 | |
42 | 42 | FREQUENCY は、Hz で、デフォルトは、440です。 |
43 | 43 | |
44 | 44 | DURATION is in milliseconds. Defaults to 100. |
45 | 45 | |
46 | 46 | DURATION は、ミリ秒で、デフォルトは100です。 |
47 | 47 | |
48 | 48 | =back |
49 | 49 | |
50 | 50 | =head2 オブジェクト指向メソッド |
51 | 51 | |
52 | 52 | =over 4 |
53 | 53 | |
54 | 54 | =item Audio::Beep->new([%options]) |
55 | 55 | |
56 | 56 | Returns a new "beeper" object. Follows the available |
57 | 57 | options for the new method to be passed in hash fashion. |
58 | 58 | |
59 | 59 | 新しい"beeper" オブジェクトを返します。 |
60 | 60 | new メソッドには、下記のオプションがハッシュのかたちで渡されます。 |
61 | 61 | |
62 | 62 | =back |
63 | 63 | |
64 | 64 | =over 8 |
65 | 65 | |
66 | 66 | =item player => [player object | player module] |
67 | 67 | |
68 | 68 | You can initialize your player object and then give it to the |
69 | 69 | Audio::Beep object. |
70 | 70 | Player objects come from Audio::Beep submodules (like |
71 | 71 | Audio::Beep::Linux::beep). |
72 | 72 | |
73 | 73 | 演奏オブジェクトを初期化でき、それから、 |
74 | 74 | Audio::Beep オブジェクトに、演奏オブジェクトを渡せます。 |
75 | 75 | 演奏オブジェクトは Audio::Beep サブモジュール(Audio::Beep::Linux::Beepのような)からもたらされます。 |
76 | 76 | |
77 | 77 | If you're lazy (as any good programmer should be) |
78 | 78 | you can give a string as a player, |
79 | 79 | like C<"Audio::Beep::Linux::PP"> or even just C<"Linux::PP">: the method |
80 | 80 | will prepend the C<Audio::Beep> namespace, require the module and call |
81 | 81 | the new method on it for you. |
82 | 82 | The new method will try to look up the best player |
83 | 83 | on your platform if you don't specify one. |
84 | 84 | So the following is all valid: |
85 | 85 | |
86 | 86 | もし、あなたが怠惰なら(どんなよいプログラマはそうあるべきように)、player として、 |
87 | 87 | C<"Audio::Beep::Linux::PP">か、ただ、C<"Linux::PP">のような文字列をあたえることができます: |
88 | 88 | メソッドはC<"Audio::Beep">名前空間を先頭に付け加え(訳註:prepend)し、 |
89 | 89 | そのモジュールを require し、new メソッドをその上で呼び出します。 |
90 | 90 | |
91 | 91 | use Audio::Beep; |
92 | 92 | |
93 | 93 | #とても怠惰 (通常、正しいことを行うべきです) |
94 | 94 | my $beeper = Audio::Beep->new(); |
95 | 95 | |
96 | 96 | #まだ怠惰。 |
97 | 97 | my $beeper2 = Audio::Beep->new(player => 'Linux::PP'); |
98 | 98 | |
99 | 99 | #なかなか怠惰。 |
100 | 100 | my $beeper3 = Audio::Beep->new( |
101 | 101 | player => 'Audio::Beep::Win32::API' |
102 | 102 | ); |
103 | 103 | |
104 | 104 | #怠惰じゃないが、より可変性がある。 |
105 | 105 | require Audio::Beep::Linux::beep; |
106 | 106 | my $beeper4 = Audio::Beep->new( |
107 | 107 | player => Audio::Beep::Linux::beep->new( |
108 | 108 | path => '/home/foo/bin/beep/' |
109 | 109 | ) |
110 | 110 | ); |
111 | 111 | |
112 | 112 | |
113 | 113 | =item rest => [ms] |
114 | 114 | |
115 | 115 | Sets the rest in milliseconds between every sound played (and |
116 | 116 | even pause). This is useful for users which computer beeper has problems |
117 | 117 | and would just stick to the first sound played. |
118 | 118 | For example on my PowerbookG3 i have to set this around 120 milliseconds. |
119 | 119 | In that way i can still hear some music. Otherwise is just a long single beep. |
120 | 120 | |
121 | 121 | 演奏されるサウンド(とポーズ)ごとに、ミリ秒の休憩をセットします。 |
122 | 122 | このことは、問題のあるコンピュータの警報機のユーザ - |
123 | 123 | 演奏される最初の音を突き刺すような - にとって、有益です。 |
124 | 124 | たとえば、私の PowerbookGCで は、120ミリ秒あたりをセットしなければなりません。 |
125 | 125 | このようにすれば、まだ、音楽を聞くことができます。 |
126 | 126 | さもなくば、長い単一のビープになります。 |
127 | 127 | |
128 | 128 | =back |
129 | 129 | |
130 | 130 | =over 4 |
131 | 131 | |
132 | 132 | =item $beeper->play( $music ) |
133 | 133 | |
134 | 134 | Plays the "music" written in $music. |
135 | 135 | The accepted format is a subset of lilypond.org syntax. |
136 | 136 | The string is a space separated list of notes to play. |
137 | 137 | See the NOTATION section below for more info. |
138 | 138 | |
139 | 139 | $music にかかれた"音楽"を演奏します。 |
140 | 140 | 受け入れるフォーマットは lilypond.org の文法のサブセットです。 |
141 | 141 | 文字列はスペースで分割された演奏する音符のリストです。 |
142 | 142 | 詳しくは、後述の記法のセクションを見て下さい。 |
143 | 143 | |
144 | 144 | =item $beeper->player( [player] ) |
145 | 145 | |
146 | 146 | Sets the player object that will be used to play your music. |
147 | 147 | See the player option above at the C<new> method for more info. |
148 | 148 | With no parameter it just gives you back the current player. |
149 | 149 | |
150 | 150 | 音楽を演奏するのに使った演奏オブジェクトをセットします。 |
151 | 151 | 詳しくは、上述のC<new>メソッドの player オプションを見て下さい。 |
152 | 152 | パラメータをあたえなければ、現在の player を戻します。 |
153 | 153 | |
154 | 154 | =item $beeper->rest( [ms] ) |
155 | 155 | |
156 | 156 | Sets the extra rest between each note. |
157 | 157 | See the rest option above at the C<new> method for more info. |
158 | 158 | With no parameter it gives you back the current rest. |
159 | 159 | |
160 | 160 | それぞれの音符の間に特別の休憩をセットします。 |
161 | 161 | 詳しくは、上述のC<new>メソッドの rest オプションを見て下さい。 |
162 | 162 | パラメータをあたえなければ、現在の rest を戻します。 |
163 | 163 | |
164 | 164 | =back |
165 | 165 | |
166 | 166 | =head1 記法 |
167 | 167 | |
168 | 168 | The defaults at start are middle octave C and a quarter length. |
169 | 169 | Standard notation is the relative notation. |
170 | 170 | Here is an explanation from Lilypond documentation: |
171 | 171 | |
172 | 172 | 最初のデフォルトは、中間のオクターブのドで、1/4長です。 |
173 | 173 | 標準の記法は相対的な記法です。Lilypond ドキュメントにある説明です; |
174 | 174 | |
175 | 175 | If no octave changing marks are used, the basic interval between |
176 | 176 | this and the last note is always taken to be a fourth or less |
177 | 177 | (This distance is determined without regarding alterations; |
178 | 178 | a fisis following a ceses will be put above the ceses) |
179 | 179 | |
180 | 180 | もし、オクターブを変更するマークが使われなければ、 |
181 | 181 | これと最後の音符の間の基本的な間隔は常に1/4かより少なくなります。 |
182 | 182 | (この間隔は変更に注意せずに決定されます; |
183 | 183 | a fisis following a ceses will be put above the ceses) |
184 | 184 | |
185 | 185 | The octave changing marks ' and , can be added to raise or lower |
186 | 186 | the pitch by an extra octave. |
187 | 187 | |
188 | 188 | オクターブを変更するマークは ' で、特別なオクターブでピッチをあげたり下げたり |
189 | 189 | できます。 |
190 | 190 | |
191 | 191 | You can switch from relative to non relative notation (in which you specify for |
192 | 192 | every note the octave) using the C<\norel> and C<\rel> commands (see below) |
193 | 193 | |
194 | 194 | C<\norel>と、C<\rel> コマンド(後述)を使って、相対から相対でない記法にスイッチできます |
195 | 195 | (音符ごとにオクターブを特定します)。 |
196 | 196 | |
197 | 197 | =head2 音符 |
198 | 198 | |
199 | 199 | Every note has the following structure: |
200 | 200 | |
201 | 201 | 全ての音符には下記の構造があります。 |
202 | 202 | |
203 | 203 | [note][flat|sharp][octave][duration][dots] |
204 | 204 | |
205 | 205 | [音符][フラット|シャープ][オクターブ][長さ][ドット] |
206 | 206 | |
207 | 207 | NB: previous note duration is used if omitted. |
208 | 208 | "Flatness", "Sharpness" and "Dottiness" are reset after each note. |
209 | 209 | |
210 | 210 | 注意:省略されると前の音符の持続時間が使われます。 |
211 | 211 | "Flatness"と、"Sharpness"と、"Dottiness" は、音符ごとにリセットされます。 |
212 | 212 | |
213 | 213 | =over 4 |
214 | 214 | |
215 | 215 | =item note |
216 | 216 | |
217 | 217 | A note can be any of [c d e f g a b] or [r] for rest. |
218 | 218 | |
219 | 219 | 音符は[c d e f g a b] か、休符の[r] のどれかです。 |
220 | 220 | |
221 | 221 | =item flat or sharp |
222 | 222 | |
223 | 223 | A sharp note is produced postponing a "is" to the note itself |
224 | 224 | (like "cis" for a C#). |
225 | 225 | |
226 | 226 | シャープの音符は、"is"を音符の後に置くことで、作れます。 |
227 | 227 | (C#のために、"cis"のようにします) |
228 | 228 | |
229 | 229 | A flat note is produced adding a "es" or "s" |
230 | 230 | (so "aes" and "as" are both an A flat). |
231 | 231 | |
232 | 232 | フラットの音符は、"es"か、"s"を音符の後に置くことで、作れます。 |
233 | 233 | ("aes"と、"as"は、どちらもAフラットです) |
234 | 234 | |
235 | 235 | =item octave |
236 | 236 | |
237 | 237 | A ' (apostrophe) raise one octave, while a , (comma) lower it. |
238 | 238 | |
239 | 239 | '(アポストロフィ) は、オクターブをひとつあげます。 |
240 | 240 | 一方、,(カンマ)は、オクターブをひとつ下げます。 |
241 | 241 | |
242 | 242 | =item duration |
243 | 243 | |
244 | 244 | A duration is expressed with a number. |
245 | 245 | A 4 is a beat, a 1 is a whole 4/4 measure. Higher the number, shorter the note. |
246 | 246 | |
247 | 247 | duration は、数字で表します。 |
248 | 248 | 4 は、ビートで、1 は、まったく4/4の長さです。 |
249 | 249 | 数字が高ければ高いほど、音符は短くなります。 |
250 | 250 | |
251 | 251 | =item dots |
252 | 252 | |
253 | 253 | You can add dots after the duration number to add half its length. |
254 | 254 | So a4. is an A note long 1/4 + 1/8 and gis2.. is a G# long 7/8 (1/2 + 1/4 + 1/8) |
255 | 255 | |
256 | 256 | durationの数字の後に、ドットを加えることができ、その長さの半分を加えることができます。 |
257 | 257 | a4. でしたら、ラの 1/4 + 1/8 の長さの音符ですし、gis2 は、ソ# 8/7(1/2 + 1/4 + 1/8)の長さです。 |
258 | 258 | |
259 | 259 | =item 特記: "r" |
260 | 260 | |
261 | 261 | A r note means a rest. You can still use duration and dots parameters. |
262 | 262 | |
263 | 263 | r 音符は、休符を意味します。duration と、dots のパラメタを使うことができます。 |
264 | 264 | |
265 | 265 | =back |
266 | 266 | |
267 | 267 | =head2 特別なコマンド |
268 | 268 | |
269 | 269 | Special commands always begin with a "\". They change the behavior of the |
270 | 270 | parser or the music played. Unlike in the Lilypond original syntax, these |
271 | 271 | commands are embedded between notes so they have a slightly different syntax. |
272 | 272 | |
273 | 273 | 特別なコマンドは常に、"\" で始まります。 |
274 | 274 | パーサか、演奏される音楽の振る舞いを変更します。Lilypondのオリジナルの文法とは違って、 |
275 | 275 | これらのコマンドは音符の間に埋め込まれます。それで、少々違った文法になっています。 |
276 | 276 | |
277 | 277 | =over 4 |
278 | 278 | |
279 | 279 | =item \bpm(\d+) |
280 | 280 | |
281 | 281 | You can use this option to change the tempo of the music. |
282 | 282 | The only parameter you can use is a number following the bpm string |
283 | 283 | (like "bpm144"). |
284 | 284 | BPM stands for Beats Per Minute. |
285 | 285 | The default is 120 BPM. |
286 | 286 | You can also invoke this command as C<\tempo> |
287 | 287 | |
288 | 288 | このオプションを使って、音楽のテンポを変更できます。 |
289 | 289 | 使うパラメタは、bpmの後に数字が続く文字列です("bpm144"のような)。 |
290 | 290 | BPM は、Beats Per Minute を意味します。デフォルトは 120 BPM です。 |
291 | 291 | C<\tempo> のようなコマンドで、呼び出すこともできます。 |
292 | 292 | |
293 | 293 | =item \norel |
294 | 294 | |
295 | 295 | Switches the relative mode off. From here afterward you have to always specify |
296 | 296 | the octave where the note is. |
297 | 297 | |
298 | 298 | 相対モードをオフにするスイッチです。 |
299 | 299 | ここから後は、いつも、音符がある場所のオクターブを特定する必要があります。 |
300 | 300 | |
301 | 301 | =item \rel |
302 | 302 | |
303 | 303 | Switches the relative mode on. This is the default. |
304 | 304 | |
305 | 305 | 相対モードをオンにするスイッチです。これはデフォルトです。 |
306 | 306 | |
307 | 307 | =item \transpose([',]+) |
308 | 308 | |
309 | 309 | You can transpose all your music up or down some octave. |
310 | 310 | ' (apostrophe) raise octave. , (comma) lowers it. This has effect just |
311 | 311 | if you are in non-relative mode. |
312 | 312 | |
313 | 313 | 全ての音楽のオクターブをいくつか上げるか下げるか置き換えます。 |
314 | 314 | '(アポストロフィ)はオクターブを上げます。,(comma)はオクターブを下げます。 |
315 | 315 | 相対モードでないモードでだけ、これは効果があります。 |
316 | 316 | |
317 | 317 | =back |
318 | 318 | |
319 | 319 | =head2 コメント |
320 | 320 | |
321 | 321 | You can embed comments in your music the Perl way. Everything after a # |
322 | will be ignored | |
322 | will be ignored | |
323 | 323 | |
324 | 音楽にPerlの方法でコメントを埋め込めます。 | |
324 | 音楽にPerlの方法でコメントを埋め込めます。 #の後の全てのものは無視されます。 | |
325 | ファイルの最後まで、#の後の全てのものは無視されます。 | |
326 | 325 | |
327 | 326 | =head2 音楽の例 |
328 | 327 | |
329 | my $scale = << | |
328 | my $scale = <<EOS; | |
330 | 329 | \rel \bpm144 |
331 | 330 | c d e f g a b c2. r4 # a scale going up |
332 | 331 | c b a g f e d c1 # and then down |
333 | 332 | EOS |
334 | 333 | |
335 | my $music = << | |
334 | my $music = <<EOM; # a Smashing Pumpkins tune | |
336 | 335 | \bpm90 \norel \transpose'' |
337 | 336 | d8 a, e a, d a, fis16 d a,8 |
338 | 337 | d a, e a, d a, fis16 d a,8 |
339 | 338 | EOM |
340 | 339 | |
341 | my $love_will_tear_us_apart = <<'EOLOVE'; # a happier tune | |
342 | \bpm160 | |
343 | d'8 | |
344 | e1 fis4 g8 fis4 e8 d4 | |
345 | b2.. d8 a2.. d8 | |
346 | e1 fis4 g8 fis4 e8 d4 | |
347 | b2.. d8 a1 | |
348 | EOLOVE | |
349 | ||
350 | ||
351 | 340 | There should be extra examples in the "music" directory of this tarball. |
352 | 341 | |
353 | 342 | tarballの"music"ディレクトリに、特別な例があるでしょう。 |
354 | 343 | |
355 | 344 | =head1 例 |
356 | 345 | |
357 | 346 | #大きなビープ |
358 | 347 | perl -MAudio::Beep -ne 'print and beep(550, 1000) if /ERROR/i' logfile |
359 | 348 | |
360 | 349 | # PCをホフマンモードにする (courtesy of Thomas Klausner) |
361 | 350 | perl -MAudio::Beep -e 'beep(21 + rand 1000, rand 300) while 1' |
362 | 351 | |
363 | 352 | #あなたの新しいミュージックプレイヤー |
364 | 353 | perl -mAudio::Beep -0777e 'Audio::Beep->new->play(<>)' musicfile |
365 | 354 | |
366 | 355 | =head1 必要条件 |
367 | 356 | |
368 | 357 | =head2 Linux |
369 | 358 | |
370 | 359 | Requires either the "beep" program by Johnathan Nightingale |
371 | 360 | (you should find sources in this tarball) SUID root or you to be root (that's |
372 | 361 | because we need writing access to the /dev/console device). |
373 | 362 | If you don't have the "beep" program this library will also assume some kernel |
374 | 363 | constants which may vary from kernel to kernel (or not, i'm no kernel expert). |
375 | 364 | Anyway this was tested on a 2.4.20 kernel compiled for i386. |
376 | 365 | With the same kernel i have problems on my PowerBook G3 (it plays a continous |
377 | 366 | single beep). See the C<rest> method if you'd like to play something anyway. |
378 | 367 | |
379 | 368 | Johnathan Nightingale による、"beep"プログラム |
380 | 369 | (tarballのソースで見つけるはずです)を必要とします。 |
381 | 370 | rootにSUIDするか、rootになる必要があります |
382 | 371 | (/dev/consoleデバイスに書き込みアクセスする必要があるからです)。 |
383 | 372 | "beep"プログラムがなければ、このライブラリは、 |
384 | 373 | kernelからkernelに変えるいくつかのkernel定数を想定します |
385 | 374 | (違うかもしれない。私はkernelエキスパートではないので)。 |
386 | 375 | とにかく、このモジュールは、i386用にコンパイルされた2.4.20 kernel でテストされています。 |
387 | 376 | 同じkernelで私のPowerBook G3に問題があります(単一のbeepを連続して演奏します)。 |
388 | 377 | とにかく、何かを演奏したい場合は、C<rest>メソッドを見て下さい。 |
389 | 378 | |
390 | 379 | =head2 Windows |
391 | 380 | |
392 | 381 | Requires Windows NT, 2000 or XP and the Win32::API module. |
393 | 382 | You can find sources on CPAN. |
394 | 383 | Some PPM precompiled packages are at http://dada.perl.it/PPM/ |
395 | 384 | No support is available for Windows 95, 98 and ME yet: |
396 | 385 | that would require some assembler and an XS module. |
397 | 386 | |
398 | 387 | Windows NT か 2000 か XP と、Win32::APIモジュールを必要とします。 |
399 | 388 | CPANでソースを見付けることができます。 |
400 | 389 | プリコンパイルされたパッケージはhttp://data.perl.it/RPM/ にあります。 |
401 | 390 | Window 95, 98, ME は、まだ、サポートしていません: |
402 | 391 | それはアセンブラと、XSモジュールを必要とします。 |
403 | 392 | |
404 | 393 | =head1 バックエンド |
405 | 394 | |
406 | 395 | If you are a developer interested in having Audio::Beep working on your |
407 | 396 | platform, you should think about writing a backend module. |
408 | 397 | A backend module for Beep should offer just a couple of methods: |
409 | 398 | |
410 | 399 | Audio::Beepを自分のプラットフォームで動かせるのに関心のある開発者なら、 |
411 | 400 | バックエンドモジュールを書くことについて考えるべきです。 |
412 | 401 | Beepのための、バックエンドモジュールは1組のメソッドを提供すべきです: |
413 | 402 | |
414 | 403 | NB: FREQUENCY is in Hertz. DURATION in milliseconds |
415 | 404 | |
416 | 405 | 注意:FREQUENCY は、ヘルツであり、DURATIONは、ミリ秒です。 |
417 | 406 | |
418 | 407 | =over 4 |
419 | 408 | |
420 | 409 | =item new([%options]) |
421 | 410 | |
422 | 411 | This is kinda obvious. Take in the options you like. Keep the hash fashion |
423 | 412 | for parameters, thanks. |
424 | 413 | |
425 | 414 | これはある程度自明です。お好みならオプションを入れて下さい。 |
426 | 415 | パラメータはハッシュの形式です。よろしく。 |
427 | 416 | |
428 | 417 | =item play(FREQUENCY, DURATION) |
429 | 418 | |
430 | 419 | Plays a single sound. |
431 | 420 | |
432 | 421 | 単一の音を演奏します。 |
433 | 422 | |
434 | 423 | =item rest(DURATION) |
435 | 424 | |
436 | 425 | Rests a DURATION amount of time |
437 | 426 | |
438 | 427 | DURATIONの時間、休止させます。 |
439 | 428 | |
440 | 429 | =back |
441 | 430 | |
442 | 431 | =head1 TODO |
443 | 432 | |
444 | 433 | This module works for me, but if someone wants to help here is some cool stuff |
445 | 434 | to do: |
446 | 435 | |
447 | 436 | このモジュールは、私のために働きます。ですが、助けてくださるなら、 |
448 | 437 | やるべき、cool stuff があります: |
449 | 438 | |
450 | 439 | - an XS backend |
451 | 440 | |
452 | 441 | - an XS Windoze backend (look at the Prima project for some useful code) |
453 | 442 | |
454 | - some work is needed on Windows Makefile part | |
455 | ||
456 | 443 | =head1 バグ |
457 | 444 | |
458 | 445 | もちろん、いくつかは。 |
459 | 446 | |
460 | 447 | =head1 著作権 |
461 | 448 | |
462 | 449 | (原文まま) |
463 | 450 | |
464 | 451 | Copyright 2003 Giulio Motta <giulienk@cpan.org>. |
465 | 452 | |
466 | 453 | This library is free software; you can redistribute it and/or |
467 | 454 | modify it under the same terms as Perl itself. |
468 | ||
469 | =head1 翻訳について | |
470 | ||
471 | 翻訳者:加藤敦 (ktat.is@gmail.com) | |
472 | ||
473 | Perlドキュメント日本語訳 Project にて、 | |
474 | Perlモジュール、ドキュメントの翻訳を行っております。 | |
475 | ||
476 | http://perldocjp.sourceforge.jp | |
477 | http://sourceforge.jp/projects/perldocjp/ | |
478 | http://www.freeml.com/ctrl/html/MLInfoForm/perldocjp@freeml.com | |
479 | http://www.perldoc.jp |