1 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 16:01:21 BE:176880454-DIA(100004)] "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 ● 2008/04/20 現在の最新版: 5.10.0 ● 2008/04/20 現在の開発版: 5.9.5 ▼ 前スレ Perlについての質問箱 34箱目 pc11.2ch.net/test/read.cgi/tech/1199977642/
137 名前:110 mailto:sage [2008/05/14(水) 15:58:33 ] メインルーチンとの結合でうまくいきました。 相談に乗ってくれた方、ありがとうございました。
138 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 23:04:47 ] Windows環境で、ディレクトリ一覧を取得、正規化してリネームしたくて いろいろやってるんだが、shift-jisの文字の扱いに苦労してる ひょっとしてPerlでやるのあんま向いてなかったりする?
139 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 23:14:21 ] Unicodeであつかえばいいだろ。
140 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 19:33:10 ] あまりPERLの構文詳しくないので誰か教えてください こんなのを作ってみたのですが sub cont{print "contents\n";} sub html{print "<html>\n"; $_[0](); print "</html>\n";} sub body{print "<body>\n"; $_[0](); print "</body>\n";} body(\&cont); html(\&cont); これを、出力が<html><body>cont</body></html>となるように 呼び出したいのですが可能でしょうか ↓動かないですが、こんな感じのことがやりたいです 1. html(\(body(\&cont)); 2. sub f{html(\&&_[0]);} f(\&html); 3. sub g{$f=shift; html(\&f);} g(\&html);
141 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 19:43:23 ] >>140 こういうことか? sub cont { print "contents\n"; } sub html { print "<html>\n"; shift->(); print "</html>\n";} sub body { print "<body>\n"; shift->(); print "</body>\n";} html(sub { body(\&cont) } );
142 名前:140 mailto:sage [2008/05/15(木) 19:58:14 ] おお、想定通り動きました。ありがとう。
143 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 20:19:38 ] use strict; use warnings; sub binding{ my($F,@P)=@_;sub{$F->(@P)} } sub cont {print "contents\n";} sub html {print "<html>\n"; shift->(); print "</html>\n";} sub body {print "<body>\n"; shift->(); print "</body>\n";} sub cont2 {return "contents\n";} sub html2 {return "<html>\n",shift->(),"</html>\n";} sub body2 {return "<body>\n",shift->(),"</body>\n";} html( binding( \&body => \&cont ) ); print html2( binding( \&body2 => \&cont2 ) );
144 名前:デフォルトの名無しさん [2008/05/15(木) 20:21:07 ] windows上のperlのGDモジュールで、 日本語フォントをjpg画像で出すサンプルってありませんか。 下のサンプルをmsgothic.ttcに変えて実行したら、 どうやっても・という文字になってしまいます。 x68000.q-e-d.net/~68user/webcgi/image-1.html
145 名前:140 mailto:sage [2008/05/15(木) 20:41:48 ] >>143 このbindingってやつナイスですね これ参考に、1タグ多要素に拡張してみます
146 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 21:51:34 ] >>144 PerlMagickでできるかも。 まー、内部はGDかもしれないから、同じ結果かも知れない。
147 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 22:05:34 ] >>144 よくわからんが、文字コードの問題とか?
148 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 22:32:06 ] >>144 utf8か、フォントファイルを絶対パスで指定かな。 Imagerも良いよ。
149 名前:プヨー [2008/05/16(金) 18:03:07 ] Perl で Lisp のマクロのようなものを使うことはできないの? 遅延評価する仕組みがほしい。 Func1( ...exp1..., ...exp2....); という呼び出しがある場合、状況に応じて exp1, exp2 の いずれか一方だけを評価したい。 Func1( sub { ...exp1...}, sub {...exp2...} ); のように無名関数を渡す方法は思いついたが、 記法が簡単でないので、もっと簡単に記述できる方法がいい。
150 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 19:09:34 ] >>149 Lispは名前しか知らないけど、「状況に応じて」の部分を条件文にすればいいんじゃない? 関数を呼んだ時点では、引数の値が決定してないってこと? そうだとしても、値が決定するまで待つとかすればいいような気がする。 Lispがわからない人でもわかる説明で。
151 名前:プヨー [2008/05/16(金) 19:31:07 ] > Lispは名前しか知らないけど、「状況に応じて」の部分を条件文にすればいいんじゃない? そうなんだけど、 if (,,,) { ... } else {...} のような定型化した条件文が大量にあるから、きれいじゃないんだよね。 それよりも、単に Func1( ...exp1..., ...exp2....); のように書けば一行ですむから、保守性が高くてクールだよね。 > 関数を呼んだ時点では、引数の値が決定してないってこと? そう。Lisp のマクロというのは、必要に応じて引数を eval するみたいなものだよ。 Lisp のマクロはコードを簡単化するために使われることが多い。
152 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 20:02:14 ] >>151 sub exp1{ .... } sub exp2{ .... } Func1(\&exp1, \&exp2) でいいんでないの?
153 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 20:02:34 ] >>151 質問が漠然すぎるんだが、、、 my %hash = ( foo => sub { print "foo\n" ; }, bar => sub { print "bar\n" ; }, ); $hash{foo}->() ; こう言うこととかしたいのか? それともif文を三項演算子?
154 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 20:04:34 ] 常に先行評価のPerlで急に遅延評価になったら保守性が著しく低下するだろ sub { } で我慢しろ。どうしても黒魔術を発明したいならソースフィルタを使って何とかすればいい
155 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 20:30:18 ] exp1,exp2が長い場合、保守性がいいとは思えないし >>149 が考えたコードも改行位置ちょっと変えてあげれば複雑にはみえないし 関数を読んだ時点で引数の値が決まってないのは コードがタコなだけな気がしてならないので せめて、もう少し具体的に書いてもらえないかな とりあえずFunc1の中でevalしたいならそうすればいいんじゃ? Func1( q(...exp1...), q(...exp2...) ); sub Func1 { my($exp1,$exp2) = @_; #なんかいろいろ my $exp = $COND ? $exp1 : $exp2; eval "$exp"; }
156 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 21:45:27 ] 初歩的な質問で申し訳ないのですが クッキーにデータを入れるときエスケープなどの処理をしてから入れたほうがいいのでしょうか? よろしくお願いします。
157 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 23:13:35 ] >>156 URLエンコードと同じエスケープがいるよ。 日本語化されたRFCもあるから、読んでみれば? もっと簡単にやるなら、CGIモジュールに全部任せる。
158 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 23:57:48 ] >>157 なるほど。クッキーはURLエンコードですか。勉強になりました。
159 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 01:38:05 ] 最終的に決められた文字だけになるなら、任意のエスケープ方式でいい
160 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 13:25:57 ] 要素数が同じlistとvalueがあるときに、同じ添え字の処理ってどうやって書きますか? #こんなのがほしい・・ for $i $j(@list @value){print "$i=$j";} タプルみたいなのがあれば使いたいんですが やっぱり添え字をインデックスにしてループするしかないんですかね
161 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 13:35:43 ] どういうときに便利になる? その例でもwhile shiftで事足りるし。
162 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 13:40:01 ] use List::MoreUtils qw(each_array);
163 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 13:54:11 ] zipWithを書けばおk
164 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 13:55:32 ] 単に短く書きたかっただけなんですが、あまりPERL使いこなせてはないので・・ shiftだとこんな感じでしょうか。 while(@list){print shift @list;print "=";print shift @value;} これはこれで、短くていいですね。
165 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 13:57:38 ] while($i=shift@list and $j=shift@value){print "$i=$j";}
166 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 14:04:10 ] >>162 オブジェクト指向部分はあまりわかってないので後ほど調べてみます。 >>163 sub zipwith{shift->(shift,shift);}こんな感じですかねw ちゃんと動くかはこれから試してみますが・・ >>164 こっちのが全体的にいいですね、トン
167 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 14:38:21 ] 練習がてら作ってみました @a=qw(a b c); sub zipwith{($f,$l,$r)=@_;while($i=shift @$l and $j=shift @$r){$f->($i,$j)}} zipwith(sub{($a,$b)=@_;print "$a=$b\n";},\@a,[1,2,3]); 関数へ複数の配列を渡す際にはリファレンスにしないとだめってのは少し不便ですね
168 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 17:31:48 ] perlの勉強中で カメラ 785円 お菓子 98円 … という文字列がファイルであるのですが if(円という文字を含んでいたら) $temp = "円より前の数字"; という風に文字の抽出を行いたいのですが 正規表現の部分と、抽出の部分がわかりません ファイルの読み込みから1行だけを取り込むのは出来たのですが ご指導お願いいたします。
169 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 17:55:32 ] /円/ and $temp = $`;
170 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 18:12:27 ] すいません、上手く動かないみたいです
171 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 18:23:41 ] ちょっとかんべん
172 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 22:31:48 ] perlっていうかsendmailについてなんですが… open(MAIL, "| /usr/sbin/sendmail -t env_addr") or die $!; # 中略 close(MAIL) or die $!; のように、パイプ渡しでopenするとき、closeに失敗するときがあるんですが、このとき エラーメッセージを捕捉する方法どなたかご存じですか? $!には入ってこないのです。
173 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 22:34:32 ] >>172 エラーメッセージは何処に出るの? 標準出力ならIPC::Open2, 標準エラー出力ならIPC::Open3参照。
174 名前:デフォルトの名無しさん [2008/05/19(月) 11:53:11 ] #!/usr/bin/perl $inputfile="test.txt"; open (FILE1, ">>$inputfile") or die "$!"; for ($hoge=0;$hoge<10;$hoge++) { print FILE1 "$hoge"; sleep(1); } close (FILE1); このプログラムを同時に2つ実行すると、私の予想ではtest.txtの中身は 00112233445566778899 となると思うのですが、なぜかファイルの中身には 01234567890123456789 と出力されます。 perlは排他制御が勝手に行われたりするんでしょうか?
175 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 11:54:52 ] バッファリングされてるから
176 名前:デフォルトの名無しさん [2008/05/19(月) 11:56:39 ] >>175 どういうことでしょうか? もし正しくバッファリングされるのならflockなどの排他制御は不要な気が…。 すいませんがもう少し詳しくお願いします。
177 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 12:05:50 ] どのタイミングでflush()されるかわからないのに、それに依存しちゃダメでしょ ちゃんと排他制御しなよ
178 名前:デフォルトの名無しさん [2008/05/19(月) 12:27:50 ] なんとなーく分かりました。ありがとうございました
179 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 19:30:53 ] cryptの返り値はsaltと同じ半角英数字、半角スラッシュ、半角ピリオドの範囲で salt2文字と残り11文字ってことでってますでしょうか。
180 名前:デフォルトの名無しさん [2008/05/20(火) 19:31:58 ] あってますでしょうか、の誤字でした。あとあげます。
181 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 20:50:16 ] いいえ。ホストのcrypt(3)に依存です。
182 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 20:53:22 ] マニュアルを読むのは身分の低い下賎の民の仕事なので、 高貴な方々は、他人にマニュアルを読ませます。
183 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 21:02:57 ] だからいつまでたっても
184 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 23:59:36 ] これだからゆと(ry
185 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 01:05:07 ] 言っても無駄だから、適当にヒントなり与えてスルーしようよ。
186 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 01:13:28 ] >>182 職業に貴賎なし。 だが、海外にも目を向けるとインプリする人はいっぱいいるから、 そういう志向はありだと思う。
187 名前:デフォルトの名無しさん [2008/05/21(水) 18:46:46 ] ファイルテスト演算子を再定義することって可能でしょうか?
188 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 20:52:09 ] むり
189 名前:デフォルトの名無しさん [2008/05/22(木) 01:15:29 ] 「独習 perl」を一冊 やり通したのですが、次は何をすべきでしょうか? perlの機能を覚えただけで実用的な使い方は学べていません。 次は何をしたらいいでしょうか?
190 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:28:32 ] 何かを作る。 ファイルの一括処理プログラムとか、板違いではあるがCGIなんかでもいい。
191 名前:デフォルトの名無しさん [2008/05/22(木) 03:09:43 ] 自分が何をしたいのか、わかりません。 てか?
192 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 03:15:25 ] そもそも何で perl をやろうとしたのかって話だ
193 名前:デフォルトの名無しさん [2008/05/22(木) 03:50:29 ] プログラムって何かを作るためにある道具であって 何を作るかは作り手が考えなきゃどうしようもなかろう。
194 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 04:11:01 ] >>189 適当なフリーのCGI等をダウンロードして 辞書的に使える本(Google先生でもOK)で調べながら ソースを読んでみる。 ある程度理解できるようになったら、それを少しだけ改造してみる。 これを繰り返すだけでも相当勉強になると思うよ。
195 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 09:02:43 ] ネットに転がってるperlで書かれたCGIやCGI解説本のソースはほぼ100%クズなので 初心者はそんなものを見てはいけない。
196 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 09:14:39 ] 言いますね…
197 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 10:03:26 ] まあ、メジャーな掲示板のcgiコードもひどいもんだ。 一番良い例が、しばらく前までの2ch。 今動いているのはプロが書いたはずだから、ちゃんとしているはずだけど、 公開されてんのかね。
198 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 10:13:12 ] フリーGGIはオススメできない 書き方が古いから。
199 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 10:41:17 ] >>191 自分がやって「楽しい」と思うものでなければ、長続きしない。 例えば、任意の文字列を入力すると、 ▄ ▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▀ ▄▄█▄▄ ▄▄ █▄▄▄▀ █ ▄▀ ▄▀ ▄ ▀ █▄▄█▄▄ █ ▄█▄▄ █ █ █▄▄█▄█ █ █ ▄▀ █ █ █ ▄▀▀▀█▄ █ █ ▄ █ ▄ ▀▄▄▄▄▄▄▄▄ ▄▀ ▀▄▄▀ ▀▄▄▄▀ ▀ █ ▀▀▀▀ ▀ ▀█ に変換するスクリプトを作ってスレを荒らすというのはどうだ?
200 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 11:22:02 ] >>199 それくれw
201 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 12:34:25 ] >>197-198 同じ事をするにも何通りも書き方がある, というのとは違うのかい?正直わからん。
202 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 12:37:30 ] >>197 2chのbbs.cgiは8年ぐらい前に流出した以外に表に出てないと思うのだが。
203 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 16:25:48 ] >>201 perlのCGIがブームだった頃に作られた遺産がたくさん残ってる。 それらは大抵perl4時代のコードのままメンテナンスされてない。
204 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 17:32:22 ] 元々の>189からの話の流れからすると、特定のものを批判するより これ読めってのを挙げた方がいいと思うが、定番といえそうなものがないな。
205 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 17:34:57 ] 普通に推奨本のコードを真似れば良いよ。
206 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 18:19:24 ] ラマですね、わかります。
207 名前: ◆TWARamEjuA mailto:sage [2008/05/22(木) 20:21:28 BE:1961429-2BP(7088)] おいちゃん=プロですね。わかるます。
208 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 20:32:50 ] やっぱある程度面白くないとね。 mailあたりをいじってみたらどうかな
209 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 20:44:22 ] >>189 2-gramの全文検索エンジンの試作オススメ。 リスト処理や文字列処理などまんべんなく入ってる。
210 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 20:59:36 ] モチベーション最強は、やっぱエロだろ。
211 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 21:12:29 ] ・出版ブームが終了してまともな本が出てない ・Apache + mod_perlでも面倒なのにモジュールとか考えたくない ・webで探すとまともにメンテされてない糞ページがヒットしまくる ・Perl自体の記法が自由すぎるせいでそのページのコードが古いのかこっちの設定ミスなのでエラー出してるのか区別ができない 参入障壁高すぎ
212 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 21:37:14 ] >・出版ブームが終了してまともな本が出てない >>2 以外の本はビブリオマニアでなければ必要ないよ。 >・Apache + mod_perlでも面倒なのにモジュールとか考えたくない 文の前後が繋がってないよ。 >・webで探すとまともにメンテされてない糞ページがヒットしまくる Perlの疑問はググる前にperldocだよ。 >・Perl自体の記法が自由すぎるせいでそのページのコードが古いのか >こっちの設定ミスなのでエラー出してるのか区別ができない 最新のperl(1)でもPerl4時代のコードが問題なく動くよ。 混ぜておかしくなるのは「新旧」でなく「お作法」だよ。
213 名前:デフォルトの名無しさん [2008/05/22(木) 23:42:33 ] Perlでクロスワードパズルつくってみたいんだ まずは その準備として単語(表記はカタカナで)とその対応説明が 登録されているデータベース(Excelでもテキストでもなんでもいい) が必要です。どなたか知ってたら教えてください。それではおやすみ。
214 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 23:46:34 ] >>213 っ[Wikipedia]
215 名前:デフォルトの名無しさん [2008/05/23(金) 00:01:31 ] クロスワードパズルは数理パズルじゃなくて、おちゃらけクイズごっこだから得る物ないよ
216 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 01:46:17 ] chasenの辞書からも取り出せるんじゃないかな。
217 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 01:51:48 ] 茶筅の辞書に言葉の意味なんて入ってないだろ
218 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 07:32:37 ] >>213 クロスワード作るのとPerlは無関係 まず紙に書いて作ってPerlで起こす時に分からないことあったらまた質問しな
219 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:40:22 ] \xe3\x80\x9cは変換できるのに、\xc2\xa2は変換できん。何故? $PTNの内容をs///にべた書きすると変換できるようになる。何故?tr///が高速ならこんなことせんでもええのに。何故? (ver. 5.8.5) use encoding "utf8";use Encode; binmode STDIN, ":utf8"; binmode STDOUT, ":utf8"; $PTN="(\xe3\x80\x9c|\xc2\xa2)"; %HASH=("\xe3\x80\x9c"=>"\xef\xbd\x9e","\xc2\xa2"=>"\xef\xbf\xa0"); while(<STDIN>) { s/$PTN/$HASH{$1}/geo; print; }
220 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 02:10:23 ] w8ac6nxs.hp.infoseek.co.jp/cgi-bin/soldout/index.cgi perlで書かれたCGIゲームです。 パーラーのみなさん、ユーザーとして どうぞ登録してください。 まだプレイヤー4人くらいしかいません。 ユーザーの50%をパーラーにしたいという 計画です。
221 名前:デフォルトの名無しさん [2008/05/24(土) 03:24:15 ] >>219 $PTN="(\x{301C}|\x{00A2})";
222 名前:デフォルトの名無しさん [2008/05/24(土) 03:26:18 ] >>219 pc11.2ch.net/test/read.cgi/tech/1177930957/
223 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 11:07:24 ] >>221 ダメでした。 \x{00a2}が\xc2\xa2じゃないものになってしまいます……。
224 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 11:51:07 ] >>前スレ928の方 utf8を扱う tr/// で再帰時に落ちる件、ActivePerl 5.10.0.1003 では正常になっていました。 詳細は未確認だけど、33747 のmg.cへの修正が効いている感じ。
225 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 13:24:03 ] >>215 英会話の勉強とか。。。perlのコマンド、モジュール名だけでできたクロスワードだったら といてみたいかも。
226 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 13:25:32 ] >>225 「Head First Java 第2版―頭とからだで覚えるJavaの基本 (単行本) 」 ではJavaに関連した単語でクロスワードパズルがあった。
227 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 17:26:41 ] >>219 ソースコード中に「use utf8」の宣言が無いから、全ての文字列は、 UT8フラグの無い、シングルバイトの文字から構成されていることになる。 ネット上の情報からすると、Perl では、UTF8 フラグ なし文字列を Latin-1 文字列とみなしている(らしい)。次に、 binmode STDOUT, ":utf8"; の宣言があるから、print 文等において文字列が出力される際には、 シングルバイトのLatin-1 文字列が、utf8に変換される。その結果、 このような現象が起きる.....ということでいいのかな? 間違っていたら、エロイ人、修正して下さい。
228 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 19:50:41 ] だから猿用のテンプレを何で貼らんのよ?
229 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 19:58:46 ] >>227 >>3 #!/usr/bin/perl -w require 5.008001; use encoding 'utf8'; print utf8::is_utf8('binary?') ? 'with utf8 flag' : 'binary'; __END__ >>228 utf8 プラグマも encoding プラグマも使わないに越した事ないし。 フラグの有無で悩むより、マルチバイト文字処理が本当に 必要な箇所でだけフラグ付け外しする方がよっぽど楽。
230 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:02:05 ] つーかおまえら。 shは使わない方がいい、Perl使うべきだ。 とかいって、perlで $test = `cat /home/test/test.txt` とか多様してるやつってなんなの?
231 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:02:50 ] Missing ;
232 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:22:26 ] 使うななどとどこのどいつが言ってるんだ? ものぐさ番長=パーラーだ。
233 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:34:51 ] 猿用のテンプレってこれだっけ? 次スレからは入れような。 --------------------------------------------------------- # 【Perl 日本語処理の基礎の基礎】 # このレスは、Windows の ActivePerl で日本語処理を行う場合のテンプレートです。 # このレスの内容をそのまま、UTF8 形式のソースファイルに保存して下さい。 # 入出力ともシフトJIS形式のファイルまたはDOS窓を想定しています。 # まず、以下の行を先頭に入れて下さい。 use utf8; use open IO => ":encoding(cp932)"; binmode STDIN => ":encoding(cp932)"; binmode STDOUT => ":encoding(cp932)"; binmode STDERR => ":encoding(cp932)"; # 次に、あなたが実行したい処理の内容を入れて下さい。 print "SJISには、「十表貼申予暴」のようなダメ文字がある。\n"; sleep(1); # 以上の内容は、日本語処理が解らない人でも、とりあえず日本語処理ができてしまう # おまじないです。条件が異なる場合の対処方法は、ご自分で勉強して下さい。
234 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 02:05:50 ] >>230 if( `[ -f /home/test/test.txt ]` ) { $test = `cat /home/test/test.txt`;
235 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 21:58:51 ] >>219 です。 結局、\xc2\xa2の置換は諦め、別ツールで提供することになりました。 別のバージョンとか調べている時間がない……。
236 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 22:16:31 ] >>234 if( -f /home/test/test.txt ] ) { $test = `cat /home/test/test.txt`; }
237 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 22:17:11 ] >>234 if( -f /home/test/test.txt) { $test = `cat /home/test/test.txt`; }