- 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/
- 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";' また、次の問題を出されるだろうから、がんばって。
|

|