[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 04/04 01:09 / Filesize : 256 KB / Number-of Response : 807
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Perlについての質問箱 41箱目



1 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 03:03:00 ]
"The duct tape of the Internet" こと、Perl についての質問箱です。
"There's more than one way to do it" ということで、
Perl の奥深さについて皆で語り合い、追求してまいりましょう。

CGI についての質問は板違いです。WEB プログラミング板でどうぞ。
CGI と Perlの区別がつかない人も WEB プログラミング板に行ってください。
(WEB プログラミング板: pc11.2ch.net/php/)

CGI の質問は答えが Perl と全然関係ない話に帰着する場合が
多かったりするので WEB プログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI 以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。

www.perl.org/get.html
● 2009/08/07 現在の最新版: 5.10.0

▼ 前スレ
Perlについての質問箱 40箱目
pc12.2ch.net/test/read.cgi/tech/1243631674/

リンク集は >>2-3
Perl 日本語処理の基礎の基礎 >>4
過去スレは >>5-6 あたり

231 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 19:20:01 ]
>>227
韓国の辞書も北朝鮮の辞書も持ってません

232 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 21:30:07 ]
>>320
画像->画像表示を示すURI、WWW::Scraper -> Web::Scraperの間違いだな。
訂正サンクス。

>>231
「単品で迷うなら素直にランチにしなよ」とか普通に使う用途なんだが、
こんな簡単な日本語取り違えるとはゆとりのなせる業か。
>オツムが弱そう。バカっぽいな。

233 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 21:40:07 ]
>>225
空文字列じゃなく "\x00" x 文字列長 になるんじゃないかな

print length 'foo' ^ 'foo', '/', unpack 'H6', 'foo' ^ 'foo'; # 3/000000

>>214
内部的にどう扱われているかでなく、数値コンテキストに置いた時に
解釈可能な文字列かどうかを判定したいなら Scalar::Util::looks_like_number()

cpansearch.perl.org/src/GBARR/Scalar-List-Utils-1.21/lib/Scalar/Util/PP.pm

234 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 21:47:31 ]
>>233
そのようだな。補足サンクス。Cと混同していたようだ。

235 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 21:53:24 ]
>>232
で?
その”普通に使う用途”が載ってるのは、韓国の辞書?北朝鮮の辞書?

236 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 22:01:59 ]
>>235
引くに引けないのはわかるけど、負け戦で頑張っても意味無いよ。
黙って日本語を勉強しなおすといい。

237 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 22:03:40 ]
>>235
日本の辞書の例:
dic.yahoo.co.jp/dsearch?enc=UTF-8&p=%E7%B4%A0%E7%9B%B4&dtype=0&dname=0na&stype=0&pagenum=1&index=11591609974300
>>226は第2義しか頭にないらしい。
日本人なら文脈からして4義が5義と考えるのが普通。

238 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 22:04:56 ]
つーか大陸のレッテル貼れば何とかなるとか思ってある辺りがもうね。

239 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 22:07:36 ]
変なタイミングで中韓出してくる子は、大抵日本のお荷物。



240 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 22:49:12 ]
>>237
やっぱりチョンの会社の辞書を出したか。今は日本に帰化してるが。

241 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 22:55:57 ]
>>211をコピペして実行してみたけど、正常に実行できる。
問題点は他にあったんじゃ?

242 名前:デフォルトの名無しさん [2009/09/06(日) 23:32:31 ]
>>241
レスありがと
211だけど、仰るとおりperlのプロセスがループしてた
正常な状態だったら問題なく動いたわ
かなり時間を費やしてしまった……

基本的に引数は参照渡しでいいんだよね?


243 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 23:34:02 ]
>基本的に引数は参照渡しでいいんだよね?
どこでそんなの習ったんだ?

244 名前:デフォルトの名無しさん [2009/09/06(日) 23:36:47 ]
>どこでそんなの習ったんだ?

どこかのサイトに書いてあった記憶がある
片っ端から初心者向けサイト回ってたからどことは言えないけど
オレが勘違いしてるのかな

245 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 23:59:09 ]
たぶん、値のコピーを作らないように参照渡しにする、って書いてあったんだろうけど
Perlの関数呼び出しは値渡しじゃなくて変数渡しだから、わざわざリファレンスにする必要はないよ。
@_には引数がコピーされて入っているのではなく、引数そのものの別名になっている。

246 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 00:02:33 ]
配列やハッシュを渡すときは必要だけど。

247 名前:デフォルトの名無しさん [2009/09/07(月) 00:17:22 ]
レスありがとん

変数を渡すときはそのままでも値がコピーされなくて
配列とかハッシュはコピーされちゃうからメモリが勿体無いと

勉強になったわ

248 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 03:17:01 ]
>>247
サブルーチンの引数として配列やハッシュを複数渡すと、単一のフラットなリストとして @_ に展開されますが、エイリアスとしての動作は変わらないため値のコピーは発生しません。
>246 が言う必要性とは、「単一のフラットなリスト」にされては困る場合、すなわち引数を渡された関数内で個々の配列を峻別して処理しなければいけない場合に、参照渡しが必須になるという意味です。
ちなみにハッシュのキーに限り、キーそれ自体は変数ではないため、エイリアスの内容を変更しても元のハッシュのキーは変化しません。


249 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 04:52:06 ]
>>233
>空文字列じゃなく "¥x00" x 文字列長 になるんじゃないかな

じゃあ、結局データが文字列か数値かを知りたいときはどうするのがいいんでしょうか。
今まさに1と"1"を別に扱いたい場面に直面しています。



250 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 05:25:56 ]
>>249
データ構造を作り直して回避する。

251 名前:233 mailto:sage [2009/09/07(月) 05:56:07 ]
>>249
いや俺に訊かれても。その二つを区別しなきゃいけない状況に陥った事なんて無いし。

sub is_num { ($_[0] ^ $_[0]) !~ /^\x00/ }
print is_num($_) ? 'num' : 'str', "\n" for 0, '0', '+1e3', +1e3;

…とでもしときゃいいんじゃない。すっごくアホ臭いけど。

252 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 06:35:52 ]
はじめてCPANパッケージを作ろうとしている最中です。
質問があります。

(1) READMEの推奨される書き方やフォーマットはありますか。
(2) Changesの推奨される書き方やフォーマットはありますか。
(3) テストファイルが t/*.t のようですけど、test/*.pl にするのはよくないですか。
(4) パッケージのファイル名と、ライブラリ名が異なっていてもいいでしょうか。
 たとえば Foo というライブラリを提供するパッケージとして、
  Foo-entry-1.0.0.tar.gz  # 機能限定版
  Foo-full-1.0.0.tar.gz   # 機能強化版
 のように用途別・目的別に別々のパッケージを用意しようとしているんですが
 こういうのはまずいでしょうか。何か問題があれば教えてください。

253 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 07:32:29 ]
>>249
だから$foo ^ $fooの結果。0と0x00 x nは違うから。

正直、正規のプログラミングで1と"1"を区別したってろくなことないよ。
コアな部分をいじるようなスクリプトでない限り(Dumperみたいにね)、
Perlでそんな場面に遭遇するってことはあなたの設計がおかしい。

>>251
$foo ^ $foo eq '0' ? '数値' : '文字列'でおk。

>>252
とりあえずお前はこれは読んどけ。10回くらい読め。
perldoc.perl.org/perlnewmod.html

質問の内容からしてPAUSE使うのは100年早い気がする。
いちAuthorより。

254 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 07:38:21 ]
つーかここまで言って数値と文字列の見分け方が分からないってことは
ズブの素人だろうから、「基本的にPerlにそんなことはできない」と言い切った方が良かったかな。

1と'1'を区別したい理由かコードか何か晒してみ?多分瑕疵があるから。

255 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 07:41:49 ]
>>240
小学館ってチョンの会社だったの?

256 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 07:47:09 ]
俺も長年Perl使ってるが、'1'と1を明確に区別する必要性に駆られた記憶がないな。
参考に、どういうケースなのか教えて欲しい。

257 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 07:51:52 ]
>>256
>>249ではないが、友人が自作フレームワーク作ってて、引数の型によって
挙動を変えたいっつー場面で数値と文字列の比較の話を出してきた。
当然止めとけと言っておいた。

ドキュメント化されてない部分だからいつ仕様が変わってもおかしくないしな。

258 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 08:55:52 ]
データ型を検証するようなプログラムなら、1と'1'が区別できないと困る。
たとえばPerlでJSONのバリデータを作ろうとしたけど、1と'1'が区別できなくてまじ困る。
たとえば「name は文字列である」というスキーマを定義したとして、
{ "name": "1" } # これはvalid
{ "name": 1 } # これはだめ
としないといけない。
でもPerlでは1と'1'の区別をどうすればいいのかわからないから、正しい検証ができない。

#自分が使わないからといって、他の人も同じだとは思わないでください。お願いします。


259 名前:デフォルトの名無しさん [2009/09/07(月) 09:43:18 ]
>>258
設計が悪い。





260 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 09:51:43 ]
>>258
search.cpan.org/~makamaka/JSON-2.15/lib/JSON.pm
読んでみ。数値も文字列で格納することがあることが分かる。

どうしても必要ならJSONを自分でパースしてチェックすればいい。
JSONのレイヤーの問題なんだからPerlのレイヤーに落としてチェック
しようとする発想が間違っている。

261 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 10:10:20 ]
テストコード書いてみたよ
use JSON::Syck;
use Perl6::Say;

$foo = JSON::Syck::LoadFile('test.json');
say $foo->{foo} ^ $foo->{foo} eq '0' ? '数値' : '文字列';

--test.json--
{ foo : 1 }
--結果--
数値

--test.json--
{ foo : 0.5 }
--結果--
文字列

やっぱり発想自体が間違ってたね。
ちなみに0.5はともかくPerl/PHPやCも含む大抵の処理系では0.1は文字列にする方が正確。
↓こんなことになるからね。それがなぜか分かれば君も一歩大人。

for($i = 0; $i < 1; $i += 0.1){say "$i"}

262 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 11:32:39 ]
このスレが賑わう時はいきなりレベルが上がるから勉強になるわ

263 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 11:43:21 ]
> #自分が使わないからといって、他の人も同じだとは思わないでください。お願いします。

これには同意するが、スクリプト言語で文字の1と数値の1を見分けたい、ってのは
やっぱ何かが間違ってる

264 名前:デフォルトの名無しさん [2009/09/07(月) 12:09:03 ]
>>263
> これには同意するが、スクリプト言語で文字の1と数値の1を見分けたい、ってのは
> やっぱ何かが間違ってる


間違ってるのはそこじゃなくてアプローチ。
東京から熱海にいくのに「飛行機でいきたいので簡単な方法を教えてください」というようなもんだ。

そりゃ羽田-静岡富士山経由してもいけるが
新幹線を使おうよ。小田急+JRでもいい。


って話。

265 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 12:47:25 ]
↓ここでD51プレート持った鉄男登場

266 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 12:53:15 ]
>>263
>スクリプト言語で文字の1と数値の1を見分けたい、ってのは
>やっぱ何かが間違ってる

えーなんで?
*Perlでは*間違っているということなら同意するけど、スクリプト言語一般に広げないでほしい。
つーか、integerとstringの見分けがつかない言語が存在するなんて初めてしったわ。
PHPですらis_string()とかあるのに。

267 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 14:17:09 ]
Rubyだと逆に厳格だよね

268 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 15:08:15 ]
>>266
> つーか、integerとstringの見分けがつかない言語が存在するなんて初めてしったわ。

見分けがつかないんじゃなくて、区別されてないんだろ。


269 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 15:16:31 ]
つ シェルスクリプト
Perlの出自を考えれば文字列と数値を区別しないのも当然といえば当然。



270 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 15:27:31 ]
JSONも良いですが、symbolとstringをも区別するS式が最強ですね

271 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 16:04:06 ]
Perl/Tk を使って縦書き形式のテキストビューワーを作ろうとしているのですが、
括弧や句読点、長音記号等を 90度横倒しにして表示する良い方法が無いでしょうか?


272 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 16:09:10 ]
句読点は横倒しでおkじゃないぞ。


273 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 16:20:56 ]
>>271
単に縦書き用フォントを使えばいい。

何でも横倒しにすりゃいいってもんじゃないぞ。句読点もそうだが、
波ダッシュ字形問題が、縦書き用フォントを横にするだけでおkと思った
馬鹿外人のせいで起こってしまったことを忘れるな。

274 名前:271 mailto:sage [2009/09/07(月) 16:28:52 ]
>>272>>273
ご指摘、ご教示ありがとうございます
読み込んだ横書きテキストデータ中の文字を
横書きで問題が出る字形だけ
縦書き字形に変換するという方法で
なんとかやってみようと思います


275 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 16:41:07 ]
>>274
だから全部縦書き字形にしろって。お前なら絶対見落とすから。影響受けるのは記号だけじゃねーぞ。わかるか?
こういうのは意固地にならずに安直に安全側に転ぶように設計するのが鉄則。

何度も書くが、波ダッシュ問題は問題が出ない字形だと思ってそのまま横倒しにして起きた事故なんだから。

276 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 17:08:47 ]
>>261に欠陥発見。
×say $foo->{foo} ^ $foo->{foo} eq '0' ? '数値' : '文字列';
○say +($foo->{foo} ^ $foo->{foo} eq '0') ? '数値' : '文字列';

0.1は数値と扱われるようですね。'0.1'で文字列でした。失礼しました。

277 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 17:10:10 ]
また間違えた
○say +($foo->{foo} ^ $foo->{foo}) eq '0' ? '数値' : '文字列';

278 名前:274 mailto:sage [2009/09/07(月) 18:04:21 ]
>>275
フォント情報の中に入ってる横書き字形/縦書き字形変換テーブルにバグがあるとしたらもう私にはどうしようもありません。

279 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 18:21:16 ]
>>278
じゃUTF-8変換とか恐ろしくて使えないな。今後もShift_JISとかEUC-JPで頑張ってください。
多分バグが出る可能性よりも君がミスる可能性の方が高い。



280 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 19:51:04 ]
>>260
>数値も文字列で格納することがあることが分かる。
なんでこんなことするの?

>どうしても必要ならJSONを自分でパースしてチェックすればいい。
「すればいい」じゃなくて、Perlでは「自分でパースしてチェックするしかない」だよね。

>JSONのレイヤーの問題なんだからPerlのレイヤーに落としてチェック
>しようとする発想が間違っている。
えー、数値と文字列が区別できるような言語なら何の問題もないのに。
Perlではそれができないのを、「発想が間違い」とかいってごまかさないでほしい。


281 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 20:06:21 ]
>>280
> なんでこんなことするの?

魔法を使うため

282 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 20:21:59 ]
JSONのバリデータの、どこで内部構造の判定が必要なのかが分からない。
果たしてそれはバリデータなのか、物体Xではないのか。

283 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 20:40:28 ]
{"PI": 3.14, "unko":[1,1,2,3,5]}
といったデータを、json_validate($json_obj, {"/PI" => "float", "/unko/*" => "int"});
みたいにチェックする場合じゃないの

284 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 21:18:42 ]
>>283
その処理系は知らないから分からないが、Cライクな型を調べるものとして、
1000桁の数値であってもJSONとしてはvalidなのだから、
やはり文字列で判定すべきではないのか。

285 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 21:35:51 ]
>>253
>とりあえずお前はこれは読んどけ。10回くらい読め。
>perldoc.perl.org/perlnewmod.html

どうもです。でもそれには知りたい内容は一切かかれてませんでした。
(1)READMEを書きなさいとはありましたが、フォーマットについては言及なし。
(2)Changesについては一切言及なし。
(3)テストを書きなさい、Test::SimpleとTest::Moreがおすすめ、とはあるが、推奨するファイル名については言及なし。
(4)パッケージのファイル名についても言及なし。

10回読めと言うくらいなら、もうちょっと関連するものを紹介してくれてもいいような。

で、他のCPANパッケージをいくつかダウンロードしてみたところ、
(1)READMEファイルの書き方はバラバラ。好きな書き方でいいみたい。
(2)Changesはそれ以上にバラバラ。
(3)テストスクリプトはどのパッケージも t/*.t だった。これに従ったほうがいいみたい。
(4)パッケージ名とライブラリは厳密に一致している(みたいだけど確証はなし)。

あとバージョン名の付け方が、X.X.X ではなく X.X という形式のが非常に多いんですけど、
Perlでは「5.8.6」よりも「5.86」という形式のほうが好まれるんでしょうか。




286 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 21:50:23 ]
で、module-starterは試してみたの?

287 名前:デフォルトの名無しさん [2009/09/07(月) 22:05:09 ]
>>268
> 見分けがつかないんじゃなくて、区別されてないんだろ。


区別せずに都合よく使えるようにしてあるんだよ。
厳格に区別するほうがよほど簡単なのに。

288 名前:デフォルトの名無しさん [2009/09/07(月) 22:07:11 ]
>>273
> 波ダッシュ字形問題

ってなんですか?
涙っしゅ??

289 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 22:38:38 ]
双方噛み合って無いやりとりもこのスレの華




290 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 22:45:58 ]
>>287
>区別せずに都合よく使えるようにしてあるんだよ。
区別せずに使えるのは利点だとしても、区別できない(見分けがつかない)のは欠点だよな。


291 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 22:54:32 ]
>>290
変数アクセス履歴を残しておけばいいわけだな

292 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 23:14:53 ]
>>286
module-starterをインストールすると、READMEのフォーマットがわかるの?
わかってないのに無理して回答するのやめようぜ。初心者が混乱するだけだから。
もしわかっててその回答なら、あまりにとんちんかんすぎる。

293 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 00:11:14 ]
>>286
プラグインModule-Starter-PBP入れてね。

294 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 01:02:28 ]
>>285
(3)の理由はこれだ。
search.cpan.org/dist/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm#make_test

295 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 01:07:39 ]
どうしても型の区別がしたいなら、静的型付けをエミュレートした変数を作り、そこに格納しておくという手段も用意されています。
今回の議論で望まれている動作とは異なるかもしれませんが、運が良ければ CPAN の Variable::Strongly::Typed が参考になるでしょう。


296 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 01:58:57 ]
ひとつのサブルーチンで、スカラ、リスト、ハッシュを渡すと
それぞれ別の挙動をとるようには出来ますか?

それとも、単にスカラだけ引数に取るようにして
リストやハッシュは呼出側で参照にしてから
渡してもらうほうが賢明なのでしょうか?

297 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 02:11:28 ]
URI モジュールのように
スカラー変数をブレスされたリファレンスのように扱えるオブジェクトは
どういう仕組みでできているのでしょうか
ソース読んだけど意味不明。。。

298 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 03:51:48 ]
>>297
やっぱ use overload でいろんな演算子とかを独自に定義するんでないか

299 名前:デフォルトの名無しさん [2009/09/08(火) 08:37:44 ]
>>296
> それとも、単にスカラだけ引数に取るようにして
> リストやハッシュは呼出側で参照にしてから
> 渡してもらうほうが賢明なのでしょうか?


その方が確実かなあ。
もっと確実なのはサブルーチンを分けることなんだけど、なんでひとつにまとめたいのさ?



300 名前:デフォルトの名無しさん [2009/09/08(火) 09:12:42 ]
>>298
ありがとうございます
調べてみます

301 名前:デフォルトの名無しさん [2009/09/08(火) 09:44:37 ]
>>297
sub X(\$) {...}

302 名前:デフォルトの名無しさん [2009/09/08(火) 09:51:43 ]
>>290
必要でないからあえて削除されたんだよ。
型にこだわることで起こる煩わしさのほうが多いから。

それにバリデータなんてどっかで誰かがもう作ってるだろ。
あえてパールで作り直すのは自由だけど、能力不足を棚にあげて言語のせいにされてもね。
ガタガタいうなら適切と思う言語を選べばいい。
言語のせいにするやつは、言語を変えてもできないだろうから。

303 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 10:00:09 ]
>>280
> えー、数値と文字列が区別できるような言語なら何の問題もないのに。

区別できないところに大きなメリットがある。

例えばPHPはPerlと同じく自動型変換を可能としたが、型は残したままにしたために
大変な混乱を大量のバグを生んだ。

で、区別ができないとどう困るのか具体的な返事がまだないのだが?俺は15年くらいPerl書いてるけど
困ったことなぞ一度もないぞ。

>>285
読んだんなら続きは責任もって答えてやる。
書いてないってことはREADMEやChangesにはフォーマットなし。自由に書いてよし。ってことだ。読み取れないのか。

パッケージとファイル名は基本的に一致すべしと考えておけ。で、名前空間の汚染は非常に嫌われるからなるべく少なく。
この辺はIRCでソース晒して相談するといい。あまり糞なパッケージに普遍的な名前をつけられると他が迷惑する。

バージョンのつけ方は好きに汁。5.10.1みたいのでもいいし、5.00503みたいのでもいい。後者の書き方をすると
普通バージョン番号とパッチ番号(005/03)とみなされる。最初は謙虚に0.0.1とか0.00001にしとけ。


304 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 10:19:36 ]
>>288
ググるくらいできんのか。
ja.wikipedia.org/wiki/%E6%B3%A2%E3%83%80%E3%83%83%E3%82%B7%E3%83%A5#Unicode.E3.81.AB.E9.96.A2.E9.80.A3.E3.81.99.E3.82.8B.E5.95.8F.E9.A1.8C

>>290
それ欠点じゃなくてわざとだから。判定モジュールくらい簡単に作れる。上に判定方法も書いた。
型を区別するとPerlスクリプティングにダメージがあるためそんなモジュールは必要とされていないし使われていないだけ。

>>295
今ならMooseで
isa => 'Str',
isa=> 'Int',
でしょ。

>>296
同名関数の複数定義ができればいいんだが、Perlでは無理なので後者が賢明。

>>299
そりゃ同じ機能ならまとめたいだろうし、最近はそういう風潮にあると思うが。
foo({ a => 1,b => 2 })と、foo([ a => 1, b => 2])で挙動をスイッチするような実装とか最近よく見かけるぞ。

305 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 10:34:51 ]
「本質的にスカラーは型を持たない」
  -- Larry Wall, プログラミングPerl, O'Reilly, 1997, p43

Perlは内部的にスカラーを数値や文字列で扱ってるだけで、「型が区別できない」わけではない。
「数値や文字列はあっても、数値型や文字列型なんかない」のである。そこんとこ間違えないように。

306 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 11:13:56 ]
Validateする目的は、(JSONを媒体とした)データを受け取ったPerlのプログラムを正常に動作させるためですよね?
それなら、データがJSONレベルで数値だったか否かは全く問題にならないのでは?
JSON表現の "1" と 1、このどちらも、Perlレベルでは文字列としてでも整数値としてでも正常に扱えるんですから

どうしてもJSONレベルでのValidateを望むのであれば、
JSONデコーダから作るしかないのですね。Ruby等、データに型が備わっている言語であれば、
確かにJSONデコーダとJSONレベルのValidatorは完全に分離可能でしょう。
でも、Perlにはそれが出来ない。仕方のないことです

307 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 12:04:55 ]
JSON表現では区別できるならどのように読み取ったかを
後から判別できるような情報を残しておくことは可能。
既存のパーサーが区別しないというだけの話で
言語のせいにしたところで問題が解決するわけではない。
数値と文字列の区別がある言語であってもパーサーが区別しなければ同じこと。

308 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 12:26:56 ]
>>303
>書いてないってことはREADMEやChangesにはフォーマットなし。自由に書いてよし。ってことだ。読み取れないのか。

書かれてないから質問しているのに・・・
「書いてないってことはフォーマットなし」なんて読み取れるわけないでしょ。
書かれてないことは「不明」だと判断するのが普通じゃね?どういう頭の構造してるんだよ。

そのページはCPANパッケージの作り方についてすべてを網羅しているの?
もしそのページに書かれてないことは自由に判断していいなら、テストスクリプトのファイル名だって、
パッケージのファイル名だって、自由にしてもいいことになるだろ。でも実際にはそうじゃないじゃん。
書かれてないことは「不明」なんだから、分かっている人に聞いてみて意見をあおぐのが常識的な行動じゃないか?
「書いてないから何をやってもいい」というおまえみたいな考えこそ大迷惑。


しかしまー、あれだ、自分が紹介したページが見当はずれだったことはまるで反省せず、
「読み取れないのか」と言い放つなんて、なんという傲慢ぶり。まるでdank○gai。


309 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 12:39:35 ]
>>308
流れ見てると全くもって君の言うとおりだと思うけど、最後に例えでその名前を出すのはダメだろうw



310 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 12:40:08 ]
>>284
>1000桁の数値であってもJSONとしてはvalidなのだから、
>やはり文字列で判定すべきではないのか。
なんで1000桁の数値なら文字列にしないといけないの?
1000桁だろうと、数値は数値としてもっておけばいいじゃん。
C言語じゃあるまいし、スクリプト言語なら桁数の多い数値でもふつうに扱えるようになっていてもらわないと。


311 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 12:51:23 ]
>299 >304
ありがとうございます。素直にスカラを取るようにします。

312 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 13:12:40 ]
JSONでの型をバリデートする話とはちょっと違うんだけどずいぶん昔に
WebアプリケーションでASINをJSONで吐いてJSからあれこれするときに
{ASIN=>$asin} みたいなので、$asin =~ /^[0-9]+$/ だったりすると
{"ASIN":1234} みたいなJSONを吐き出しやがって閉口した覚えがある。
これだけならまだいいんだが $asin =~ /^0[0-7]+$/ だと
8進数に変換されてえらいことになった。

手元で試したら再現しなかったので最近のJSON.pmは大丈夫ぽいが。

313 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 15:55:55 ]
perlは変数自体に型はないけど、データには型はあるがな。見分けられないわけもないだろよ。
まぁ、perlは非常に弱いLvで変数の型を決め付けてるぞ。
文字型と判断されるか数値型と判断されるかで、挙動が変わるビット演算子がある。唯一それだけ。
これは変数の経歴を記録してる。


関係ないけど、バイナリデータ扱ったら、ヌル文字だらけでとんでもない目に遭った。
もう文字列の0は真にしてくれよ。binmodeって書いたときだけでいいから。せめて'0000'は真だろ!
あと、明示的に指定せずにほっといたら'0000'を勝手に0にすんのもやめてくれ、って思った。

314 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 17:50:24 ]
>>308
質問の内容が書いてあるとは一言もいっていないが?
テストのファイル名も分からない状態のあなたはまずこれを100回読めという意味だよ。
だから100回読んだあなたにちゃんと補足で答えてるだろ。

勝手に勘違いしてファビョって礼もなしにそれか。

315 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 17:59:14 ]
スクレイピングするスクリプトを作るときのサポートライブラリで、
ページの構造をスクリプト作成に便利なようにてきとーに整形して表示するというのをけっこう前に見かけて、
あーこれ便利そうだなーと思ってそのままだったんです

今探そうと思ったらぜんぜん見つかりません
何か心当たりのある方いますか?

316 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 18:07:45 ]
>>314
分不相応にプライドの高い間抜けな質問者のオーラを
事前に察知して華麗に無視できなかったお前が悪い。

317 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 18:12:44 ]
>>310
> スクリプト言語なら桁数の多い数値でもふつうに扱えるようになっていてもらわないと。
use bignum;を使え。

> なんで1000桁の数値なら文字列にしないといけないの?
効率が悪すぎる。

>>313
変数をそのまま真偽値判定に突っ込むな。

318 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 19:06:41 ]
ディレクトリの中にあるテキストファイルから、任意の文字列を発見した時に
その文字列が含まれるファイル名を出力したいんだけど
どうすればいいの
教えてエロい人!!

319 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 19:07:57 ]
>>315
どっかで見たな



320 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 19:23:27 ]
>>302
>必要でないからあえて削除されたんだよ。
ということは、以前は機能として存在したということか。どのバージョンで削除されたか教えてくれ。

>型にこだわることで起こる煩わしさのほうが多いから。
そんなわけない。だったらJSもRubyもPythonも煩わしいことになるけど、そうはなってない。

>それにバリデータなんてどっかで誰かがもう作ってるだろ。
>あえてパールで作り直すのは自由だけど、能力不足を棚にあげて言語のせいにされてもね。
上のほうで出たのはJSONのバリデータなんだけど、それはすでにPerlにあるの?
ぐぐったけど見つからんぞ。せっかくPerlにないものを作ろうとしてくれてる人がいるのに
なんでこんな反応ばっかりなんだろうね。

>ガタガタいうなら適切と思う言語を選べばいい。
>言語のせいにするやつは、言語を変えてもできないだろうから。
これに関しては言語を変えたら簡単にできるこだろ。
数値と文字列の判定なんて、PHPですら簡単にできることなのに。ガタガタ言い訳カッコワルイ。


321 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 19:36:58 ]
>>318
ディレクトリをマウスで右クリック
「検索(E)」
ファイルに含まれる単語

322 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 19:44:52 ]
>>321
すいません、windowsを使っていないので
それはできませんorz

323 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 19:50:03 ]
>>314
>質問の内容が書いてあるとは一言もいっていないが?
すげー!質問したやつに関係ないURLを紹介しておいて、文句をいわれたら『答えが書いてあるとは誰もいってない』と逆切れ!
言い訳もここまでくるといっそすがすがしいな。

>勝手に勘違いしてファビョって礼もなしにそれか。
無関係なURLを紹介しておきながら「読み取れないのか」と言って相手のせいにするようなやつのくせして、礼だけは求めるのかよ。
相変わらずのdank○gai的傲慢さだな。論理がつながってないところもdank○gaiにそっくりだ。
あれか、Perl使うとみんなdanみたいなのになるのか?danが今のようなdanになったのはPerlのせいなのか?

324 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 19:56:32 ]
>>323
> あれか、Perl使うとみんなdanみたいなのになるのか?danが今のようなdanになったのはPerlのせいなのか?

うん! その通りだよ!!
逃げて!! Perlから逃げて!! 手遅れにならないうちにPerlから逃げてぇ!!

325 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 19:56:35 ]
>>320
シンタックスレベルのバリデータなら既にCPANに転がってるよ
search.cpan.org/dist/Test-JSON/

326 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 20:00:13 ]
>>260, >>313の話から考えると、
Perlのある値は、(その時点で)文字列or/and数値としてメモリ上に表現されているって情報しか持ってなくて
その値の由来が文字列か数値かなんて情報は持ってないとか?

そうだとすると、型っていうより、Perlの値は文字列と数値の二つの側面があるってイメージで
型の判別が出来る・出来ない、というより、そもそも判別する対象(文字列型・数値型)がないのかな

これであってる?教えてくださいPerl上級者さん><

327 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 20:11:31 ]
>>326
方向はだいたいあってるんだぜー。
もっと詳しく知りたければ Devel::Peek あたりで遊んでみることだぜー。

328 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 20:14:00 ]
しらんけど C++には Variant型ってクラスで作られた型があるな

329 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 20:15:08 ]
>>327
ありがとう
sv.hにスカラー値っぽいのが定義されてたけど、どうもそうみたいですね〜
もうPerl使ってないけど、4間年も使ってたのに気付かなかったw 勉強になりました



330 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 22:12:10 ]
>>323
何でそんなに興奮してるのか知らないけど、
続ければ続けるほど自分が皆から馬鹿にされるだけの書き込みを続けても
意味無いと思うよ。

331 名前:デフォルトの名無しさん [2009/09/08(火) 22:45:32 ]
>>318
grep -rh 検索文字列 ディレクトリ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<256KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef