1 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 03:03:00 ] "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 ● 2009/08/07 現在の最新版: 5.10.0 ▼ 前スレ Perlについての質問箱 40箱目 pc12.2ch.net/test/read.cgi/tech/1243631674/ リンク集は >>2-3 Perl 日本語処理の基礎の基礎 >>4 過去スレは >>5-6 あたり
641 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 09:25:39 ] s/\t/ /g;
642 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 09:57:50 ] >>641 それじゃダメだろ
643 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 11:16:51 ] >>640 Perlで「各行の先頭から続く複数の空白を、同じ数の に変換して出力する」コードを書けば良いじゃない
644 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 11:18:24 ] あれ?表示が変だな あんど、えぬ、びー、えす、ぴー、せみころんね
645 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 11:29:21 ]
646 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 11:41:45 ] すべてのスペースを に変換すっと、今度は文字数制限にひっかかっかるやもやがな s/(?<=^|\G)[ \t]/ /mgx
647 名前:デフォルトの名無しさん [2009/09/27(日) 11:49:50 ] どうでもいい議論が続いてるな。エディタで置換すればいいだろ >>641 でいいと思うけど。 いつも半角スペース2個を全角1個にしてるからvimなら%s/ / /gcで置換できる
648 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 12:19:15 ] 641じゃデコボコになるだろ・・
649 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 12:28:43 ] >>641 今どきハードタブ使ってるひとはあまりいないんじゃない?
650 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 13:04:24 ] Damian Conway先生に怒られるしね
651 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 13:11:40 ] >>649 あなた、井の中の蛙さん?
652 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 13:49:34 ] そうだけど何か? ゜_゜
653 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 16:07:09 ] かわいそうに
654 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 17:07:39 ] >>653 なんか、ダッシュ村のため池の蛙なんだぜ。
655 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 19:30:25 ] 来月にリャマ本の日本語第5版くるんだね 中身結構かわってるかなあ
656 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 22:27:04 ] >>646 コード載せた場合、先に引っかかるのは 大概行数制限のほうだと思う
657 名前:デフォルトの名無しさん [2009/09/28(月) 21:50:38 ] さがってる
658 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 23:07:51 ] 下がってても落ちないよ
659 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 00:14:06 ] s!>(back|return)<!>戻る<!si; これやるとエラーダイアログが出るんです。 問題が発生したため、Perl Command Line Interpreter を終了します。 ご不便を おかけして申し訳ありません。 この問題を Microsoft に報告してください。 (以下省略) [エラーを報告する(S)] [送信しない(D)] いろいろ試したらこのような結果でした。 o Active Perl 5.8.8 o Active Perl 5.8.9 o Active Perl 5.10.0 x Active Perl 5.10.1 こんなふうに ( | ) を使わなければOKなんですが、ちょっと困ります。 s!>back<!>戻る<!si; s!>return<!>戻る<!si; perl 5.10.1 はウンコですか?
660 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 12:42:56 ] >>659 デリミタは#とか括弧類にしてくれ。 あとPerlのせいにすんな。 FreeBSDやLinuxの5.10.1ではそのコードは普通に動くから、 5.10.1がウンコなんじゃなくてActivePerlが正規表現モジュールか何かの Winへの移植に失敗してるんだろ。 5.10.1リリース後一ヶ月以内のスピード移植版に文句言うとか何様かと。 修正リリースが出るだろうからバグ報告でもして座って待ってろ。
661 名前:デフォルトの名無しさん [2009/09/30(水) 13:48:36 ] =~で全角数字だけの文字列だったらを取り除くにはどうすれば良いのでしょうか? ttp://ash.jp/code/unitbl21.htmを参考にしようと思ったのですが、どう書けばよいか分かりません。 お願いします。
662 名前:661 mailto:sage [2009/09/30(水) 13:50:08 ] 使用している文字コードはutf-8です。
663 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 13:58:29 ] s/[0123456789]//g みたいな?
664 名前:デフォルトの名無しさん [2009/09/30(水) 15:40:47 ] >>661 s/^[0-9]+$//
665 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 17:38:18 ] >>659 んー、WindowsXPで普通に動く。
666 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 19:58:03 ] XSを勉強中です。 長さを指定して文字列を作成し、あとから文字を詰め込みたいのですが、やり方がわかりません。 自分で試したのはこんなコードです。 SV * hoge() CODE: SV *string = newSV(5); char *s = SvPVX(string); //int len; //char *s = SvPV_force(string, len); int i; for (i = 0; i < 5; i++) { s[i] = 'x'; } s[i] = '¥0'; RETVAL = string; OUTPUT: RETVAL これを呼び出してみると、長さが0の文字列が返されるだけでした。 おしえてえらいひと。
667 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 19:59:37 ] 失敗した。インデントを全角空白にしました。 SV * hoge() CODE: SV *string = newSV(5); char *s = SvPVX(string); //int len; //char *s = SvPV_force(string, len); int i; for (i = 0; i < 5; i++) { s[i] = 'x'; } s[i] = '¥0'; RETVAL = string; OUTPUT: RETVAL よろしくお願いします。
668 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 20:03:39 ] なんかC++みたいだな
669 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 07:53:07 ] >>668 XSが何か分かってないだろ。 ちゃんとPerlの質問だ。 質問にも答えたいが朝食を作らないと。
670 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 09:24:05 ] >>667 SvPOK_onlyかSvPOK_only_UTF8が必要なんじゃね?
671 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 09:26:25 ] >>666 あーちなみに文字列の突っ込み方は合ってるし、 そっち方面の質問がメインならC/C++のスレに行きな。ちなみに勘だが、 SV * hoge() ここがおかしいんじゃないか?SV *返すことってできたっけ? インクルードファイルやMODULE行がないのは端折ってるだけだよな?
672 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 09:32:21 ] 5バイトしか取ってないのにNULLを6バイト目に入れてるけどいいの?
673 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 09:32:52 ] あ、いいのか。
674 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 09:33:11 ] >>672 6バイト取ってるでしょ。マニュアル嫁
675 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 09:34:07 ] 先越されるとは思わんかった。>>673 は>>671 へだ。SV *自体問題ない。
676 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 09:46:21 ] newSVpvと文字列コピーするところ以外は やりたいことは一緒なんだから比べてみ。
677 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 10:10:11 ] SVの実体が何か明示する前に文字列と決め付けてるからまずいんじゃないか。 いきなりnewSVみたいな低レベルの関数使うと怪我をするよ。 SV *string = newSVpv(" ", 5);としたらどうなる?
678 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 12:52:54 ] スペースは5個な。まあ6バイトallocしてくれてるはずだから、 初期化するまで値が不定になるだけで実害はないと思うが
679 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 23:23:46 ] >>668 たしかにコードはC++チックですね。コメントが // だったり、変数宣言が先頭になかったり。 >>669 668さんはXSが何かわかったうえでの発言だと思いますよ? >>670 RETVALUE = string; の行の前に SvPOK_only_UTF8(string); を追加してみましたけど、状況は変わらずでした。 >>677 newSVpvn(" ", 5) ですよね。それだとうまくいくんですが、これだとコピー元の文字列を あらかじめ用意してないといけないので、今回の目的には適合しませんでした。 で、いろいろ調べて、New() と Safefree() と newSVpvn() を使うことにしました。 でもこれだと New() でバッファを用意して、文字列を埋めて、newSVpvn() でコピーして、・・・と しなきゃいけないから、newSVpvn() でコピーするのが無駄かなあとは思うんですけど、 これしかうまくいかないので、そうします。 アドバイスいただいたみなさん、ありがとうございました。
680 名前:uy50% ◆e6.oHu1j.o mailto:sage [2009/10/02(金) 23:15:29 ] ラリーウォールさんの書いたperlのソースってどこかで見れませんか? どんなものでもいいです
681 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 23:26:04 ] www.wall.org/~larry/
682 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 01:34:21 ] Mail to larry@wall.org このメアドがまたすげー
683 名前:uy50% ◆e6.oHu1j.o mailto:sage [2009/10/03(土) 02:33:27 ] >>681 見つからないんですが、どこのページに?
684 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 04:31:47 ] mapのような書き方をするメソッドを実装したいんですが、 もしかして第一引数に勝手にインスタンスが入るのでsubが省略できなかったりしますか?
685 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 04:32:13 ] あ?
686 名前:デフォルトの名無しさん [2009/10/03(土) 05:06:10 ] >>679 どうせnewSVpvn使うならこれでどうだ?。ナルストリングで文句があるならもう知らん。 newSVpvは初期化文字列が空でもちゃんと6バイト確保してくれるところがミソだ。 普通ならまず(char *)sを作ってnewSVpv(s, 5)すりゃ何の問題もないんだが、それだと 困るんだよな? #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "ppport.h" MODULE = Foo PACKAGE = Foo SV * hoge() CODE: int i = 0; char c = (char)0; SV *string = newSVpv((char *)&c, 5); char *s = SvPVX(string); for (i = 0; i < 5; i++) s[i] = 'x'; s[i] = (char)0; RETVAL = string; OUTPUT: RETVAL
687 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 05:13:25 ] >>686 あなたには答えてほしくありません。
688 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 05:20:57 ] >>684 日本語がよくわからんが....。map { some_code } @foo;のようなことがしたいなら、 my_map(&@){ ... } : my@bar = my_map { some_code } @foo; で出来る。 map BLOCK LIST map EXPR, LIST の2つの書式を満たす方法は知らん。
689 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 05:23:18 ] >>687 回答者を選ぶなら質問するな。 そもそも俺が何番の人か分かってるのかなこの人。勘違いだと思うんだが。 何番かアンカー晒してみ。
690 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 05:24:10 ] あー>>687 が質問者じゃなくて単なる煽りの可能性もあるな。だったらすまん>>687
691 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 05:47:31 ] 普通に考えてそうだろ.
692 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 07:03:49 ] CODE: int i = 0; SV *string = newSV(0); char *s = (char *)malloc(6); for (i = 0; i < 5; i++) s[i] = 'x'; s[i] = (char)0; sv_setpv(string, s); free(s); RETVAL = string;
693 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 13:40:30 ] >>688 すみません、サブルーチンの場合にそう書けるのは知ってます クラスをオブジェクトとして作ったときに、$hoge->map({ $_ =~ /hoge/} @huga) というmapメソッドを書く方法はないのか知りたかったのです しかしこのとき実装側では sub map($&@){… としなければいけないため、呼び出し側のsubが省略できないじゃないですか なので、これをなんとかできないものかと思いまして…
694 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 14:08:52 ] メソッドの呼び出しはプロトタイプ効かないから無理くさくね?
695 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 14:13:13 ] やはりそうですか… ありがとうございました
696 名前:デフォルトの名無しさん [2009/10/03(土) 14:26:36 ] ttp://deepneko.dyndns.org/kokotech/2009/06/mecabwikipedia.html このサイトに書いてあるようにしたのですが、rubyで書かれています。これ(下のプログラム)をperlで書き換えたいのですが、分かる方が居たらお願いします。 #!/usr/bin/ruby open($*[0]).each do |line| title = line.strip next if title =~ /^\./ next if title =~ /[0-9]{4}/ next if title =~ /^[-.0-9]+$/ score = [-36000.0 ,-400 *(title.size**1.5)].max.to_i print "#{title},0,0,#{score},名詞,一般,*,*,*,*,#{title},*,*,wikipedia_keyword,\n" if title.size > 9 end
697 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 15:17:11 ] >>696 これなら初心者の自分でも書き直せるYO エレガントな回答は上級者にまかすけど。 #!/usr/bin/perl use List::Util qw(max); open my $fh, $ARGV[0] or die $!; while ( my $line = <$fh> ) { my $title = $line; $title =~ s/^\s*(.*?)\s*$/$1/; next if $title =~ /^\./; next if $title =~ /[0-9]{4}/; next if $title =~ /^[-.0-9]+$/; my $score = int max(-36000.0 ,-400 *((length $title)**1.5)); print "$title,0,0,$score,名詞,一般,*,*,*,*,$title,*,*,wikipedia_keyword,\n" if length $title > 9; } close $fh;
698 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 15:49:41 ] >>693 map $hoge (....)とは書けるんだがな。 メソッド呼び出しはリストしか受けないから無理でしょ。
699 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 22:35:23 ] WWW::SourceforgeJP ver.0.0.1 リリース acapulco.dyndns.org/blog/2009/10/03/wwwsourceforgejp
700 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 23:25:10 ] 正規表現でマッチした文字列そのものを取得したいです 例えば "hoge huga" =~ /(\s|\d)/ という正規表現があったとき、 ' 'ではなく'\s'を取得したいです 可能でしょうか
701 名前: ◆TWARamEjuA mailto:sage [2009/10/03(土) 23:30:31 BE:1307243-BRZ(10101)] 可能でしょうねぇ。。。
702 名前:デフォルトの名無しさん [2009/10/03(土) 23:36:15 ] 700じゃないけど、どうすればできるか知りたい。 役に立つ気はしないけど。
703 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 23:46:01 ] (?{})とか(??{})を駆使すればいけるかもしれないけど デフォでそんなインターフェイスは用意されてないっしょ
704 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 00:03:31 ] >>703 ??{}ですか 参考になりました、調べてみますね ありがとうございました
705 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 00:03:35 ] おれも知りたい。
706 名前:700 mailto:sage [2009/10/04(日) 01:55:44 ] こういう感じで元の文字列を取ることができました ありがとうございます perl -e ' use re "eval"; $hoge = q/ho..(?{$str="ho.."})|hu..(?{$str="hu.."})/; "huga" =~ /$hoge/; print "1:$str\n"; "hoge" =~ /$hoge/; print "2:$str\n"; ' 1:hu.. 2:ho.. やりたかったのは %hash = ( '\s+' => 'space', '\d+' => 'number', '\w+' => 'word', ); という感じのハッシュのキーを合成して、一番最初にマッチしたものの名前を返す関数の作成だったので、 これでいけそうです
707 名前:700 mailto:sage [2009/10/04(日) 03:45:43 ] なんか変にハマったのでもう一度質問させてください。。。 下のような関数を作りました sub match($@){ use strict; use re "eval"; my $str = shift; my @member = @_; my $regex = join("|", map{ "$_(?{\$ret = q{$_}})"} @member); my $ret; $str =~ /$regex/; return $ret; } 以下の呼び出しを行うと、 print match("hoge 123", qw(\d \w \s)), $/; #=> \w print match(" 123hoge", qw(\d \w \s)), $/; #=> print match("123 hoge", qw(\d \w \s)), $/; #=> となり、思った結果を返してくれませんでした ですが、match関数に渡す配列の順番を変えたところ、 print match("hoge 123", qw(\d \w \s)), $/; #=> \w print match(" 123hoge", qw(\w \d \s)), $/; #=> \s print match("123 hoge", qw(\d \w \s)), $/; #=> \d と、期待通りの結果を返してくれました これは一回通った正規表現に対してはサブパターンは呼び出されないということなんでしょうか。。。
708 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 04:32:58 ] レキサ作ってんのか。。。
709 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 10:06:58 ] >>707 >>706 のレス見たときに、関数化してハマるんだろうなーと思ったらマジでハマっててワロタ my $regex → local our $regex my $ret → local our $ret これでどうかな? 昔、そういうプロギラムを書いていたときには、こいつで回避出来たよ 多分、正規表現リテラルは初回の正規表現コンパイル時に、クロージャのようにローカル環境をキャプチャするけど 再度、同じ正規表現を与えてリテラルのパスを通ってもキャプチャが発生しない なので、正規表現の中ではmy変数は使わず、グローバル変数を使えばOKと
710 名前:700 mailto:sage [2009/10/04(日) 14:05:04 ] >>709 おお!いけました! ありがとうございます use strictすることでこんな罠が生まれていたとは思いもしませんでした 正規周りは魔物が住んでますね…
711 名前:デフォルトの名無しさん [2009/10/04(日) 16:12:52 ] utf8で書かれた文章をeuc-jpで新しく保存しようとすると開けなくなります 何が原因でしょうか。また解決するにはどうすれば良いでしょうか?
712 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 17:21:40 ] 777
713 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 17:25:40 ] >>711 use utf8とかその辺りが原因の気が。
714 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 20:45:37 ] >>713 csvファイルなのですがutf8のtext.csvを nkf -e test.csv > test2.csv で変換すると、開けなくなります。
715 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 21:42:37 ] おいおい、言ってることがめちゃくちゃだな。 何をしようとして、何をしたら、どうなって欲しいのに、どうなったか、具体的にキチンと書いてみ。
716 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 22:00:58 ] Web::Scraperでデータの抽出しているのですが XpathをFirebugで取得してWeb::Scraperに処理させると、Xpathがずれてしまいます。 Firefoxのレンダリングでタグが追加変更されているのが原因みたいです。 PerlからFirefoxでレンダリング済みのタグを取得することはできないのでしょうか? よろしくお願いします。
717 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 00:34:57 ] ttable を除去すればいけるけど… そういうことじゃなくて?
718 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 00:42:14 ] >>717 tbody以外にもページによって tr[2]をtr[3]に変えたりとか /table/tbody/tr/tdが追加されてたりとか center/div/div/fontが追加されたりとか 単純なパターンで取れない感じがするので、いっそのことFirefoxでレンダリング済みのソースを perlから取れないかな?と思ったのです。
719 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 16:57:25 ] 卒業研究でperlを使うことになったんですが、 linux環境でMeCab.pmのperlモジュールを使用するにはどうしたらいいのでしょうか? linuxはvine3.2です。
720 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:33:11 ] フロストバイトエンジンがPC版でどのくらい綺麗になるのか見てみたい
721 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:35:36 ] >>720 ごめん、ごばった
722 名前: ◆TWARamEjuA mailto:sage [2009/10/05(月) 18:36:03 BE:1742382-BRZ(10101)] >>719 ググればすぐに出てくるんですけれども。。。 ttp://www.alwaysfine.jp/2008/03/spamassassin_32wo.html いわゆる犬学生なんでしょうね。。。
723 名前:デフォルトの名無しさん [2009/10/06(火) 10:51:28 ] . 1. HTML で検索した結果 1〜10件目 / 約5,040,000,000件 . 2. PHP で検索した結果 1〜10件目 / 約2,970,000,000件 . 3. Java...... で検索した結果 1〜10件目 / 約 835,000,000件 . 4. Forth. で検索した結果 1〜10件目 / 約 323,000,000件 . 5. Ruby.. で検索した結果 1〜10件目 / 約 275,000,000件 . 6. perl..... で検索した結果 1〜10件目 / 約 245,000,000件 . 7. Python... で検索した結果 1〜10件目 / 約 204,000,000件 . 8. pascal... で検索した結果 1〜10件目 / 約 170,000,000件 . 9. Delphi で検索した結果 1〜10件目 / 約 127,000,000件 10. VisualBasic...で検索した結果 1〜10件目 / 約 121,000,000件 11. lisp... で検索した結果 1〜10件目 / 約. 26,700,000件 12. fortran で検索した結果 1〜10件目 / 約. 21,300,000件 13. COBOL で検索した結果 1〜10件目 / 約. 18,500,000件 14. HSP で検索した結果 1〜10件目 / 約. 12,300,000件 15. FreeBasic.. で検索した結果 1〜10件目 / 約 6,320,000件 16. Tcl/Tk. で検索した結果 1〜10件目 / 約 4,940,000件 17. QBasic で検索した結果 1〜10件目 / 約 4,190,000件 18. VisualC.... で検索した結果 1〜10件目 / 約 1,360,000件 19. DarkBASIC. で検索した結果 1〜10件目 / 約 1,320,000件 20. BasicStudio で検索した結果 1〜10件目 / 約 304,000件 21. N88basic. で検索した結果 1〜10件目 / 約 215,000件 22. f-basic で検索した結果 1〜10件目 / 約 109,000件 23. ActiveBasic で検索した結果 1〜10件目 / 約. 89,800件 24. 99BASIC.... で検索した結果 1〜10件目 / 約. 11,500件 3Dprogramming で検索した結果 1〜10件目 / 約794,000件 2Dprogramming で検索した結果 1〜10件目 / 約. 57,400件 intel で検索した結果 1〜10件目 / 約729,000,000件 amd で検索した結果 1〜10件目 / 約355,000,000件
724 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 11:01:41 ] >>715 保存でeuc-jp指定とnkfで-eとは違うのですか? 無知ですみません。
725 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 11:37:51 ] >>724 出力はeucって指定してるけど、入力の指定は? もとのファイルがUTF8だということをnkfに教えてやらなければダメなのかもね。 nkfの説明書をよく読んでみてよ。
726 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 12:06:40 ] ある2種類の要素数が同じ配列データがあって 片方は末尾までデータが入っているのですが もう片方は末尾に半角スペース1個だけが入っています この配列をファイルに書き出す際、前者は全て書き出し、後者は最後の配列のみ書き出さないようにしたいのですが、うまくいきません ループ中に配列aの最後n番目が半角スペースなら書き出さない場合、 if($a[$n] eq " "){ last; } では駄目なのでしょうか 携帯からなので読みにくいですがよろしくお願いします
727 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 12:40:35 ] デバッグという概念が失われて久しい……
728 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 13:18:59 ] 改行が入ってんだろ
729 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 14:04:23 ] >>726 デバッグしろ。 if($a[$n] eq " ") がヒットしているか調べろ。$a[$n]の中身を調べろ。
730 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 16:09:48 ] perl のデバッガって何がおすすめですか。
731 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 16:17:19 ] Data::Dumperでデータの中身見てDevel::Peekでutf8フラグ見るくらいしかやったことないな
732 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 18:55:01 ] ifの前ぐらいに print "!!! HELLO !!! $n='$a[$n]'\n"; って書いておくといいよ。
733 名前:デフォルトの名無しさん [2009/10/07(水) 01:31:47 ] >>726 if($a[-1] eq " "){ output @a[0..$#a-1]; }else{ output @a; }
734 名前:デフォルトの名無しさん [2009/10/07(水) 01:35:46 ] >>733 pop @a if $a[-1] eq " "; output @a;
735 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 02:18:49 ] 2行の文字列があって、 1行目の文字列を2行目の文字列の任意の場所に挿入 その後1行目を改行ごと削除 という作業はどう書けばいいでしょうか?
736 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 03:34:48 ] >>735 splitで切って2つの文字列に分けて、substrで1行目を2行目に入れればいい。
737 名前:デフォルトの名無しさん [2009/10/07(水) 07:10:08 ] >>735 日本語が妖しいので確認 入力> 2行一組の文字列 出力> それぞれの組を1行にまとめた文字列 処理> 改行を削除した1行目を2行目の任意の場所に挿入
738 名前:デフォルトの名無しさん [2009/10/07(水) 07:46:29 ] >>736 chomp(@d=<>); for ($i=0;$i<@d-1;$i+=2){ $len=length $d[$i+1]; substr($d[$i+1],rand($len),0)=$d[$i]; print $d[$i+1]."\n"; } 代入型のsubstrって戻り値は代入後の文字列だっけ? ググっても見つからなかった。
739 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 10:47:16 ] > ググっても見つからなかった。 最近の Perl を良く知らないのですが perldoc などのオフィシャルなドキュメントは存在しないのでしょうか?
740 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 11:07:25 ] >>738 どっちかというとperlop(1)のAssignment Operatorsの方をよく読んだ方が いいんじゃない? C と違って、スカラ代入演算子は有効な左辺値を作り出します。代入を修正することは、代入を行なってから、その代入された変数を修正するのと同じことになります。これは、以下のように何かのコピーを変更したいときに便利です: ($tmp = $global) =~ tr [A-Z] [a-z]; (perldoc.jp/docs/perl/5.10.0/perlop.pod ) てことなので、 $tmp = "ABCDEF"; $global = "XYZ"; (substr($tmp, 2, 2) = $global) =~ tr [A-Z] [a-z]; とか試してみれば理解できると思います。
741 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 11:12:40 ] >>739 あるよ perldoc -f substr で調べられる
742 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 13:06:10 ] 正規表現で、abもしくはxyもしくは12を含むは、 /ab|xy|12/ と書きますが、ab、xy、12の全て含むはどう書くのでしょうか?
743 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 13:30:17 ] >>742 ab,xy,12をすべての順列で並べて ab.*xy.*12|ab.*12.*xy|... と書けばいい。 無理に正規表現だけでやらずに /ab/ && /xy/ && /12/ とした方が楽だと思うけどね。
744 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 13:43:19 ] >>743 d
745 名前:デフォルトの名無しさん mailto:sega [2009/10/07(水) 14:04:22 ] ファイルテスト演算子 -T って、 どうやってテキストファイルだと見破ってるの? その原理とか注意事項ってある?
746 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 14:19:45 ] >>745 とりあえずperlfunc読め。 ファイルテスト -T と -B の動作原理は、次のようになっています。ファイルの最初の数ブロックを調べて、 変わった制御コードや上位ビットがセットされているような、通常のテキストには現れない文字を探します。 そのような文字が、たくさん (>30%) 見つかるようであれば、そのファイルは -B ファイルであると判断され ます; さもなければ -T ファイルとなります。最初のブロックにヌル文字が含まれるファイルも、バイナリ ファイルとみなされます。 -T や -B をファイルハンドルに対して用いると、最初のブロックを調べる代わり に、IO バッファを調べます。調べたファイルの中身が何もないときや、ファイルハンドルを調べたときに EOF に達していたときには、-T も -B も「真」を返します。 「通常のテキストには現れない文字ってなんだよ!!」とか言いたくなったら、ソース読むしかないかな。 (pp_sys.cのpp_fttext) でも結局30%だからあんまりアテにすると痛い目を見そうなんで俺は使わないね〜。
747 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 14:31:29 ] マニュアル提示サービスはここですか?
748 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 14:36:29 ] ちがいます
749 名前:デフォルトの名無しさん [2009/10/07(水) 15:16:53 ] >>747 そうです。 ここは、疑問を書けば、マニュアルの該当部分を張ってくれるスレです。
750 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 15:18:04 ] ここは質問スレだよ(´・ω・`)
751 名前:デフォルトの名無しさん [2009/10/07(水) 15:22:25 ] そうです 質問スレです…
752 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 15:35:33 ] そもそも、マニュアルに書いてあることが質問される時点で異常な状態だということを見失うなかれ。
753 名前:デフォルトの名無しさん [2009/10/07(水) 15:40:44 ] >>739 オフィシャルなドキュメントには記載が見つからなかったのです
754 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 17:17:48 ] >>752 googleで-Tを検索したら何も出てこなかったんだよきっと
755 名前:デフォルトの名無しさん [2009/10/07(水) 22:03:27 ] >>752 じゃあ、substrに代入したときの返り値を調べてみてよ。
756 名前:741 [2009/10/07(水) 23:02:37 ] >>755 あぁ、ごめん。741だけど > 代入型のsubstr この部分に全く目がいってなかったわ my $result = (substr($d[$i+1],rand($len),0)=$d[$i]); この$resultがどうなるかって意味だよね?それなら載ってないかも。俺が普段この書き方しないから空目した 自分で>>735 を書くとしたら下のような感じかなぁ my $str =<< "STR"; abcdef\n123456\nghijklmn\n78910223 STR warn $str; my @res; my @lines = split /\n/, $str; while (@lines) { my $line1 = shift @lines; my $line2 = shift @lines; print "num?: "; my $num = <STDIN>; my $length = length $line1; my $post = substr $line2, $num, $length, $line1; push @res, $line2 . $post; } print join "\n", @res, "\n";
757 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 04:05:10 ] >>755 なにがどう「じゃあ」なんだよwww
758 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 04:53:55 ] $ perldoc -f substr No documentation found for "perlfunc". ^^v
759 名前:デフォルトの名無しさん [2009/10/08(木) 06:39:44 ] >>756 マニュアルに記載のない使い方はしないほうがよいのか 代入文だからlvalueが保持されると考えるのがよいのかが知りたかった。 多分、後者だね。 コードについては、ヒアドキュメント使うと柔軟性に難があるから、下記のがいいかも。 @lines=<DATA>; (プログラム末尾) __DATA__ 入力データ 入力データ : あと、入力が偶数行でなかったときはこけるね。 入力の妥当性を調べるのはプログラムの仕事だよ。 それから、任意ってそういうことだったのかな? もとの要求が謎の多いものだから、こちらは乱数にしたのだけど。
760 名前:デフォルトの名無しさん [2009/10/08(木) 06:46:42 ] >>756 もう一度プログラム見た。 これ、正しくない。 挿入位置+1行目の長さが2行目の長さより短いと 順がおかしくなる。
761 名前:デフォルトの名無しさん [2009/10/08(木) 09:04:20 ] >>760 おぉ。ホントだ。台風で午前中休みにして暇になったから直した。 無理やりsubstr使う必要なかったな my @lines = split /\n/, $str; die unless $#lines % 2; my @res; while (@lines) { my $line1 = shift @lines; my $line2 = shift @lines; print "num?: "; my $num = <STDIN>; my $post = substr $line2, $num; $line2 =~ s/($post)$/$line1$1/xms; push @res, $line2; }
762 名前:デフォルトの名無しさん [2009/10/08(木) 11:53:43 ] ハッシュ%hogeで $hoge{$a}{$b}{$c}{$d}...{$n} を定義した順番でkeyを keysで取り出したい 普通モジュールの Tie:IxHash を使うらしいけど それだと最初の$aのkeyだけ定義順番でとりだせて %{$hoge{$a}}以降の深い構造でのkeyが 順番どうりならず、ばらばらにkeysで取り出されるようになる どうにかして定義した順番でどの段階でも 取り出せるようにしたいんだけど おしえて下さい。
763 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 12:04:59 ] >>762 キーを配列にとっとけ。 $hoge{$fuga}{$foobar} = 'bar'; push(@hoge, [$a, $foobar]);
764 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 12:07:39 ] $hash{a}{b}に値を入れる前に tie %{$hash{a}}, 'Tie::IxHash'; しておけば、 keys %{$hash{a}}は順番に取り出せるよ。
765 名前:デフォルトの名無しさん [2009/10/08(木) 15:42:29 ] 一度で深いところの値を定義することになるので (このように $hoge{$a}{$b}{$c}{$d}...{$n}=1) >>764 はつかえない あと同じkeyが何回もでてくる可能性があるので>>763 もつかえない (このように for $a (同じのあり) for $b (同じのあり) $hoge{$a}{$b}{$c}{$d}...{$n}++ ) あとでkeyをとりだすとき何回も同じのがでてきてしまう >>763 いい方法ないでしょうか
766 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 15:45:51 ] >>765 配列だから同じキーが何回出てこようとちゃんと 保存されていて問題ないはずだが?
767 名前:765 [2009/10/08(木) 15:46:38 ] あと tie すると前保持していた値がすべて真っ白になってしまうので 繰り返しのなかに>>764 は いれられない状態。 一日なやんでもいい方法が思いつかない
768 名前:デフォルトの名無しさん [2009/10/08(木) 15:52:52 ] a b c d a b c d e f a g a という順番でkeyがでてくるとする とりだすときは a b c d e f g でとりだしたいんだけど できる?>>766
769 名前:デフォルトの名無しさん [2009/10/08(木) 15:57:32 ] >>762 やり方が悪いので、データ構造を見直すべし。
770 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 15:59:54 ] >>768 そんなのすでに取り出したかハッシュで管理してとばせばいいだけだろ。
771 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 16:10:42 ] >>768 それこそハッシュ使って同じキーが出てきたらスキップするようにすればいい。 んで$hoge->{$foo}の階層だけとりだしたいなら、 whlile(@hoge){ next unless $_->[$foo]; my @keys = @$_; } で取り出せるだろ。あ、あと>>763 は間違いがあった。 間違い $hoge{$fuga}{$foobar} = 'bar'; push(@hoge, [$a, $foobar]); 正しい $hoge{$fuga}{$foobar} = 'bar'; push(@hoge, [$fuga, $foobar]);
772 名前:デフォルトの名無しさん [2009/10/08(木) 17:35:28 ] もしかしてこういうのでいいってオチか? print sort keys %hash; もしくは print map $hash{$_}, sort keys %hash;
773 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 18:44:55 ] よくわからんが、各層のキーをjoinしたものをハッシュキーにして Tie::IxHashを使えばいいんじゃないのか。
774 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 21:00:34 ] Perlで/etc/shadowに使うSHA512化されたパスワードを作ろうとしているのですが /etc/shadowとsaltとpasswordを同じにしても出てくるハッシュが一致しません。 もし他によい方法があれば教えて下さい・・・ #!/usr/bin/perl use strict; use Digest::SHA qw(hmac_sha512_base64); my $sha = hmac_sha512_base64("password","salt"); print "$sha\n";
775 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 22:25:23 ] Webリソースのバイト数を取得するモジュールって何かありますか?
776 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:12:20 ] >>775 Webリソースって具体的に何だ?
777 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:20:33 ] >776 タイミングが悪くて非常に申し訳ない。 自己解決しました^^; ダウンロード対象のつもりでした。html,zip,etc…
778 名前:デフォルトの名無しさん [2009/10/08(木) 23:21:56 ] perlってsocks串刺せますか?
779 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:27:55 ] uaでいいんじゃないのか?
780 名前:デフォルトの名無しさん [2009/10/08(木) 23:28:35 ] ua… LWP?とかいうのと関係ありますか?
781 名前:デフォルトの名無しさん [2009/10/09(金) 05:57:46 ] >>774 目的はクラッキング? フツウの人はシャドウなんていじらないもんな。
782 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 07:14:21 ] Pealのデバッガで変数を強制で変えるコマンドってある? 初心者な質問ですまん
783 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 07:45:58 ] perlな
784 名前:デフォルトの名無しさん [2009/10/09(金) 08:52:12 ] >>782 普通に代入じゃだめなのん?
785 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 09:14:52 ] >>774 そういうシステムならcryptもsha512対応してると思うので そっち使えばいいと思う。同じライブラリ呼ぶので確実な 筈だよ。 print crypt('password', '$6$salt');
786 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 14:08:33 ] >>774 車道クラックか? >>777 解決したならそれを書くのが筋。HTTPレスポンスのことならHTTPヘッダの Content-Length: 行で取れるよな。 >>782 スカラ型の内部値を変えたいのか?質問の意図がよくわからん。 数値にしたけりゃ $foo += 0; 文字列にしたけりゃ $foo .= ''; 内部的にリファレンスとか整数型にしたいとかだったら簡単な方法は知らん。
787 名前:774 mailto:sage [2009/10/09(金) 17:07:06 ] >>785 普通にcryptで出来るんですね・・・ありがとうございました。 >>781 >>786 趣味で自宅サーバーをやっているのですが Perlからsystem関数でuseraddを使うためです。 誤解を招く質問をしてしまい申し訳ありません。
788 名前:777 mailto:sage [2009/10/10(土) 03:46:06 ] >786 おっしゃる通り、HTTPレスポンスから取得出来ました。 Perlの質問ではありませんでした…
789 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 01:53:02 ] 自己解決しましたっつーのは自分が苦労して答えを導き出せたから 掲示板に答えが書かれてしまうと自分の苦労の価値が下がってしまうから それを避けるための自慰行為。 「Webリソース」とか書くようなバ力は788なんかじゃなくてwcとかで解決したつもりだろ。
790 名前:デフォルトの名無しさん [2009/10/11(日) 03:25:57 ] >>787 お陰さまで私も勉強になりました。 今時のシステムはパスワード暗号化にsha512使ってるなんて 知りませんでしたから。 うちのシステムは何を使ってるんだろ?
791 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 20:13:01 ] gzファイルをgzopenを使って読み込みこむことはできたんですが 日本語が文字化けしてしまいます 普通のtxtファイルなどは日本語でも文字化けしません どうしたらいいんでしょうか
792 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 20:20:33 ] >>791 使うな。
793 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 20:25:11 ] gzopenを使うなってことですか?
794 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 20:54:51 ] perlを使うな
795 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 21:03:41 ] perlだとできないんですか? それじゃphpでやってみます・・
796 名前:デフォルトの名無しさん [2009/10/11(日) 23:57:04 ] 連想配列について質問です。 たとえばkeysでとりだしたハッシュの順序は一定ではないそうですが、 何回もperl *.plで実行しても同じ順序でキーが取り出されます。 ハッシュの順序はOS依存なんですか?それともperlのバージョン依存なんですか? 同じ環境のもとで同じプログラムにした場合はkeysでとりだされるキーも同じ順序になるのですか?
797 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 00:12:59 ] ハッシュ依存じゃないの?
798 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 00:17:12 ] >一定ではないそうですが これは誰から聞いたの?
799 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 00:35:34 ] 別に乱数は使ってないよ
800 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 00:51:45 ] 一定ではないというのは環境によるんだろうが ハッシュに順序の保障を求めるべきではないとは思う 順序の保障が欲しければリストを利用/併用すべきだろうな
801 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 01:24:16 ] perlのバージョン依存。 perl5.10.0のperldoc -f keysでは、 =========== 超訳。 perl5.8.1までは、セキュリティー上の理由から、 keysはプログラムを実行する度に違う順序で取り出されてた。 (順番自体は見た目上ランダムに決定されてる。ただし、 同一プロセス内で、hashに変更が無いならeach, valuesでも keysと同じ順である事は保証される。) =========== 暗に「より新しいperlではkeysはhashに変更が無いなら プログラムを複数回実行しても同じ順に取り出される。」 と言ってはいるが、それをkeysのperldocでは明文化は してない。 ここまで調べて面倒になった。 俺も>>800 氏と同じ見解だし。
802 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 01:32:14 ] うそっ わざわざランダムにしてたんだ for (keys っていう処理はするけど、大抵はsortとセットだから気にしたこともなかった
803 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 02:52:49 ] >>801 逆だ。5.8.0までは特定の順序で取り出されていたのを、 5.8.1以降で変わるようにしたんだ。 perldoc.perl.org/functions/keys.html > Since Perl 5.8.1 the ordering is different even between different runs of Perl > for security reasons (see "Algorithmic Complexity Attacks" in perlsec). perldoc.perl.org/perlsec.html#Algorithmic-Complexity-Attacks perldoc.jp/docs/perl/5.10.0/perlsec.pod
804 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 03:59:09 ] セキュリティが理由なら、止めてしまう訳ないしな
805 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 05:43:17 ] 質問です。サブルーチンの途中でreturnせずに戻り値を返すことは可能でしょうか? 長文処理の自作モジュールに引数としてファイル名を渡し、 サブルーチン内でopen、while(各行処理)、closeまで行なっています。 行数が数千行になるので各行で処理を終えたい(@本文のようなリストは作りたくない)のです。 現在サブルーチン内で各行をprintしていますが、どうもスマートではないと思い質問しました。 いまの状態を簡易に書くとこんな感じです。 (呼び出し側) $foo->get('file') (package foo内のサブルーチン) sub get { my $self = shift; my $file = shift; open my $in, "< $file" or die($!); while (<$in>) { #ここで各行を処理してprint } close $in; return 1; } 素直に呼び出し側でファイルを開いて行単位でサブルーチンを呼ぶべきかとも思うのですが、 それもなんかスマートでない気がしてモヤモヤしています。よろしければ方向性だけでも示唆ください。
806 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 06:03:32 ] コルーチン