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/
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`; }
238 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 22:57:43 ] 普通 my $test = `cat /home/test/test.txt` if(-f /home/test/test.txt); だろ
239 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 01:22:49 ] >>238 >>230
240 名前:デフォルトの名無しさん [2008/05/27(火) 22:41:24 ] C言語のプラグラミングできたお。 void main(int argc, char**argv) { system("cat /home/test/test.txt"); }
241 名前:デフォルトの名無しさん [2008/05/27(火) 22:48:04 ] www.amazon.co.jp/dp/4871483517 これが書かれた頃は perl など無かったが まさに、system() 関数使いまくろう!的な内容。
242 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 00:33:29 ] cでやるとすごく損した気になるんだよなあ
243 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 18:50:42 ] perlでやっても損でしょ。 perlでできる処理はperlでできるだけやるべき。 catとか。
244 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 19:08:58 ] >>243 確かにそうなんだけど、catについてはそうかな〜。 perl だったら、open,while,colose (またはread)とかで三段処理踏まないといけないから、 cat なんかは $test = `cat file.txt` なんかはよく使う。 実際どっちが早いとかBenchとったことはないけど・・・。
245 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 19:09:46 ] 失敬、close間違い
246 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 19:12:39 ] かなり遅いよ、perlで外部コマンド実行したら。 相当な差がある。 コード的には段階踏んでるが。
247 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 19:20:10 ] 一つ関数を書くか、CPANから探してきて使うだけでしょ
248 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 19:36:06 ] qxはforkしてshell起動して実行して・・・って感じなので perlだけで終わらせたほうが圧倒的に早い File::Slurp使うか、入れるのめんどくさかったら sub slurp {open my $fh , $_[0] || die("$_[0]:$!");local $/;<$fh>} って書いとけばOK
249 名前:244 mailto:sage [2008/05/28(水) 20:06:16 ] いやいや、そりゃあ自分も本格的な(?)スクリプト書く時や、 複数のファイルにループ処理する時はサブルーチンで書いたりするよ。 そうでなくて、ちょっとした確認とかで数行のスクリプトとか、 コマンドラインからのワンライナーみたいな感じで書く時には便利かな ってゆうぐらい。 そんな時にまで、いちいち、useやrequireやsub{}なんて書きたくないじゃん。
250 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 20:21:38 ] >>244 数行だとか、処理速度とか処理効率を考えなくていいなら便利。 あくまでコマンドレベルの用途ね。 ただ不明なのが、 >サブルーチンで書いたりする ってとこ。 関係が不明なんだけど。
251 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 20:50:01 ] むっか〜しは、sortは外部コマンドでやってたりしたもんだ。 環境やバージョンが変わったら、こまめにベンチマーク取って 最適の方法を探らないとね。
252 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 21:09:03 ] 「cat を使う」 …ねえ。知ってると思うけど $ cat > foo.pl #!/usr/bin/env perl -n print ; } { print "foo\n" ; # control + D をタイプ $ perl foo.pl foo.pl foo.pl $ perl -lne '}{ print $. ;' foo.pl
253 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 21:25:17 ] そいつは初耳だ 解説よろしく
254 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 21:46:36 ] >>253 optionに関しては perl -h するなりで -n assume "while (<>) { ... }" loop around program -p assume loop like -n but print line also, like sed で実際の挙動を見るには perl -MO=Deparse -ne 'print;' この結果を見ると while ループで単純にかこってあるだけだから ループの終りの「}」と無名ブロックの始まりの「{」を入れて 好きな様に処理させる。 応用すれば、「tsvの第二カラムの積算」なんてのは perl -lane '$t += $F[1] ; }{ print $t ;' FILE スクリプトファイルにしたときも同じ事。B::Deparse にて確認して。 perl -MO=Deparse foo.pl あとはお好みに。これで手に負えない時とかstrict適用したい時は 普通に書きゃいいだけだし。
255 名前:244 mailto:sage [2008/05/28(水) 22:41:30 ] >>250 それは、>>247 や>>248 に対するレスで、例えばopen();while(){うんたらかんたら・・・}close();を 一まとめにしたサブルーチンなんかに投げるってこと。 いや、スマン。244で速度のこととか言い出したんだけど、 自分が言いたかったことは、>>240-243 までの流れで、ちょっとした処理(>>240 とかw)を わざわざCで書いたんなら、かなり損した気分になるのは大いに理解できるけど、 それをperlでやるのは、そんなに損した気にはならない、 ってゆうか、perlだからこそ、$nakami = `cat file.txt`;や@files = `find ・・・`; みたいな事が手軽に出来る、ってのが、perlの大きな魅力の1つではないかと自分は思ってる。 ってことを言いたかった。 >>252 それはオレも初耳。 完全に理解しきれてないけど、色々応用が効きそうだ。
256 名前:デフォルトの名無しさん [2008/05/28(水) 23:31:00 ] >>246 >>248 「かなり」 とか 「圧倒的に」 とか、ずいぶんアバウトだな。 そんなんじゃ全然説得力が無い。 たとえば、$a = `cat unko.txt` すると 0.1秒かかるとしよう。 open・read・close すると0.01秒しかかからないとしよう。 で?それが何なの?どうなのよ、って事だ。 えっ?10倍早いだって? おいおい、0.1−0.01=0.09秒しか違わないんだよ。 たったの0.09秒の差を人間が感じ取れるとでも思うの? アフォくさ。
257 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 23:34:30 ] >>256 whileかけるようになったらまたおいで。
258 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 00:09:41 ] >>256 一回だけ処理するならその程度で済むかもね。
259 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 00:29:53 ] svn より、cvs のほうがインストールの敷居は低いんじゃないかなぁ。 cvs のほうが依存するライブラリ少いし、FreeBSD なら最初から入ってるし。
260 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 00:42:12 ] 俺はsubversion派だわ って誤爆か
261 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 13:56:47 ] 誤爆じゃないだろ。perldoc.jpの話じゃね?
262 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 15:29:41 ] my $message = "He is 5 years old\n"; $message =~ s/(\d+)/{ twice($1) }/e; #数字を検索して、2倍して置換 print $message; これなのだけど my $message = "He is 5 years old\n"; $message =~ s/(\d*)/{ twice($1) }/e; #数字を検索して、2倍して置換 print $message; これじゃダメなのはなんで?
263 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 15:35:34 ] * は0回以上の繰り返しだから、先頭でマッチする。
264 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 18:45:13 ] (\d*) 全てが任意なので、全ての行で置換が行われることに
265 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 18:47:59 ] 先頭つーか、全ての文字の間にマッチする。
266 名前:265 mailto:sage [2008/05/29(木) 18:48:46 ] \d\d* でやってみ。
267 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 19:34:03 ] >>265 egじゃなくてeだから、この場合は先頭だけだろう。
268 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 21:48:26 ] お、eをgと見間違えたわ。
269 名前:デフォルトの名無しさん [2008/05/29(木) 21:59:34 ] いーじーさんにつーれられーてー・・・ いや何でもない
270 名前:デフォルトの名無しさん [2008/05/29(木) 22:23:27 ] 逝っちゃった
271 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 23:56:31 ] 横浜港 乙
272 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 03:29:45 ] 港のヨ〜(ry
273 名前:デフォルトの名無しさん [2008/05/31(土) 19:56:52 ] cpan起動出来なくなりました。 #cpan Unable to get Terminal Size. The TIOCGWINSZ ioctl didn't work. The COLUMNS and LINES environment variables didn't work. The resize program didn't work. at /usr/local/lib/perl5/site_perl/5.8.3/i386-freebsd/Term/ReadKey.pm line 362. Compilation failed in require at /usr/local/lib/perl5/site_perl/5.8.3/Term/ReadLine/Perl.pm line 63. とエラーが出ます。 恐らく、perlのバージョンアップした際に不具合が生じているのかと思うのですが・・・。 ネットで解決法を探すも情報がほとんどなく手がかりもつかめません。 perl v5.8.3 OS FreeBSD 4.2-R 助けて下さい。お願いします。
274 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 20:09:04 ] もっかいCPANインスコしなおせばいいじゃん
275 名前:273 [2008/05/31(土) 21:57:38 ] インストールしなおしてみましたが、ダメでした。 同じ症状です・・・。トホホ。
276 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 21:58:41 ] 12 May 2008 20:15:40 を 2008/05/12 20:15:40 という風に返すモジュールないですか?
277 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 22:02:33 ] >>273 どこでおかしくなっているか明示されているんだから、 見てみればいいだけ。
278 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 22:19:44 ] >>276 use HTTP::Date qw(str2time time2iso) print time2iso( str2time("12 May 2008 20:15:40") );
279 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 22:22:11 ] ああスラッシュ(/)か >>278 なし
280 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 22:27:06 ] >>276 Date::Manipかな。日付を扱うならDate::Calcとともに定番。 perl -MDate::Manip -e 'print UnixDate("12 May 2008 20:15:40", "%Y/%m/%d %H:%M:%S")'
281 名前:276 mailto:sage [2008/06/01(日) 00:57:56 ] >>278 >>280 280氏のDate::Manipで解決できました。ありがとうございました。
282 名前:デフォルトの名無しさん [2008/06/01(日) 04:50:03 ] activeperl v5.10.0 built for MSWin32-x86-multi-thread において GD v2.39 GD::Graph v1.4308 GD::Text v0.86 で use GD; use GD::Text; use GD::Graph::bars; my $graph = GD::Graph::bars->new( 800, 800 ); my $gd_text = GD::Text->new(); GD::Text->font_path( _______DIR______); $gd_text->set_font(_______FONT______, 178) ;#or die $gd_text->error; $graph->set_title_font(_______FONT______, 178 ); _______DIR______ = undef | '' | 何か意味のある値 _______FONT______ = undef | '' | 何か意味のある値 をWindowsXP SP2あるいはWindows2k SP1で実行したとき どうもシステムのフォントを破壊?するようです
283 名前:232 [2008/06/01(日) 04:57:25 ] 以下windows板に書いた物。 windows XP 起動してみると ”ようこそ”が明朝体になってて ファイル名の全角空白までも文字化けしている状態になりました。 標準で恐らく第1水準漢字が表示できたりできなかったりするフォントが選択されているようです。 検索 -> 索 が表示できない 削除 -> 削 が表示できない 書き込む −> 込 が表示できない またcmdで日本語が返ってくるような状態 >> c:\hoge\foo.bar (実際には存在しないファイル) とかタイプすると ■■■■■ ■■■■と文字化けして (ファイルが見つかりませんとかそんな感じのメッセージ)と返ってきます。 support.microsoft.com/kb/880991/ja に従ってフォントキャッシュを消して再起動しても改善されませんでした。 Windows 2000 SP1では IE6の検索ウインドウに英字を入れるとイタリックに化ける という共通してんだか共通してないんだかな現象が発生します。 232に書いたコードを実行したときに即に破壊するわけではなく、次回起動時から影響が出始めるので 何がどうなってるのかまったく分からない上に妙な分野にまたがった問題のために、 5時間戦って何にも戦果が上がらずもう疲れたのでとりあえずよし牛でも行ってからOS入れなおすことにしますた。 GD(GD::Textだと思うんだけど)使うときは気をつけてください。
284 名前:282 mailto:sasge [2008/06/01(日) 05:17:28 ] すみません、 訂正 283 で s/232/282/g; で読んでください。 再現したくないのでぜんぜん検証ができないのですが これはCPANの作者さんにも報告したほうがいいのでしょうか?
285 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 17:00:58 ] ヤフオクの管理をしようと思います とりあえず出品リストを作ろうと思って、 openuser.auctions.yahoo.co.jp/jp/user/my46giga の内容の取得をしようと思っても、アダルト商品なので表示されません クッキー周りだと思うのですが、うまくいきません 書いてみたのは下のようなもので、 yahoo_cookieにはadministrator@auctions.yahoo.co[2].txtの内容を #LWP-Cookies-1.0 Set-Cookie3: YAUC_AV=..... みたいな感じでコピーしてあります どこが間違っているのでしょう use LWP::UserAgent; use HTTP::Request::Common; use HTTP::Cookies; use Encode; $cookie_file = 'yahoo_cookie'; my $cookie_jar = HTTP::Cookies->new(file => $cookie_file, autosave => 1); $ua = LWP::UserAgent->new; $ua->cookie_jar($cookie_jar); $req = GET "openuser.auctions.yahoo.co.jp/jp/user/my46giga "; $res = $ua->request($req); print $res->content;
286 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 17:12:13 ] どういう風にできないの?
287 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 23:15:25 ] 要素に配列への参照か文字列を含んだ再帰的な配列を出力するプログラムを作ろうとしているのですが ややこしくてついアイスに手を出してしまいます。 どうすれば幸せになれますか my @a=(1,2,3); my @b=qw(a b c); my $c=[\@a,\@b]; my $aa=[1,2,3]; my $bb=[4,5,6]; my $cc=[\$aa,\$bb]; sub pr{ my($depth,$ary_ref)=@_; if((ref $ary_ref) eq "ARRAY"){ foreach (@$ary_ref){ pr(($depth+1),$_) } }elsif(defined $$ary_ref){ print $depth,":",$$ary_ref,"do something\n"; }else{ print "do nothing\n"; } } pr $cc; pr $c;
288 名前:287 mailto:sage [2008/06/02(月) 08:56:48 ] 自己解凍しました。
289 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 11:07:13 ] 書きたかっただけだろw
290 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 12:34:14 ] sendmailで受信したメールを、procmailからperlスクリプトを起動して処理しているのですが処理結果ない場合があります。 どこかでエラーが出て止まっていると思うのですが、エラー内容をファイルに出力できないでしょうか? .procmailrcを :0 |perl ./foo.pl 2>&1 > ~/out.txt としてみましたがout.txtにはなにも出力されませんでした。(空ファイル)
291 名前:デフォルトの名無しさん [2008/06/02(月) 12:44:59 ] Windows だとその書き方はダメで perl ./foo.pl > ~/out.txt 2>&1 というふうに 2>&1 を後ろにもっていく必要がある。 Unix 系はどうか知らん。
292 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 12:55:40 ] 2>&1は後ろに持っていくはず。 Unix系でも。
293 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 13:42:21 ] perl ./foo.pl 2> ~/out.txt じゃだめだっけ?
294 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 14:45:45 ] >>290 リダイレクトは左から評価されるんで、順序に注意汁ってこったな 2>&1みたいのはイメージ的には $b = $a みたいな変数のコピー >~/out.txtみたいなのは $a = "hoge" みたいな代入 と思っておけば、イメージ的にはほぼ間違い無い $b = $a; $a = "hoge"; とかやっても、$bは"hoge"にならないでしょ 逆順だと上手くいくけど
295 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 19:03:12 ] 少しそれるが、この右からとか左からとかってのは結局のところ 対象の言語の実装がfastcallとかstdcallとかってことかね
296 名前:290 mailto:sage [2008/06/02(月) 19:33:01 ] >>291-294 ありがとうございます。解決しました。 perlじゃなくてshellの問題でしたね。すいません。 294氏のイメージは理解しやすかったです。
297 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 21:15:52 ] binmode(STDOUT); と指定したものをテキストモードに戻すにはどうしたらよいでしょうか?
298 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 21:40:55 ] binmode(STDOUT, ":crlf"); perlfunc読めよ糞が
299 名前:デフォルトの名無しさん [2008/06/02(月) 22:59:05 ] ↑ キミ、後輩を育てられないタイプだね。
300 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 23:06:24 ] うん。自分でもそう思う。 でも、いまのところ自営業で後輩いないからなんとかなってる。
301 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 23:11:36 ] 相手に糞とか言う輩は、殆どの場合己がそうだから。
302 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 23:31:02 ] 相手をくそとか言う輩は,ほとんどの場合周囲からくそと言われてるから。
303 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 00:41:30 ] >>301 > 相手に糞とか言う輩は、殆どの場合己がそうだから。 調査不可能なことを断言する嘘つきの出現です。
304 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 02:06:42 ] 断言してないような
305 名前:デフォルトの名無しさん [2008/06/03(火) 02:30:56 ] 質問してもいいでしょうか? winxp sp2を使っていて、activeperlを入れています。 パソコンのボリュームの調整をするコードを書きたいのですが、 perlからでもそういうのはいじれるのでしょうか? メイン音量・WAVE、あと、wmpなど音楽再生ソフトの音量もいじりたいです。 どこか参考になるサイトなどありますでしょうか?
306 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 03:48:25 ] なんでperlで? VBでも使った方が良くね?
307 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 07:37:39 ] >>305 どうしてもPerlでやりたいなら、Win32APIをつかえば? それ以上は、Perl関係ない。
308 名前:デフォルトの名無しさん [2008/06/03(火) 17:03:21 ] use utf8; binmode STDOUT, ':encoding(cp932)'; このコードを他のOS環境で使うためには :encoding(cp932) を手作業で書き換えてもらってるんですが 自動取得することはできますか? そのOSのデフォルトのコードページとかエンコードとかを 自動取得することは出来ますか?
309 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 17:32:59 ] >>308 「そのOSのデフォルトのコードページとかエンコードとか」というのが そもそも不明。
310 名前:デフォルトの名無しさん [2008/06/03(火) 18:18:44 ] >>308 OSごとにデフォで使われてる文字コードを完璧に判定することはできない。 同じ記述なら一括で置き換えればいいだけだし 共通する部分なら最初に開発した段階で 定数なり関数なり作ってそこに定義しておくべきだった。
311 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 19:03:49 ] >>308 OS名や環境変数で、ある程度は判別できるだろうね。
312 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 20:04:39 ] >>311 > OS名や環境変数で、ある程度は判別できるだろうね。 「そのOSのデフォルトのコードページとかエンコードとか」が存在するかどうか とか、それを守っているのかとか、そもそも一貫性があるのかとか はいちいち調べないとね。
313 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 20:21:42 ] 出力の話なんだから環境変数LANGみて空ならCP932にするだけで ほぼ解決しないかな?
314 名前:デフォルトの名無しさん [2008/06/03(火) 21:48:18 ] 中国とかフランスとかドイツの Windows って、環境変数 LANG に何て設定してあるの?
315 名前:デフォルトの名無しさん [2008/06/03(火) 22:25:52 ] そもそもUNIX系OSには「OSのデフォルトのコードページとかエンコード」なんて概念自体無いわけだが。 LANGはOSのデフォじゃなくて、「その人が端末に表示したいエンコード」。 端末装置はユーザごとに異なるのが当たり前・・・というUNIXの基本を忘れてるよ。 んで、メンド臭いなら全部 UTF8 にしたら? 今時のWindowsのメモ帳ならUTF8開けるよ。
316 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:29:21 ] Unix環境なら use open ":locale"; とかでよきに計らってくれるようだが Win32だと良い方法はないかも
317 名前:デフォルトの名無しさん [2008/06/03(火) 22:32:43 ] > use open ":locale"; これも駄目。 何故なら、プロセスの実行環境と、その出力を閲覧するユーザのlocaleが一致する保証は無いから。
318 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:36:41 ] >>317 それが「いい」か「だめ」かはケースバイケースでしょ。 それで少なくとも伝統的なUnixのI18N/L10Nプログラムと同じ動作にはなる。 Cでsetlocale(LC_CTYPE, "")するのとほぼ同じだから。 無論、設定ファイルや何かでオーバーライドできるようにすることが 望ましいけどね。
319 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:37:25 ] >>313 他国語版使ったこと無いから知らんけど、cp932が有効なのが そもそも日本語版Windowsだけなんじゃないかな。 >>314 中国はbig5?(と思ったら、Windowsでは、GB2312(cp936)らしい??) フランス等ラテン語件はlaten-1(ISO-8859-1)なんじゃね?(cpだと1252) >>316 VCからなら、locale取得したり、変更したりする関数があったハズ。 Win32APIから叩けそうな気がするけど、どうなんだろ。 まあ、日本語環境のみで使用するってんなら、>>313 でええかも。
320 名前:305 [2008/06/03(火) 23:32:11 ] >>306 CGIでPerlをかじりました。 実行ファイルにしてしまえば(自分のパソコンにはperl入ってるので不要ですが)Perlで問題ないと思いました。 Perlではwindowsを操作するようなプログラムはかけないなんてことはないと思ってたんですが。 特に簡単なのなら言語なんてほとんどなんでもいいのかと。 >>307 win32apiとやらを調べてみます。
321 名前:デフォルトの名無しさん [2008/06/04(水) 01:36:05 ] >>315 UNIXのメモ帳で端末のエンコードが変更できるんですか? エンコードの概念が無いなら、いったいどうやって漢字を表示するんでしょう? テキストファイルをopenするのに、いったい何のコードでデコードすればいいんでしょう?
322 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 02:00:32 ] >>321 > UNIXのメモ帳で端末のエンコードが変更できるんですか? 「UNIXのメモ帳」という謎の概念が提示されました。
323 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 02:01:13 ] viとemacsの戦い
324 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 02:02:10 ] ああ、いるんだよ。別なOSを「別なWindows」だと思ってるやつ。
325 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 02:08:47 ] しばらく俺の雇用は安泰だな
326 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 04:11:02 ] まあ、確かにメモ帳ライクな外見&操作を意識したテキストエディタはあるけどな。 それならUNIXのメモ帳と言っても何ら差し支えは……。
327 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 05:04:24 ] >>322 > > UNIXのメモ帳で端末のエンコードが変更できるんですか? これ全体が謎なんだな。
328 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 07:03:52 ] >>320 Perlもモジュールだなんだでいろいろ出来るようにはなったけど 基本はテキスト処理をするための言語だぜ? ちょっとじかじったくらいなんだったら それに適した言語をかじり直したほうがたぶん早いよ
329 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 08:25:15 ] >>320 win32apiをPerlから使うのは結構面倒なので、場合によるだろうけど、>>305 をみると、Perlでコーディングする意味はないと思う。 やってで気ないことはないけど、適材適所ってヤツがある。 VBだと金がかかるという場合、もしVista使ってるならサイドバーガジェットという選択肢もあるかな。
330 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 10:48:24 ] >>319 ちょっとやってみた感じだと、ActivePerlでもPOSIXモジュールのsetlocale()は 機能する模様(実際にはMSVCRTのsetlocale()を呼んでいるのだろう) use POSIX qw(locale_h) $old_locale = setlocale(LC_CTYPE, ""); とかやると、Japanese_Japan.932とかいう文字列が帰ってくる。 .の後ろがコードページのはず。 cygwinみたいにロケールが完全に腐ってる環境ではどうしようもないけどな。
331 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 00:25:55 ] >>323 おーっと、ここで 「ed・はるみ」 が乱入w
332 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 05:42:10 ] 帰れカス
333 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 10:17:09 ] Kwaliteeってなんですか?
334 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:09:00 ] $ ed hello, world ? help ? quit ? exit ? q ? ? ? --help ? -help ? fuck ?
335 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 16:18:29 ] ワロた
336 名前:デフォルトの名無しさん [2008/06/05(木) 20:11:12 ] open FILE, '<:utf8', "unko.txt"; read FILE, my $content, (stat FILE)[7]; close FILE; この (stat FILE)[7] の部分が、見た目が汚く感じるんですが もっと美しい書き方はありませんか? read FILE, my $content, 9999999999; とか、死んでもイヤです。 どっかのクソ言語の ReadAll メソッドみたいなのが欲しいです。
337 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 20:13:08 ] open my $file, '<:utf8', "unko.txt"; my $content = do{local $/; readline $file} close $file;
338 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 21:12:54 ] -s FILE
339 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 21:16:32 ] >>336 っ[File::Slurp]
340 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 00:13:26 ] my $content = join("",<FILE>);
341 名前:デフォルトの名無しさん [2008/06/06(金) 00:39:53 ] >>338 そっか、それがあったか。それ使わせてもらいます。感謝感謝。 あとの残りはクズですね。
342 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 00:46:36 ] 全部読むなら$/をクリアするのが常套手段だろ。
343 名前:デフォルトの名無しさん [2008/06/06(金) 00:59:50 ] OBJS = ${CSRC:.c=r30} .c.r30: ${CC} $< Makefile中の$<をPerlを使って置換してCCに渡すことは可能でしょうか? $<に含まれているスラッシュを\\に置き換えるために $< =~ s|/|\\\\|g このような置換を行いたいです。 環境はCygwinPerl5.8.8です。
344 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 01:00:03 ] >>341 どうやって使うの?
345 名前:デフォルトの名無しさん [2008/06/06(金) 01:11:15 ] sub write { ($fileName, $text) = @_; open(FH, "+>$fileName"); print FH $text; close(FH); } こんな感じでファイルを出力するコード書いたのですが、 サブルーチン経由だとなぜか動きません サブルーチンなしだと正しくファイルが書き出されました なにがおかしいのでしょうか
346 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 01:21:24 ] writeという標準関数があるから
347 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 01:52:38 ] >>346 writeという標準関数の存在しりませんでしたが 今回はなぜこのコードが動かないかについてよろしくお願いします というのも、同じ仕様(関数名,引数,戻り値)を複数の言語で記述してみてるだけなのです
348 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 02:11:42 ] 組み込み関数を再定義するためにはお作法がある。writeが再定義可能かは知らん。 perlsub読むか、親切に解説してくれるおせっかいが通りかかるのをまて。
349 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 02:23:57 ] あ、なるほど そういう意味でしたか 文法自体はあってるんですね ありがとうございます
350 名前:デフォルトの名無しさん [2008/06/06(金) 02:35:57 ] &writeでもだめなのかな。
351 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 08:19:33 ] >>349 ほかにどういう意味だと思ったんだ?
352 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 08:22:01 ] >>343 makeのsubstやpatsubst関数じゃだめ?
353 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 08:33:28 ] perlを始めたばかりなのですが、 foreachやwhile等で、何回目のループかをカウントしているような 変数は無いでしょうか? 自前で用意すればいいだけなのですが、そのような変数が無いかと思い 質問させて頂きます。
354 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 11:20:21 ] あったとしても、時前で用意した方が他の人も読み易いんじゃないかな。
355 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 11:57:16 ] そういえば、不精なPerlのハッカーたちは、foreachを使わずに全てforを使う……だなんて どこかに書かれてたような気がするけど、実際どう? 自分は使い分けてる。
356 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 12:02:27 ] 自分は for かな後ろ見りゃわかるし。 foreach で (;;) とかやらなきゃどっちでも良いとは思う。
357 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 12:08:14 ] forもforeachも一緒じゃないの?ただのシンタックスシュガーかと思ってたけど
358 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 12:17:35 ] >>357 それを前提として書いたつもり。 a) for my $n (0..9) {} b) foreach (my $n=0; $n<10; $n++) {} a は許容できるが、b は嫌かなってこと。
359 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 12:21:56 ] for しか使わね。それと、C type の for は使わね。
360 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 12:29:16 ] 俺も同じくforのみ
361 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 13:32:56 ] どうでもいい。 んで、暗黙のループカウンタなんてあったら言語仕様としてきもい
362 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 15:39:58 ] C言語の const 変数の様なのは定義できないでしょうか? perl 5.8です。
363 名前:356 mailto:sage [2008/06/06(金) 16:14:23 ] んー、やっぱforだけとかの人のほうが多いのね。 まさにPerlスタイル。 >362 use constantとかはー?
364 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 17:02:47 ] use Readonly ; >>361 $. は?w
365 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 17:07:46 ] つまりキモイってことですよPerlはw
366 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 17:19:32 ] 柔軟な頭を持ってない奴が負け惜しみを言ってますw
367 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 17:23:44 ] ゴミを美味いと思う自分の狂った味覚を「柔軟さ」と主張する人生ですかw
368 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 17:31:57 ] 君がゴミだと思って捨てていた部分は実は高値で取引される珍味でした。
369 名前:デフォルトの名無しさん [2008/06/06(金) 17:56:23 ] >>362 Cライクにやりたいなら use constant NAME => 'hoge'; ただし Perlでベアワードはメンドくさい。 "my name is NAME" とやっても展開されないから "my name is ".NAME とするしかない。 *NAME = \'hone'; これを使えば "my name is $NAME" で展開できる。 *C_STR = \'xxxx'; # 文字列定数。参照は $C_STR *C_NUM = \100; # 数値定数。参照は $C_NUM *C_ARRY = [1,2,3]; # 配列定数。参照は @C_ARRY *C_ASSOC = {k1 => v1,k2 => v2}; # ハッシュ定数。参照は %C_ASSOC
370 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 18:04:39 ] >>368 まぁ、珍の字はニュアンスぴったりだと思うよ。 Perlの仕様を漢字一字で表せといったら、珍・奇・醜・糞あたりが有力だろうし。
371 名前:デフォルトの名無しさん [2008/06/06(金) 18:44:43 ] forは数値カウンタのときやCライクな使い方のとき。 配列から読み取るってときはforeachにしてるな。こっちはPHPぽい方で
372 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 18:45:22 ] >>370 あれ?なんでわざわざこのスレに?
373 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 18:50:29 ] ・上にあがってるから ・Perlを盲目的に全肯定するキチガイだけが住人ではないから
374 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 19:03:32 ] 誰も全肯定なんてしとらんがな・・・
375 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 19:41:58 ] それを言ったら、誰も負け惜しみなんて言ってないよな。
376 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 20:34:35 ] >>373 ゲテモノだってのは認識しとる。
377 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 21:41:28 ] >>352 レスありがとうございます。 substを使ってうまくいきました。 ありがとうございました。
378 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 22:15:29 BE:477576296-DIA(100004)] まず匿名の臆病者は自分の (好きな|メインの) Lightweight Language を言えよ
379 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 22:52:56 ] BER圧縮された数値(オフセット値、ID)のビット列に対し、 二分探索法を行なっている実装例ってありませんかね?
380 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 01:02:59 ] そういうのはCでやった方が
381 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:17:18 ] >>378 できるよ。 以上。 ↓次どうぞ
382 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 00:21:35 ] ↑おつかれさまでした
383 名前:デフォルトの名無しさん [2008/06/08(日) 19:02:55 ] 他のファイルに変数を設定したファイルを用意し、 そのファイルを読み込み設定された変数を利用したいのですが、 どのようにすれば実現できますか?
384 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:05:01 ] そのようにすれば
385 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:13:01 ] そういうふうにプログラムすりゃいいでしょ
386 名前:383 mailto:sage [2008/06/08(日) 19:14:47 ] すみません。 サンプルコードなど頂けませんでしょうか?
387 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:16:05 ] do "configs";
388 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:17:30 ] D'OH !
389 名前:383 mailto:sage [2008/06/08(日) 19:19:09 ] reqireでできました。 阿呆しか答えてくれないので、聞く手間をかけずに調べれば良かったですね。
390 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:26:32 ] reqireなんてあったか?
391 名前:383 mailto:sage [2008/06/08(日) 19:26:33 ] >>389 は私ではありません。 requireも試してみたのですが、変数の値が継承されないようで うまくできませんでした。 >>387 ありがとうございます。 試してみたのですが、requireと同じように変数の値が継承されません。 doと言うものを調べたのですが、while文のdoしかなかなか見付からず 使い方が悪いのかも知れません。 すみませんが詳しく教えて頂けるとありがたいです。
392 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:28:41 ] まず自分で調べる手間をかけずにいきなり聞くという方法で何か学ぼうとするのもなんだかなあ…。 何かを知ろう学ぼうとするなら知る学ぶ為の正しい手段を取るべきだと思うけどなあ…。
393 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:42:06 ] >>391 perlfunc嫁
394 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:49:07 ] 何ができないと言っているのかがわからない
395 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 19:59:13 ] 1行ずつ読み込んでdoじゃだめなわけ?
396 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 20:18:32 ] doはファイル名を引数に取るわけだが
397 名前:デフォルトの名無しさん [2008/06/08(日) 22:03:27 ] open FILE, "unko.pl"; read FILE, my $unko, -s FILE; close FILE; eval $unko;
398 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 22:04:06 ] それならdoでいいだろ。
399 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 22:32:17 ] 関係ないけど do-dai っていい曲だよね
400 名前:デフォルトの名無しさん [2008/06/09(月) 01:10:43 ] WinXP、perl5.8.8、でPerl/Tkからボタンを押した時にthreadsを使ってバックグラウンド処理をしようと考えています。 バックグラウンド処理そのものは最後まで実行されますが、終了同期を取ろうとjoinを呼び出した時に、クラッシュして更に、Free from wrong pool during global… となります。 これを回避出来た猛者はいますか?
401 名前:有吉 ◆01z1p9gzeo mailto:sage [2008/06/09(月) 01:43:25 ] 子プロセスから親プロセスのTkウィジェットにアクセスするとactiveperlが落ちてしまいます。 $top = MainWindow->new(); $frame1=$top->Frame(-height=>25)->pack(-side=>top,-fill=>'x',-expand=>'no'); $listbox1 = $frame1->Scrolled('Listbox',-scrollbars=>'osoe')->pack(-fill=>'both',-expand=>'yes'); $listbox1_ref = \$listbox1; if ($pid = fork()) { MainLoop; } else { &refresh($listbox1_ref); } sub refresh { my $listbox1_ref = shift; $$listbox1_ref->delete(0,'end'); opendir(DIR,'mail/'); @file = sort readdir(DIR); @file = grep(!/^\.\.|^\./,@file); foreach(@file) { my $time = localtime((stat "mail/$_")[9]); $$listbox1_ref->insert('end',$time); } } ログには Free to wrong pool 1ec5020 not 274dc8 at C:/Perl/site/lib/Tk.pm line 250. と出て終わってるようです。refreshの処理中に落ちてるみたいです。 ググったところ、同じ症状の方もいるようですがこの場合の解決策が見つかりませんでした。 子プロセスから親プロセスのウィジェットにはアクセスできないのでしょうか?ご教授ください。OSはWinXP SP2です。
402 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 01:44:44 ] 改行が多すぎると怒られたので 色々はしょったら読みづらくなりました。 大変申し訳ないです。。
403 名前:デフォルトの名無しさん [2008/06/09(月) 11:00:13 ] >>398 キミ、シロウトだね。
404 名前: ̄ ̄ ̄ ̄ ̄V ̄ ̄ ̄ ̄ ̄ ̄ ̄ mailto:sage [2008/06/09(月) 11:09:09 ] ,. -ー冖'⌒'ー-、 ,ノ \ / ,r‐へへく⌒'¬、 ヽ {ノ へ.._、 ,,/~` 〉 } ,r=-、 /ク ̄`y'¨Y´ ̄ヽ―}j=く /,ミ=/ ノ /ル'>-〈_ュ`ー‐' リ,イ} 〃 / / _勺 ミ;;∵r;==、、∴'∵; シ 〃 / ,/ └' ノ \ こ¨` ノ{ー--、〃__/ 人__/ー┬ 个-、__,,.. ‐'´ 〃`ァーァー\ . / |/ |::::::|、 〃 /:::::/ ヽ / | |::::::|\、_________/' /:::::/〃
405 名前:383 mailto:sage [2008/06/09(月) 11:24:22 ] すみません。私の書き込みが悪いとおもうので、再度書き込ませていただきます。 -- define.pl ------ my $hoge = "hoge"; -- body.pl ------ do "define.pl"; print $hoge; というファイルがあったとしても、body.plでdefine.plの変数が使えません。 どのようにすれば、他のファイルの変数を使えるようになりますか?
406 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 11:33:56 ] myしてやがる……
407 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 11:39:48 ] >>405 なんというオチ
408 名前:デフォルトの名無しさん [2008/06/09(月) 12:31:41 ] いぢわるしねいで、ちゃんと教えてやれよ。 my じゃなく、 our で宣言しろって事だよ。
409 名前:383 mailto:sage [2008/06/09(月) 13:03:46 ] そんなのがあったのですね・・。 簡単に本を読んだのですが、myとlocalがあってmyを普通使う。localはあまり使わない。 という説明でした・・。 リャマ本というのを簡単に確認したのですが。ourって載ってます? 見つけられなかったのですが。
410 名前:383 mailto:sage [2008/06/09(月) 13:04:12 ] お礼を言い忘れました。 お手数をおかけしてすみませんでした。 ありがとうございました。
411 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 13:22:51 ] 最初から405かいときゃ無駄なレスしなくていいのに jこれだから小出しするやつはうぜぇ
412 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 13:38:55 ] >>409 アルパカ本に載ってる。
413 名前:273 mailto:sage [2008/06/09(月) 13:41:12 ] >>273 自己レス いろいろと遠回りしたけど、ReadKey.pm入れ直しで スンナリ解決しました。 ハァ・・・、なんですぐにやらなかったのか。 自己嫌悪だわ。 何時間費やしとんねん!
414 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 13:43:11 ] >>410 こんな感じ↓ ttp://blog.livedoor.jp/dankogai/archives/50982802.html
415 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 13:46:16 ] 思うんだけど,この業界の人って,自分で調べたことに対して疑問を抱いた!みたいな 感じでブログとかに書いておくと,すげえ補足を書いてくれたりするよね。 俺はそういうところが好きだ。
416 名前:デフォルトの名無しさん [2008/06/09(月) 13:48:00 ] 質問です。Perlでクラスを使ってみたいのですが どのように書けばいいのでしょうか? 知らない用語ばかり出てきて、さっぱり答えにたどり着きません。。 例としてPHP版で書きます。これと同等の機能をPerlで書いてください。 お願いします。 class Hoge { private $var1 = 'A'; function var1() { return $this->var1; } function getValue() { return 1; } } class Hage extends Hoge { function getValue() { return 2; } } $hogehoge = new Hoge(); print $hogehoge->getValue(); $hagehage = new Hage(); print $hagehage->getValue();
417 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 14:10:53 ] #!/usr/bin/perl use strict; use warnings; { package Hoge; sub new { my $class = shift; my $self = {var1 => "A"}; bless $self, $class; return $self; } sub var1 { my $self = shift; return $self->{var1}; } sub getValue { my $self = shift; return 1; } } { package Hage; use base qw(Hoge); sub getValue { my $self = shift; return 2; } } my $hogehoge = Hoge->new(); print $hogehoge->getValue(), "\n"; my $hagehage = Hage->new(); print $hagehage->getValue(), "\n";
418 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 14:41:00 ] >>416 一度perltootをキチンと読んでみては? 和訳↓ ttp://perldoc.jp/docs/perl/5.10.0/perltoot.pod
419 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 15:35:06 ] ./にローカルインストールしたモジュールを使うことができません。 使おうとしているものはCurses.pm search.cpan.org/src/WPS/Curses-1.06/Curses.pm です。もしよろしければご教授ください。 $ ls Curses.pm* test.pl* $ cat test.pl #!perl unshift @INC, "."; use Curses; exit; $ perl -w test.pl Can't locate loadable object for module Curses in @INC (@INC contains: 略 .) at test.pl line 4 Compilation failed in require at test.pl line 4. BEGIN failed--compilation aborted at test.pl line 4. $
420 名前:デフォルトの名無しさん [2008/06/09(月) 15:48:35 ] use lib '.';
421 名前:デフォルトの名無しさん [2008/06/09(月) 15:54:07 ] ba5.txtには以下になってます。 4131048 4131053 x x 4850328 x x x x 3870357 3870369 x x 4131038 4131045 x x x この場合にxの行を一番最後の行の数値に置き換えたい場合 perlだとどのようにすればいいんでしょうか。 シェルでやろうとしたんですけどシェルだとちょっと難しいみたいなので perlでやりたいと思ってます。誰かいいスクリプトを教えて下さい。 宜しくお願いします。
422 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 16:07:39 ] >>420 use lib '.'やuse lib qw(.)を試してはいるんですが、>>419 と同じエラーが出てしまいます。 また、use Curses;をuse ::Curses;として実行すると、>>419 のCompilation failed in require at test.pl line 4.が消え、 Can't locate loadable object for module CursesもCan't locate /Curses.pmと表記が変わります。
423 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 16:51:43 ] >>419 本当にCurcesモジュールをインストールしたのか? Curses.pmをコピーしただけじゃないのか?
424 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 16:52:54 ] >>417 ありがとうございます。 継承するときは、 use base qw(Hoge); なんて書くんですね。 sub newってなんなんでしょう? なんでそんな関数が必要なのですか?
425 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 16:55:17 ] >>423 >コピーしただけ はい。アクセス権の関係でインストールが出来ないので、 test.plと同じディレクトリにCurses.pmを配置し利用したいと思っています。
426 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 16:59:36 ] >>425 だから、Cursesモジュールは、C言語で書かれたバイナリがメインで、 Curses.pmはそのインターフェイスでしかない。 ちゃんとコンパイルしてインストールしないとだめ。 エラーメッセージにある "loadable object" っていうのがそれ。 アクセス権の関係ってどういうこと? インストール過程で、 インストール先を指定できるぞ。 コンパイラも使えないのか?
427 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 17:00:37 ] >>424 コンストラクタ 不精しないできちんとperltootを読め。 >>418
428 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 17:03:00 ] >>421 聊かエスパーぎみにレス。↓こういう事がしたいのか? $ perl -pe '$_=$t if/^x/; $t=$_' ba5.txt 4131048 4131053 4131053 4131053 4850328 4850328 4850328 4850328 4850328 3870357 3870369 3870369 3870369 4131038 4131045 4131045 4131045 4131045
429 名前:421 [2008/06/09(月) 17:16:09 ] >>428 さん そのとおりです! ありがとうございます!
430 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 17:17:17 ] >>426 ありがとうございます。何か大きな勘違いをしていたようです。 Cの方でcurses/ncursesを使っていたので、システム上にcurses環境があると救いようの無いいい加減な誤認があり、 また、@INCサーチパス上にCurses.pmを置くことが出来ないのでアクセス権という的外れも甚だしい話をしてしまいました。 現在make中です。今のところエラーは吐いていません。 wget search.cpan.org/CPAN/authors/id/G/GI/GIRAFFED/Curses-1.23.tgz tar xvf Curses-1.23.tgz cd Curses-1.23 #Makefileの生成 perl Makefile.PL GEN PANELS MENUS FORMS #コンパイル make
431 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 17:28:19 ] >>427 コンストラクタなんですか? 普通、コンストラクタは必要がある場合を除いて 書かないと思うのですが? 書かないとまずいですか?
432 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 18:16:16 ] 釣れますか?
433 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 18:24:44 ] >>427 初心者には perltoot を読むのを薦めるよりも perlboot を読むのを薦めた方が良いと思うよ なんとなく読む気が無さそうな気配ではあるけども 5.8 なら以前どこかで perlboot の邦訳も見掛けたた気がするけど
434 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 19:43:23 ] >>428 すげー。そういう意味だったのか。 そこまで読めなかったよ。
435 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 01:30:01 ] 5.005の頃、よくXS書いてたんだけど その後、Perlはワンライナーでしか使わなくなってしまった。 その頃のXSの知識ってまだ使えるのかな。
436 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 03:06:37 ] oshiete1.goo.ne.jp/qa4087225.html
437 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 04:02:57 ] おや、なんだかどこかで見たような……。
438 名前:デフォルトの名無しさん [2008/06/10(火) 11:24:14 ] マルチ死ねよwwwwwwwwww
439 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 12:02:49 ] HTML::FillInForm を使用しているのですが、出力されるhtmlから DOCTYPE 宣言が消えてしまいます。 対処法がありましたら教えて下さい。
440 名前:439 mailto:sage [2008/06/10(火) 13:58:23 ] ここ(↓)を参考にして自己解決しました。 www.geocities.co.jp/SiliconValley-Sunnyvale/6128/perl/htmlpaser.html use HTML::FillInForm; use base qw(HTML::FillInForm); sub comment { my($self, $text) = @_; $self->{output} .= "<!--$text-->"; } sub declation { my($self, $text) = @_; $self->{output} .= "<!$text>"; }
441 名前:439 mailto:sage [2008/06/10(火) 14:05:33 ] >>440 × sub declation { ○ sub declaration {
442 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 15:39:31 ] ロード済みのサブルーチンと同じpackageかつ同じ名前のサブルーチンを含む外部plファイルを requireすると、後の内容で上書きされてしまいますが、元のサブルーチンを壊さないですむ 方法はないでしょうか。
443 名前:デフォルトの名無しさん [2008/06/11(水) 18:07:18 ] 皆さん、エスパーでよろ。 意図した挙動にならず、どこが問題かのきっかけも掴めずにかなり時間をかけてしまったが、 ようやくやりたいこと出来た。が、どうにも腑に落ちない。 DB(mysql)からデータとってきて、Scraperに渡して・・・と、こんな感じで組んでいたんだけど、 レコード数は3とします。 パターン1------------------------------------ $rows = $sth->rows; print "hajimari"; while(my $ref=$sth->fetchrow_hashref()){ $scraper->scrape($ref->{url}); print "roop dayo"; } print "owari"; このような感じでやっていたんだが、ループが1回しか回らない!?なんで? てなことで、webで情報あさったり、モジュールのソース眺めてもわからんし。
444 名前:デフォルトの名無しさん [2008/06/11(水) 18:07:56 ] パターン2------------------------------------ $rows = $sth->rows; print "hajimari"; while(my $ref=$sth->fetchrow_hashref()){ print "roop dayo"; } print "owari"; と、Scraperになげなかったら、ちゃんと3回ループするんだよね。 でScraperでこけてんのかと思いきや、これも特に見当たんない。 問題なさそうだ・・・。
445 名前:デフォルトの名無しさん [2008/06/11(水) 18:08:25 ] パターン3------------------------------------ $rows = $sth->rows; print "hajimari"; $i = 0; while(my $ref=$sth->fetchrow_hashref()){ $url[$z] = $ref->{url}; $i++; } for($z = 0;$z < $rows;$z++){ $scraper->scrape($url[$z]); } print "owari"; ちょいと思うところがあり、一旦配列にほりこんでみる・・・。 キター!!!3回まわったじゃんか! ふむ、思うところというのは、Scraperでこけないでループ1週目は ちゃんとループしているということ。 で、結局ちゃんとした原因が解ってないんだけど、メモリ制限とか あるのかな? アドバイス下さい。 (もしかしたら、CGIまわりの問題?) OS:FreeBSD Perl:5.8.3
446 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 18:44:14 ] デバッグしろよ
447 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 18:47:02 ] またきたのか
448 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 18:48:59 ] Dump吐いてみたら?
449 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 18:52:18 ] 内部状態をインスペクトしたら
450 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 18:56:50 ] printf だ! printf を挟め!
451 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 18:59:07 ] if(!$hoge->{'hoged'}){ $hoge->{'hoged'} = []; } push(@{$hoge->{'hoged'}}, $hoging); これをスマートに書く方法ありませんか? ちなみに$hogingは2箇所以上に書くなら一時変数必要です。
452 名前:デフォルトの名無しさん [2008/06/11(水) 19:04:06 ] 少し説明がヘタだとは思いますが以下の処理をしたいです。お願いします。 ★処理の方法 行の先頭が [ の場合には、行の先頭が 20 の行の先頭にそれを加える 行の先頭が 空白の場合には一旦処理を終えて再度行の先頭の [ を読む 行の先頭に < がきた場合にはその処理を終えて再度行の先頭の [ を読む 結合した場合、その文字列の最後に必ず区切り文字としてタブを挟む ●処理前のabc.txt <100100> [1044]あいうえお 20321 1137 4850328 60 20321 1137 4850328 60 20321 1137 4850328 60 【合計1044】 [1047]かきくけこ 20319 1090 3870357 20319 1101 3870369 【合計1047】 [1051]さしすせそ 20328 1206 4131038 52 20328 1206 4131045 52 20328 1206 4131045 52 【合計1047】 【累計】 <100200> [1057]たちつてと 20328 1206 4131045 52 20328 1206 4131045 52
453 名前:デフォルトの名無しさん [2008/06/11(水) 19:04:54 ] ●処理後のabc.txt <100100> [1044]あいうえお 20321 1137 4850328 60 [1044]あいうえお 20321 1137 4850328 60 [1044]あいうえお 20321 1137 4850328 60 【合計1044】 [1047]かきくけこ 20319 1090 3870357 [1047]かきくけこ 20319 1101 3870369 【合計1047】 [1051]さしすせそ 20328 1206 4131038 52 [1051]さしすせそ 20328 1206 4131045 52 [1051]さしすせそ 20328 1206 4131045 52 【合計1047】 【累計】 <100200> [1057]たちつてと 20328 1206 4131045 52 [1057]たちつてと 20328 1206 4131045 52 どうかよろしくお願いします。
454 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 19:15:23 ] >>452 宿題を肩代わりするスレじゃないんだけど。 少しはperl文を書いてから出なおせ。
455 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 19:33:31 ] たしかに最近どうみても入門者向けの課題を回答させようとする連中が多いような?
456 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 19:39:49 ] >>451 push(@{$hoge->{'hoged'}}, $hoging);
457 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 19:55:00 ] 宿題を人に頼む奴は大学やめればいい 学部生いわく。
458 名前:443 [2008/06/11(水) 19:59:01 ] >>446-450 おしかりありがとう御座います。 デバックの仕方を勉強します。 Data::Dumper で一目瞭然でした。 猛省します。 原因はなんだったのかって?恥ずかしすぎて・・・。 言いたくないんですけど。 ループ内で。。。、DBハンドルが・・・。 ごめんなさいごめんなさいごめんなさい 猛省します。 大事なことなので2回言いました。
459 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 20:17:52 ] >>456 ありがとう。解決した。
460 名前:454 [2008/06/12(木) 01:05:52 ] >>454 すみません。bashで書いていたんですけどbashだとうまくいきそうにないので perlでお願いしてみました。すみません。bashのコードとしては以下のような感じです。 無茶苦茶なコードですみません。 #!/bin/bash for iii in `cat abc.txt` jjj=`sed -n '2p'` do if test [ $jjj = "^20" ] then paste "$jjj" "\t" "$iii" > ccc.txt else fi done bashでは無理っぽいのでスクリプトも途中までの処理しかしてないです。 perlで処理すればと思ってお願いにきました。perlはあまりよくわからないのでお願いします
461 名前:452 [2008/06/12(木) 01:08:15 ] 寝ぼけてて名前間違えました。すみません。
462 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 01:36:40 ] 正直いうと、>>452 に書いてある処理の一覧が全然論理的じゃないので俺には理解できない。 つまり、「一旦処理を終えて」と「その処理を終えて」がどう違うのかとか、 そもそも「その処理」や「その文字列」とは何なのかとか、 行の先頭が空白なのに行の先頭の[を読めとはどういうことなのかとか分からない。
463 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 02:15:05 ] 処理前と処理後を見ればやりたいことはわかるが、 この程度、forと正規表現使えばどうにでもできるだろ あと、処理の方法はひどすぎる 自分でもう一回読んでみろ
464 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 06:43:04 ] >>460 俺は、「perl文を書いてから出なおせ」と書いた。bashなんか求めてねえ お前さんがperlで書く気0なのに答えてやる義理なんざねえよ 「perlの知識0です。エスパーしてください。」 って質問には>>428 で答えてしまって反省してんだよ >>436 のリンク先でも読んでちったー自分で考えろ
465 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 09:42:25 ] >>442 require するときに退避しといて戻せばいいんじゃない? { local *hoge::f; require ... } これだと$hoge::fも影響受けるのがやりすぎだというなら、 { local *hoge::f = sub{}; require ... }
466 名前:デフォルトの名無しさん [2008/06/12(木) 11:03:25 ] >>442 オブジェクト指向に設計すれば問題なす
467 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 11:08:45 ] オブジェクト指向までやらなくてもせめてモジュールにして Exporter使う方が楽だろうと思う。 読みたいファイルが他人が作ったもので中身も見たくない のならしょうがないけどな。
468 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 11:20:59 ] 5.10にしたらsvkが動かなったんだけどsvk使ってる人はどうしてんの?
469 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 01:15:19 ] require や do でベタの perl を呼ぶ時に引数与えたい場合どうするのが普通なんでしょか? % ./hanage.pl -help を do とかを通してやりたい時、というです。 @ARGV=("-help"); # とかしておいて、 do "hanage.pl"; # とすると、実現できているようですけど、これが普通でしょか? また、ほかに方法があれば。
470 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 02:07:04 ] それで動いてるならいいじゃないの?何が不満なの?
471 名前:469 mailto:sage [2008/06/13(金) 02:46:35 ] ひとつは、自信がないから。 ひとつは、ほかのやり方を知りたいから。"There's more than one way to do it" 目から鱗、鼻から悪魔、みたいな記述が perl ならまだある筈だと。 自分の例だと面白くも何ともないのでねぇ。
472 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 06:34:01 ] { local @ARGV=("-help"); do "hanage.pl"; } とかでいいだろ。べつに@ARGVじゃなくてもいいけど。
473 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 06:55:17 ] …do EXPR は、goto文並みにobsoleteな感じがするんだが、皆さん使うの? require EXPR ですら、perl4的でどうしても避けられない場合にのみ嫌々使うんだけど
474 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 08:10:51 ] すみません。ものすごい基本的なこともか知れませんが質問させて下さい。 @listに複数行に,で区切られた5つのデータがあるとします。 my $cnt = 0; foreach( @list){ @list2[$cnt] = split( /,/, $_); $cnt++; } というのを考えたのですが、 Use of implicit split to @_ is deprecated どのようにすればいいのでしょうか?
475 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 08:21:53 ] >>474 @list2[$cnt] = @_ = split( /,/, $_);
476 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 08:22:41 ] 475は無し。何も考えずに書き込んだ。
477 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 08:54:07 ] >>474 @{list2->[$cnt]}
478 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 08:58:33 ] >>474 @{$list2[$cnt]}
479 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 09:27:49 ] >>473 #--- config.file --- my $dir = '/path/to/base/dir'; { foo => 1, bar => [ 2..5 ], baz => "$dir/extra.file", }; #--- なんて設定ファイルを作って $conf = do '/path/to/config.file'; で読むという手抜き実装はよくする。 設定ファイルを Perl で書けるのが柔軟で楽。
480 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 12:06:38 ] >>473 useだとコンパイル時に読み込まれちゃうから 動的に読み込むファイル決める場合は "use $file;"するかdo "$file"するくらいしかないじゃん 前者よりはdoのほうが素直じゃね?
481 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 12:21:25 ] >>480 動的に use したいだけなら require の方がもっと素直だね。
482 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 12:34:19 ] >>479 ,>>480 レスthx. config file だったらYAMLとかそっち使っちゃってるw 480の方は状況があまり想像出来ん。Storable知る前だったら Data::Dumperの出力云々で使ったかもしれんが…。 俺に機会が無いだけなのねw
483 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 12:38:20 ] あ。ちなみにData::Dumperの動的処理の時も(しぶしぶ)require使ってた。 481氏の意見と同じ感覚。
484 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 13:34:15 ] CSVファイルがありこれをソートしたいのですが、 3番目の要素でソートしたりできませんか?
485 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 13:38:49 ] >>484 perlを使うよりsortコマンドのほうが早そうだけど?
486 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 13:41:01 ] CSVの扱いはPerl向きじゃない気がする。
487 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 13:42:39 ] >>486 CSV 何で処理してる?
488 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 14:09:47 ] >>482 delegateパターン実装とか
489 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 14:27:27 ] エクセルでやれば?w
490 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 14:29:25 ] Pythonだとこんな感じ import sys, csv from itertools import imap from operator import itemgetter writer = csv.writer(sys.stdout) for row in sorted(csv.reader(sys.stdin), key=itemgetter(2)): writer.writerow(row)
491 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 14:31:09 ] ああimapとかimportする必要ねえな 無視して
492 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 14:31:49 ] なんでもデリミタをコロンにしてたらUNIX病だと怒られた
493 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 15:02:19 ] あれ?PerlにもCVS用のモジュールがあったような?
494 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 15:10:11 ] そしてSJISでハマるに一票。pythonも同じと思うが。
495 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 15:31:56 ] 基本すぎてわらけるかもしれないけど、教えてください。 関数の引数の扱いがよくわかりません。 たとえば、 sub test{ # $_[0] == "test"; # $_[1] == "test2"; } &test( "test", "test2"); となるとおもうのですが、 @test = ( "test", "test2"); &test( "test", @test); としたばあい、引数はどうなるのでしょうか? 色々と試してみたのですが、 &test( @test); としたばあいは、 @_ == @test; だということはわかったのですが・・。 (もし違っていたら指摘していただけるとありがたいです。
496 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 15:35:18 ] >>495 やって美奈代
497 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 17:04:22 ] perl -F',' -lane 'push @dat, [ @F, $_] ;}{ print $_->[-1] for sort {$a->[2] <=> $b->[2]} @dat; ' FILE sort -k3 -t, -n < FILE
498 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 18:04:30 ] require がうまくできません。 上記の質問を参考に、 test.cgi --- require './hoge.pl'; とかいて、 hoge.pl --- our $test = "hogee"; 1; とかいているのですが、 perl test.cgi すると、$testは読めていないようです。 ながに悪いでしょうか?
499 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 18:29:00 ] >>495 マニュアルを見ずに仕様を突き止めるゲームでも開催されてるの?
500 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 18:36:22 ] >>498 「$testは読めていないようです。」の「ようです」に隠された何か。
501 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 18:40:32 ] >>492 そうなのか。不治の病にかかってしまった。
502 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 21:09:26 ] myにすればいいんだよ
503 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 00:01:01 ] >>474 splitをスカラコンテクストで使ってはいけない。
504 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 08:59:12 ] $input = <>; というコードをwindows上で実行し入力待ちの状態でウィンドウ右上の×印を 押すと「すぐに終了」のダイアログが出てきてしまいます。 入力待ちの状態では$SIG{'QUIT'}をキャッチすることが出来ません。 Term::ReadLine等も試しましたが挙動は同じでした。 入力待ちの状態でも正常終了するようにすることは出来ないでしょうか。
505 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 18:33:05 ] Ctrl + C ??
506 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 00:06:19 ] >>504 自前でwindow開かないと無理と思われ。
507 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 15:27:14 ] 多次元配列があるのですが、2次元目のある要素を元に1次元目をソートさせることはできませんか?
508 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 15:50:42 ] >>507 出来るよ。
509 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 16:06:21 ] すみません。 簡単なサンプルでいいんでコードを書いて頂けませんか?
510 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 16:17:38 ] >>509 ググれば例などいくらでも出てくるんだが? perl -MData::Dumper -le 'print Dumper sort { $a->[1] <=> $b->[1] } ( [2,3],[3,2] ) ;' $VAR1 = [ 3, 2 ]; $VAR2 = [ 2, 3 ];
511 名前:デフォルトの名無しさん [2008/06/16(月) 08:14:00 ] Perlでファイルの中の指定した文字列(正規表現".*hoge$"等)にマッチする行を 削除したいのですが、どうすれば良いでしょうか?
512 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 09:38:40 ] >>511 perldoc.jp/docs/perl/5.10.0/perlfaq5.pod を、「ファイルのある行を削除する」で検索。
513 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 09:39:22 ] >>511 #!C:/perl/bin/perl open(IN,"example.log"); while(<IN>){ if($_ =~ /hoge/){ $line .= "\n"; } else{ $line .= "$_\n"; } } close(IN); open(OUT,">exmple.cgi"); print OUT $line; close(OUT); print"Content-type:text/html\n\n"; print "消去完了"; みたいな感じですか? Perlコーディング初心者質問スレ Part 57 pc11.2ch.net/test/read.cgi/php/1203935151/l50
514 名前:デフォルトの名無しさん [2008/06/16(月) 10:18:02 ] 111 222 333 444 555 666 というようなファイルがあったとして(数字は仮定です)3行目の行の 先頭にtabを2つ入れたい場合、どのようにすればいいのでしょうか。
515 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 10:24:45 ] くだすれ池
516 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 10:28:50 ] >>514 …… 行数を数えながら一行ずつ読み込むループにして if 3行目 then 先頭にtabを2つ入れる 読み込んだ行を出力する という中身を回せばいいよ。
517 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 10:33:18 ] >>514 質問先は「くだすれPerl(超初心者用)2」 pc11.2ch.net/test/read.cgi/php/1204488452/l50 が良いらしいです。
518 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 10:50:21 ] >>511 >>513 すいません、間違ってました。 pc11.2ch.net/test/read.cgi/tech/1208674881/511
519 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 15:50:09 ] 変数の中の文字列の頭のスペースを取り除きたいのですが、 どのようなほうほうがありますか?
520 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 15:55:16 ] >519 正規表現使う典型ケースです
521 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 16:00:36 ] >>519 perldoc.jp/docs/perl/5.10.0/perlfaq4.pod を、「文字列の先頭や末尾にある空白を剥ぎ取るには?」で検索。
522 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 16:01:41 ] >>519 pc11.2ch.net/test/read.cgi/php/1204488452/292
523 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 16:08:16 ] >>519 >>522 連投すいません。修正です。 pc11.2ch.net/test/read.cgi/php/1204488452/293 初歩質問はこちらが良いらしいです。 pc11.2ch.net/test/read.cgi/php/1204488452/l50
524 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 01:11:06 ] 質問です。 HTML数値エンティティを文字に変換する際にはどうすればよいでしょうか。 下記の通りに実行したのですがうまくいきません (-ÿしか対応していない?) #!/usr/bin/perl use HTML::Entities::Numbered; $str='あいうえお'; print hex2name($str); #「あいうえお」を期待するが変換前と同じ$strが出力される
525 名前:524 mailto:sage [2008/06/18(水) 01:12:01 ] $str='&#x3042;&#x3044;&#x3046;&#x3048;&#x304A;'; ですorz
526 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 04:57:49 ] >>524 > print hex2name($str); #「あいうえお」を期待するが変換前と同じ$strが出力される いや、期待するなよ。
527 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 06:29:13 ] そのあたりに踏み入ったことはないのだが、マニュアルを見る限り HTML::Entities::decode を使うのではないか?
528 名前:デフォルトの名無しさん [2008/06/18(水) 12:04:39 ] すんごい初歩的な質問で申し訳ないのですが、 Perlやってる友達がお前こんなのもできないだろと自慢してくるので、明日までにこれをやらないとまたバカにされるのですが、 プログラム自体やったことがなく意味不明すぎてよくわかりません。。誰かもしよかったら教えてください。 キーボードから整数値$aの値を入力してEnterを押し、 続けて$bの値を入力してEnterを押すと、 $aを 3 倍した値と、$bを 8 倍した値の和 を計算して$cに代入し, $cの値を画面に出力するプログラム 結果は print "$cn"; の形で出力する この結果の出力以外の画面出力はしないこと.
529 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 12:10:09 ] >>528 その友達に教えてもらいなさい
530 名前:デフォルトの名無しさん [2008/06/18(水) 12:14:12 ] >529 というか、その友達から出された問題なんです。
531 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 12:23:42 ] 宿題だろ・・・
532 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 12:37:23 ] それが出来たところで他の事聞かれてあぼんだな
533 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 12:40:17 ] 「1/10の確率」 を表現するのに、これ↓はありなのか? return 0 if rand(1000) > 100;
534 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 12:51:55 ] あり得ないという根拠は?
535 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 12:52:56 ] >>533 randが正規乱数だと仮定するならありだろ。
536 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 13:05:29 ] 正規乱数だと仮定するならなしだろ randが一様乱数を吐くのならありかもしれんが
537 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 13:50:36 ] >>528 お前こんなのもできないのか
538 名前:デフォルトの名無しさん [2008/06/18(水) 14:25:04 ] 綺麗な記述を勉強したいです。 どっかで配布されてる非常に綺麗で整理された記述を教えてください。 あまりにいっぱい配布されすぎててチェックできません。
539 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 14:39:00 ] >>538 man perlstyle つーか、好きにしろ
540 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 16:10:12 ] >>538 perl medicとかは偏ってはいるけど ポリシーとしてはまあ参考になるかもしれん 買うまでの事は無い本なので図書館で探せ
541 名前:524 mailto:sage [2008/06/18(水) 21:54:54 ] >>527 HTML::Entities::decode で無事に出来ました 今後はマニュアルをしっかり読みますm(_ _)m ありがとうございました
542 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:32:54 ] >>538 ここはPerlのスレですよ?
543 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:37:24 ] >538 Plagger読んどけ
544 名前:デフォルトの名無しさん [2008/06/18(水) 23:17:04 ] こっそり書いてみる。意味は教えないよ perl -e 'print <STDIN>*3+<STDIN>*8,"\n"'
545 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:37:40 ] $cに代入してないじゃん
546 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:54:10 ] >>528 544とは別人だけど。 perl -e '$c=<>*8+<>*3;print"$c\n";' また、次の問題を出されるだろうから、がんばって。