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/
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`; }
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