Perlについて

2008/08/04(月) 20:58:41
質問スレはあるけど、Perl自身について語るスレがないので、立てました。
2011/09/16(金) 03:51:24.02
>>204
お、詳しそうだね。
質問なんだけど、Encode::STOP_AT_PARTIAL()って何を意味するん?
未だに分からん。
2011/09/16(金) 06:15:31.89
そこで僕は答えに辿り着いた。


use utf8; なんか使わない。
binmode STDOUT, ":utf8"; とかももちろん使わない。

文字数を数えたけりゃ decode (または utf8::decode) でフラグをつけて length すりゃいい。
substr 使うときも事前にフラグを付けりゃいい。

で、ソースとかデータは utf8 で書く。


これ完璧。
2011/09/16(金) 09:17:02.66
>>204
> 当然utf8フラグも使えなければならないもの。

使えなければならないかどうかは知らんが、
使「わ」なければならないもの、ではないわな。
use utf8;とno utf8;の選択ができる仕様になってるんだから。
だったらutf8フラグを「構成要素から除外」して考えていても
「Perlを使っている」ことに違いはないんでは。

それともお前さんは言語(自然言語含む)でもなにかツール類でも、
全ての機能を知り、かつ使わなければ「使える」と言っちゃいけん、って考えなのかい。
2011/09/16(金) 10:02:34.11
この糞ジャップはモダンPerlに洗脳されてるから
utf8の全てを学ばないと気がすまないジャップ
早く死ね
だいたいのフィーリングでやれよ糞ジャップわかったか死ね
2011/09/16(金) 10:24:26.54
殺伐とした雰囲気は嫌いじゃないけどさ、
ム板もラストマンが増えすぎだよ。
210別人だが
垢版 |
2011/09/16(金) 11:07:01.31
>>205
UTF8の2byte文字、3byte文字の途中で文字列が終了していても、
malformed byteとして扱わずに残りはほっといて終了する。
何度もバッファリングしながら読む時に便利。
HTMLやXML等のパーザ書いてる人は結構使ってる。

encode.c:process_utf8(dst, s, e, check, encode, strict, stop_at_partial);
が本体。
2011/09/16(金) 14:07:43.91
>>210
ありがとん。
気になるのは、次のコードを走らせると、STOP_AT_PARTIALが有っても無くても
結果が変わらないところ。何か勘違いしてる所ある?

use PerlIO::encoding;
use Encode;
use IO::File;

my %type = (
"PERLQQ|STOP_AT_PERTIAL" => Encode::PERLQQ|Encode::STOP_AT_PARTIAL,
"PERLQQ" => Encode::PERLQQ,
);

while(my ($title, $value) = each %type){
$PerlIO::encoding::fallback = $value;
print "fallback: $title\n";
foreach my $in (
"\xe3\x81\x82",
"\xe3\x81\x82\xe3\x82\x81",
"\xe3\x81\x82\xe3",
){
open(my $fh, '<', \$in) or die $!;
binmode($fh, ":encoding(UTF-8)");
$fh->read(my $string, 5);
$fh->close;

printf("%0*v4x\n", ",", $string);
}
print "\n";
}
2011/09/16(金) 15:19:06.40
>>209
なんだラストマンて
英語のlast manとは意味が違うようだが
2011/09/16(金) 23:09:31.24
>>205
それってundocumentedなフラグらしいじゃん。
なんでそんなマイナーなのを持ってくるの?

お前の基準がわからんw
2011/09/16(金) 23:17:27.21
>>207
別に初心者はPerlを使うなとは言ってないから安心しろw

Perlのすべてを知ってからPerl使う人はいないだろ。
何も知らない初心者から、どんどんPerlを知って成長していく。
だから全部知る必要はないが、Perlを使えるという最低条件の一つがutf8フラグ。

ワイン好きなら美味しいワイン、まずいワインそれぐらいわかる。
いろんな種類を飲んで自称ワイン好きというのは構わない。
もちろんワインを飲んで構わない。

だがソムリエと言いたいなら、最低限のレベルってものがある。
Perlもそういうことだよ。プロの間で「Perlを使える」と言っていいのは
utf8程度、当然知っているべき最低限の知識だ。

お前はPerlを触ってるだけ。
2011/09/16(金) 23:38:35.12
>>214
> Perlもそういうことだよ。プロの間で「Perlを使える」と言っていいのは
> お前はPerlを触ってるだけ。

俺基準炸裂乙

> プロの間で

何度読んでも笑えるわ
2011/09/16(金) 23:41:04.56
はて? utf8知らないんだよね?

知らないのに、Perl使えるって自慢したいの?w
2011/09/16(金) 23:41:36.72
レベル低いのが、俺は低くないんだ!って言ってるのか?w
2011/09/17(土) 01:19:55.00
>>189
まあ、
> > 今の時代に合わない、ネットの書き込みを
> > 全部排除してくれ。
> > 世の中モダンPerlだけでいい。
なんてことを本気で言ってる奴はただのバカなんで単に放っておけばいいでしょ。
Perl使いはTMTOWTDIなところが好きで使っている人も多いと思うんで、
一律にオレの理想のPerlしか認めんみたいなバカは2chの匿名板以外にはきっとあまりいないでしょ。
昔書かれた古い情報ならそれがいつ書かれたのか確認できるようにすればいいだけの話で、排除までする必要もないし。
モダンじゃない書き方を示されたらモダンに書くならこうですよ、と別途提示すればいいんだし。
モダンな書き方のメリットも強調したいならどうしてその方がメリットばあるのかも含めてね。
2011/09/17(土) 09:34:31.83
>>218
やり方は一つじゃないのと、
やり方を一つしか知らない のは
全然意味が違うぞw

自分一人でやってるなら自分のやり方だけ知ってればいいだろうが、
他人のコードを読んだり修正するのであれば、別のやり方を知らないといけない。
自分が使わなくとも、やり方を知らないといけない。

マイナーなモジュールならともかく、Perlに標準機能として搭載されている
文字コード関連技術ぐらい知ってるのが当たり前だろう。
2011/09/17(土) 20:11:09.82
>>219
> やり方は一つじゃないのと、
> やり方を一つしか知らない のは
> 全然意味が違うぞw

当たり前だ。
>>189 のどこをどう読めば「やり方を一つしか知らなくてもいい」と言ってるように読めるんだ?
貴様は文盲か。
2011/09/17(土) 22:51:35.16
UTF8というコードの扱い方も一応複数あるんだよなそう言えば
2011/09/18(日) 00:01:40.58
そもそも文字列なのかバイト列なのかというのは二者択一
ではなくて、おいらの頭の中でいいあんばいで処理して
いる。

それを処理系でマネをしようとしてutf8フラグなるもの
をこさえたんだけど、おいらの頭の中をうまいこと再現
してくれるわけじゃなくて、ギャップにぷぎゃーって
なるんだよな。

わかる?ぷぎゃーって?

コンピュータにはそれが分からない。
2011/09/18(日) 01:55:12.80
だから普段はuse utf8しないで、substrとか文字数カウントとかしたいときだけフラグ付けりゃいいじゃん
2011/09/18(日) 04:55:59.29
>>222
抽象化能力がかけてるの?

文字は文字であって、それがどんなバイト列なのか
意識したらダメだよ。そんなものを意識すると
バイト列が変わっただけで混乱してくるでしょ?

ぷぎゃーってなってるのは、文字とそれを構成するバイト列。
つまり、文字集合と符号化方式を頭の中で切り離せてないからだよ。

Unicode と UTF8・UTF16・UTF32などの違いをしっかりと学習しようね。
2011/09/18(日) 05:31:33.97
>>224
>>199
2011/09/18(日) 06:45:11.54
>>225
それはお前w、Unicode時代の正規表現を知らないだけじゃないか。
自分が無知だってことを知らせてどうするよ。もっといろんな言語をだなぁ。

■[Ruby][鬼車]UTF8で\dが全角数字にマッチ
http://d.hatena.ne.jp/gengar/20091019/1255888893

http://vbnmkyoto.blogspot.com/2010/12/d-javacommons-validatorperl.html
> 罠なのは、Javaでも commons-validator を使っていると、
> commons-validator の正規表現は perl と同等であること!

.NET Frameworkの正規表現
http://smdn.jp/programming/netfx/regex/0_abstract/
> \dは10進表記の数字に使用されるUnicode文字1文字
> \Dは\d以外の任意の1文字
>
> (\dには半角数字だけでなく、全角数字も含まれる)

そのまま使える正規表現集 for regExp (javascript)
http://befine.jugem.jp/?eid=29
> ・全て数値かどうか(全角でも半角でもOK)
> /^\d+$/

pythonの正規表現で日本語を扱う
http://taichino.com/programming/1272
[0-9]を表す\dですが、unicodeフラグを指定すると[0-90-9]と等しくなるようです。
2011/09/18(日) 09:24:45.51
RubyもJavaもpythonも関係なくて、関係あるのは今まで
使い続けたPerlなわけで、別に Unicode 時代をお招きした
つもりもないんだよね。

で、\d はこれまで [0-9] と同じってドキュメントに
書かれていたわけだから、Unicode に対応したからって
それが勝手に変わってしまうのは困る。
なぜかというと \d でマッチした内容は、テキストデータ
に埋め込む数字の文字列としても使うし、数値として計算
対象としても使うから。

そこんところをいいあんばいに混ぜて使っていたのが、
Unicode 対応という理由によって使いにくくなってし
まった。一体、何のための Unicode 対応なのか。

>文字は文字であって、それがどんなバイト列なのか
>意識したらダメだよ。そんなものを意識すると
>バイト列が変わっただけで混乱してくるでしょ?

いや、してこない。
(混乱するあなたをどうこう言うつもりはないけど)

処理系のために切り離さないといけないのは、設計思想
としてうまくないと思う。
2011/09/18(日) 09:34:53.65
文字列として見たら5も5も同じ。
そうゆう意味ではフラグが立ってる時の\dは全角半角関係ないのは分かる。

が、227の言い分もわからんでもない。

そんな自分は [0-9] って書いてる。
2011/09/18(日) 09:39:52.67
バイト列はうそをつかないけど
utf8フラグはうそをつくから使いづらい
2011/09/18(日) 09:42:09.24
> で、\d はこれまで [0-9] と同じってドキュメントに
> 書かれていたわけだから、Unicode に対応したからって

初心者かお前w
ちゃんとドキュメントは読みましょう。

http://perldoc.jp/docs/perl/5.10.0/perlretut.pod
> \d は数字にマッチします; 単に [0-9] だけではなく、非ローマ字スクリプトからの 数字もマッチします
2011/09/18(日) 09:46:24.15
ちゃんと勉強を続けている人なら
\dは非ASCIIの数字にもマッチすると知ってる。

なぜ知らないの? そっちの方が不思議だ。
2011/09/18(日) 09:49:51.72
だから変えるなって
2011/09/18(日) 09:55:45.19
変わってないよ。昔から\dは”数字”にマッチする文字クラスだ。

数字ではなく、特定のバイナリ列だと勘違いしているから
そういう間違いを犯すハメになる。
2011/09/18(日) 09:58:11.72
他にも、 . (ピリオド)は一バイトではなく一文字にマッチするものだからな。
しっかり正規表現が扱うのは文字だとわかっていれば当然の結果だが、
お前の場合、日本語で.を使った場合、どうマッチするんだよ?
日本語が3バイトEUCだったらどうするんだよ。とか悩むんだろうな。
2011/09/18(日) 10:51:09.14
>>233
> 変わってないよ。昔から\dは”数字”にマッチする文字クラスだ。

変わってないよ、じゃないだろ。処理対象次第で実際に振舞いが変わる。
現実世界では「変わってないよ」では何も解決せんのじゃ。
まあ高度な抽象化能力によって実際のコーディングとは無縁な
非現実の世界に生きている者にはなんの問題もないのかもしれんがな。
2011/09/18(日) 10:56:07.76
>>227
Unicodeの処理系は何をしなければいけないかかっちり決まってる。
全角半角の区別は明示的に指定した時以外はしない。
どの言語、どの正規表現ライブラリにいっても変わらない。
perlだけ流儀変えたらバカ言語確定。
>>227みたいな駄々こねるバカも同様。
2011/09/18(日) 12:29:22.88
> 変わってないよ、じゃないだろ。処理対象次第で実際に振舞いが変わる。

といわれてもなぁ。
Unicode非対応からUnicode対応になったんだから、
そりゃUnicodeを認識できるようになるわw

Unicode文字をちゃんと文字として認識させたかったんだからさ。
いつまでもASCIIのみ、まともに対応じゃだめでしょw
.を一バイトにマッチさせても意味ないんだし。
2011/09/18(日) 12:36:14.71
まあ、とにかくやりずらくなったってことだ。
2011/09/18(日) 12:45:26.37
ぷぎゃーがギャップの逆の綴りだと誰も指摘してくれない件
2011/09/18(日) 12:52:08.48
>お前の場合、日本語で.を使った場合、どうマッチするんだよ?
>日本語が3バイトEUCだったらどうするんだよ。とか悩むんだろうな。

悩まない
. は1文字を表現するんだから。もちろん3バイトEUCにマッチする
2011/09/18(日) 14:27:13.49
一体何を悩むんだろうな
他の選択肢を聞いてみたい
2011/09/18(日) 15:16:18.57
\d の代わりに $d を使う
$d はあらかじめ qr/[0-9]/ として用意しておく

うん、おれいいこと言った
2011/09/18(日) 15:35:58.93
結局実力が劣る奴が
utf8フラグを理解できずに
ファビョってただけか。
2011/09/18(日) 16:07:16.86
モダンPerlしかかくな!のようなレスが発端

参考書にjcode.pl >>190
昔書かれた古い情報。モダンな書き方のメリット>>218
2011/09/18(日) 16:12:39.25
発端

IO::File->new_tmpfile が「ファイルハンドルを返すもの」と理解してれば、
今の時代にこんな書き方はしない。

世の中モダンPerlだけでいい
http://hibari.2ch.net/test/read.cgi/tech/1313840197/327-333 Perlについての質問箱 48箱目
2011/09/18(日) 16:16:54.04
モダンPerlもPerlの一部だよ。

Perl使えなくて、Perl使いは名乗らないでください。
Perlちょっと触ってる程度にしてね。
2011/09/18(日) 17:15:14.64
モダンPerlしか使えないおれは負け組みってことっすか。
分かりました。
これからは jcode.pl を使って書くようにします。
2011/09/18(日) 17:46:34.60
>>247
そんなようだから負け組といわれる
〜を使って、ではなくて、
〜も使って、といえる奴じゃないと「使えない奴」と判定される
2011/09/18(日) 17:58:14.96
>>245
perldocの子プロセス→ファイルの動作が、
327のは子プロセス→パイプ→ファイルに変更されてる。
2011/09/18(日) 22:20:58.07
>>247
古いものは必要ない限り、勉強する必要はないと思うよ
どうせ使わないんだし。

それよりか新しいものを知っていると、
古いものしか使えない奴の先を行くことができる。
2011/09/19(月) 00:01:45.42
>>250
> 古いものは必要ない限り、勉強する必要はないと思うよ
> どうせ使わないんだし。

おいおい。モダン派(w)な >>219

> 自分一人でやってるなら自分のやり方だけ知ってればいいだろうが、
> 他人のコードを読んだり修正するのであれば、別のやり方を知らないといけない。
> 自分が使わなくとも、やり方を知らないといけない。

って言ってるようだけど?
2011/09/19(月) 01:33:23.03
>>251
「古いものは必要ない限り」って言ったよ。
2011/09/19(月) 02:05:07.40
>>252
てことはつまり、「新しいものも必要ない限り」勉強しなくていい、ってことになるな。
2011/09/19(月) 02:47:00.05
今後も新しいものが必要ないならw

そこで成長ストップだよ。
2011/09/19(月) 07:34:09.27
まあ今まで知らなかった「古いもの」を新たに知るのも成長のうちだからな。

古いものは「必要ない限り」勉強しなくていい、という時点でやはり成長ストップだな。
2011/09/19(月) 08:47:55.20
その通り。
そしてPerlの世界では、古いものはいつか必要になってくる。
KENT先生もそう言っている。
2011/09/19(月) 09:23:04.37
使える道具は多いに越したことはないという話だな。
Perlやプログラミングに限った話でもなし。
2011/09/19(月) 10:36:17.40
必要もないのに押し付けるための押売り文句として
「モダンPerl」なる用語ができたわけだ。

必要性があって作られたのなら、そんな言葉がなく
てもちゃんと広まる。今まで出てきた新機能は
そうだったんだから。
2011/09/19(月) 10:43:19.36
モダンPerlは広まってるよ。
2011/09/19(月) 12:01:04.69
なるほど、モダンPerlはLarryが使ってないからPerlは
このところ成長がストップしていたわけか。

今Perlの新バージョンをリリースしてるのは他の人らし
いしな。
2011/09/19(月) 12:13:15.47
こいつ、そこまでPerlの進化を拒絶してるのを見ると、
Perl6に対応できるのか疑問になるな。技術力的に。
2011/09/19(月) 12:18:06.49
どこからLarryが使ってる使ってないって話が湧いてきたんだ
2011/09/19(月) 12:20:02.18
こいつが、誰も使ってない。
Larryぐらいしかな!って
思いたいんだろ。
2011/09/19(月) 12:21:38.42
どこの世界にも、新しいものを拒絶する奴はいるもんさ。

そいつは技術者としてそこで終わりの人間ってだけだ。
卒業おめでとう。そしてさようなら。
2011/09/19(月) 12:29:12.72
しょうがない、管理職になるかw
管理職スレに行きます。
2011/09/19(月) 12:46:19.39
どさくさにまぎれて、Perlの進化とモダンPerlを一緒にすんな!
2011/09/19(月) 12:46:29.23
>>265
それも人生の一つだよ。きっと給料も上がるよ。
よかったじゃないかw

あと、管理職になったら、技術に口出しすんなよ。
お前のせいで古いもののを押し付けられると、
技術者が腐っていきます。
2011/09/19(月) 12:48:45.34
>>266
Perlの進化ってのは、たとえばEncodeモジュールとか
Mooseの影響を大きく受けたPerl6とか。

モダンPerlといって別に特殊なものではなく、
本来ならPerl とオールドPerlというべきだ。

モダンというのは、日本語で未来・・・ではない。
現在という意味だ。
2011/09/19(月) 12:51:32.65
今度から、モダンPerlではなく
現在のPerlと言おうかなw

現在のPerlではこのようにするんだよとか言えば、
現在のPerlは不要!とか反論するんだろう。

想像するとなんか楽しいな。現在のPerlを否定する姿を。
2011/09/19(月) 12:57:07.23
どこの世界にも、新しいことは何でも正義だと思い込んでる奴はいるもんさ。

そいつには技術が手段じゃなく目的にすりかわっちまってるんだ。
自縄自縛おめでとう。そして御愁傷様。
2011/09/19(月) 12:58:02.65
Perlの進化を否定したことはないし、古いPerlを押し付けたこともない。
何かを押し付けようとも思ってない。ただ腐った部分を取り除こうとしてるだけだ。
ちゃんと読め、現役の技術者。
2011/09/19(月) 13:02:06.93
腐った部分にモダンPerlという名前を付け分離可能にしたのは、人間として
多少なりとも良心が残っていた証なのだろう。
2011/09/19(月) 13:03:07.70
>>270
新しくないですよ。

今のPerlですよ。
2011/09/19(月) 13:03:35.26
今のPerlが使えないって、
もはやPerl使いじゃないだろw
2011/09/19(月) 13:05:36.97
Perlを長年使っていたのに、
お前はPerlを使えないって言われたら
どんな気分なんだろうなw

実際今のPerlを使えないのは事実だから
反論できないだろうしね。
2011/09/19(月) 13:07:10.54
モダンPerlはモダンPerlによってとって変わることを忘れるな。
過去を否定するものは自分も未来から否定されるということに
気づけ。おれが言いたいのはそれだけだ。
2011/09/19(月) 13:10:05.34
モダン Perl の次はポストモダン Perl
2011/09/19(月) 13:21:49.07
> モダンPerlはモダンPerlによってとって変わることを忘れるな。

当たり前だろ。それが進化ってものなんだし、
新しいものをどんどん吸収して行かないと
この業界で生きて行けないよ。

気がつくとすぐに普通の技術(モダン)に
なっているからな。
2011/09/19(月) 13:25:01.09
なんかモダンPerlが嫌いになりそうだ(´-`)
2011/09/19(月) 13:26:20.86
それは勉強することが嫌いなだけ。

さようなら。
2011/09/19(月) 13:29:48.00
まあ自分が嫌われてるってことは認めたくないよね…(´-`)
2011/09/19(月) 13:31:24.53
嫌うとかなんの話だw
283Perl忍者
垢版 |
2011/09/19(月) 13:31:41.79
どうも スレが盛り上がってた と思ったら
今日は祝日
2011/09/19(月) 13:31:56.16
>>281>>282のことを嫌いってことだろw
Perlとは全く関係ない話だが。
2011/09/19(月) 13:33:09.34
正論を言うと嫌われることが多いから気をつけたほうがいいが、
2ちゃんねるだから、そんなこと気にする必要はない。
どんどん正論言うたれwww
2011/09/19(月) 13:35:06.48
ノーサイドにしましょう、もう。
2011/09/19(月) 13:48:22.37
モダン派にちょっかいを出すと反応が大きくておもしろいので
ちょっといじってみた今日は祝日www
2011/09/19(月) 13:52:20.89
まあPerlユーザーが、それも詳しい人達が中心になって切り拓いた到達点の一つが
モダンPerlなわけだから、Perlを使うならモダンPerlの学習は推奨されるべき

…で、確かに論理的にはモダンPerlの学習を奨めているんだが
なんか逆効果にみえるんだよなあ…(´-`)と、ね
2011/09/19(月) 13:58:46.84
モダン焼きだってできたのは昭和25年だ。モダンPerlってな一体、いつ生まれだっけ?
2011/09/19(月) 14:07:56.22
perl6がいつまでたってもでてこないのが全部悪い。
2011/09/19(月) 14:15:36.38
言い換えて実体が変わるなら苦労しないけどな。
2011/09/19(月) 14:43:28.21
>>277
http://search.cpan.org/dist/Moose/lib/Moose.pm
> Moose - A postmodern object system for Perl 5
2011/09/19(月) 14:46:20.38
モダンPerl、終わったな
2011/09/19(月) 15:01:42.17
> 今の時代に合わない、ネットの書き込みを
> 全部排除してくれ。
> 世の中モダンPerlだけでいい。

っていうのも、時代が進むにつれて、自身がモダンでは
なくなり削除対象になりかけたわけだが、これで永遠に
保存されることになりました。

おしまい。
2011/09/19(月) 15:18:39.91
>>294
馬鹿か?

今モダンなのが廃れてきたら、
次が流行ってるってことで、
それを使うだけの話だよ。

常に勉強し続けるというのはそういうこと。
2011/09/19(月) 15:23:52.33
これからプログラマになろうとするときに goto 文を知る過程を
省くことはできない。過去を削除するなとはそういうこと。
削除してしまうと技術の発達の過程が見えないので、新しいひと
にとって魔法のように見えてしまう。
2011/09/19(月) 15:25:26.52
それともネットからは排除するけど、紙の本には書き記しておけ、
ってことを言ってる?
2011/09/19(月) 15:27:46.61
あ、それと勉強するな、進化するななんて一度もおれは言ってないから。
(他のひとが言ったかもしれないけど)
2011/09/19(月) 15:37:27.91
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
   過去を削除するから車輪を再発明しちゃうんだろが
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
300277
垢版 |
2011/09/19(月) 18:17:35.72
>>292
既にあったのか……。

モダンといっても Moose とかは遅いこともあるんだろうし、適材適所なものもあるよね。
2011/09/19(月) 18:26:32.34
Mooseは遅いだろうな
Moose Moose 亀よ 亀さんよ
って歌にもある
2011/09/19(月) 19:51:42.66
>>296
だから、goto文の悪さを世間に広めて、
そして新たにはgoto文を使ったコードを書かないようにする。

ようするに古いPerlは、昔は面倒だったんですよって
教えるだけで、さっさと今のPerlに映るべき。

老害は死ね
2011/09/19(月) 20:34:13.49
真のプログラマはPascalを使わない、ってね
2011/09/19(月) 21:33:48.09
utf8フラグが原因で原子炉が暴走することを
想像できないようじゃ技術者の風上にはおいて
おけないな。
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況