1 名前:nobodyさん mailto:sage [2007/09/16(日) 19:49:43 ID:???] Perlのコーディングで困ってる人のスレです。 【投稿する際の注意】 質問するときは内容をよく吟味してから投稿してください。 「コマンドの意味がわかんない」とかはマニュアル見ましょう。 回答者さんは何でも屋じゃありません。 1: 自分はこういう事がしたい。 2: それでこんな風にやってみたが・・・ 3: こんなエラーが出て上手く行かなかった。 最低でも1と3が無いと誰も答えられないよ。 良い回答は良い質問から。一緒に勉強しましょう。 お勧めサイトは >2 以降 前スレ ttp://pc11.2ch.net/test/read.cgi/php/1180492441/ 過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
607 名前:nobodyさん mailto:sage [2007/11/27(火) 09:01:18 ID:???] >>599 =606 リダイレクトされるためには適切なHTTPヘッダが返っているはずだからそれ調べる。
608 名前:nobodyさん mailto:sage [2007/11/27(火) 11:02:47 ID:???] >>599 >>606 うちの環境では、3回リダイレクトを経て、?&引数がもっさりついたurlに飛ばしても、 print $response->base(); で、引数(’?’以降%E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8Aとか)がついた URLを表示できたけど・・・。 ActivePerl 5.8.8-build822(XPsp2) LWP/5.808
609 名前:nobodyさん mailto:sage [2007/11/28(水) 05:14:00 ID:???] ブログの自動投稿プログラムを作りたいと思ってるんですが、大まかな仕組みも分からず困っています。 どなたかご教授願えませんか? ちなみに、用途はバーチャルな人間の日記を作りたいと思っています。 日記を出力するアルゴリズムは別に用意しますので、 それをブログの投稿画面に自動でログインして書き込むようにしたいのです。 ローカルからでも構わないのですが、 できれば安いレンタルサーバーから行えれば良いなと思ってます。 検索で『自動投稿』としたらたくさん見つかったのですが、どれもアフィリエイター用のもので、 結構値段も高いですし、記事を予め用意しないとダメなので私がしたいようには出来そうにありません。
610 名前:609 [2007/11/28(水) 05:16:24 ID:onMmaiK+] よろしくお願い申し上げます。m(__)m
611 名前:nobodyさん mailto:sage [2007/11/28(水) 05:24:30 ID:???] ひょっとしたら、atom っていうのを勉強したら道が開けるんですか?
612 名前:nobodyさん mailto:sage [2007/11/28(水) 05:26:27 ID:???] 日記を出力するアルゴリズム ←これがきになる
613 名前:nobodyさん mailto:sage [2007/11/28(水) 09:39:10 ID:???] 日記を出力するアルゴリズム ←ってのはもしかして勝手に日記を書いてくれるプログラムだろうか
614 名前:nobodyさん mailto:sage [2007/11/28(水) 09:48:03 ID:???] >>609 △▲ WebProg 初心者の質問 Part16 ▼▽ pc11.2ch.net/test/read.cgi/php/1187729623/
615 名前:nobodyさん mailto:sage [2007/11/28(水) 13:29:43 ID:???] 日記を出力するアルゴリズムを書ける人ならそれぐらい自分でできそうだけど。 荒らしスクリプトにするつもりじゃないなら、その日記を出力するアルゴリズムの 元ネタの場所を公開すれば信用が得られるかも。
616 名前:nobodyさん mailto:sage [2007/11/29(木) 03:01:28 ID:???] そういうのは荒らしやスパムに使われる可能性が高いから、自分でやりな。
617 名前:609 [2007/11/29(木) 18:18:55 ID:fn44RAXr] >>612-615 日記のアルゴリズムが完成したわけではありません ただそっちは、大したものじゃないにしても何とかなりそうなんです。 一方、自動投稿の方は何から手を付けていいのかすら分からない状態でしたので質問させてもらいました >>616 やっぱりそうですか わかりました。何とか頑張ってみます 因みにスパム行為をするつもりは毛頭ありませんが、確かに見ようによってはそう映る可能性も否定できないですね。 あくまでも普通の人間っぽい挙動にしたいと思っているので、投稿の数も一日で多くて3通程度、少ないときは三日ぐらい更新しないような動きを考えてました。 とにかく自分で何とかしないとダメみたいですね ご迷惑おかけ致しました
618 名前:nobodyさん mailto:sage [2007/11/29(木) 18:50:54 ID:???] search.cpan.org/perldoc?XML::Atom::Client
619 名前:nobodyさん mailto:sage [2007/11/29(木) 18:56:46 ID:???] >>617 う〜む、どう考えてもやっぱりその 日記を出力するアルゴリズム ってのが、自動投稿するスクリプトより遥かに高レベルのような気がするが・・・・。 まあいいや、ヒントだけ。 WWW::Mechanize オススメ。 内容や使い方は、自分で調べてちょ。
620 名前:609 mailto:sage [2007/11/30(金) 00:45:15 ID:???] >>618 ,619 ありがとうございました。 参考にさせていただきます。 今いろいろ資料を調べたり、さっき図書館で借りてきた Webクライアントプログラミングって言う本(めちゃふるいですがw) を読んだりしてます。 HTTP通信などは一度もやったことがないので、 LWPあたりから勉強したほうがよさそうな、 そんな気がしてる今日この頃。 AtomとかXML-RPCとかの資料にまではたどり着けたのですが、 そこに平然と書かれている GETだのPOSTだのという表現についていけない状況です。 あれを全部 perl のコードに解釈するための知識がないのです。 というわけで、だいぶ時間掛かりそうですが、 こつこつやっていこうかなと。 もう少し進歩して、またわからないことがあったら、 ここか>>614 さんが教えてくれたスレにでも出没いたします。 では、ごきげんよう皆様。
621 名前:609 mailto:sage [2007/11/30(金) 03:34:24 ID:???] (´・ω・`) ノシ やっとこさ、livedoor から餌を頂戴できました なんだか、嬉しくて涙が出てきた 。・+゜(つД`)゜+・。 みんなありがと
622 名前:609 mailto:sage [2007/11/30(金) 03:51:57 ID:???] >>619 Mechanize というのを完全に誤解してたようです XML-RPCとかAtomPubなどとはまったく違うんですね。 なんというか、禁断の・・・いや、貴重な情報ありがとうございました。
623 名前:nobodyさん mailto:sage [2007/11/30(金) 12:46:37 ID:???] フォームメールに入力された内容を半角→全角に変換するプログラムがわかりません。 $str = '$mystr'; $kigou ='@!"#$%&\'()=-^\\|{}:;+*?_/<>'; require 'jcode.pl'; if ($FORM{'namae'} ne ''){ $mystr = $FORM{'namae'}; &hankaku; } sub hankaku{ &Jcode'convert(*str,'euc'); if($str =~ /^[0-9]{7,11}$/){ &jcode'tr(*str,'0-9A-Za-z','0-9A-Za-z'); }elsif ($str =~ /\x8E/) { &jcode'h2z_euc(*str); }else ($str =~ /$kigou/){ &jcode'tr(*str,'@!”#$%&’()=−^¥|{}:;+*?_/<>','@!"#$%&\'()=-^\\|{}:;+*?_/<>'); } &Jcode'convert(*str,'sjis'); $str = $value; exit 0; } 1度eucに変換してからと考えたんですが。
624 名前:nobodyさん mailto:sage [2007/11/30(金) 13:06:38 ID:???] >>623 Unicode::Japanese
625 名前:nobodyさん [2007/11/30(金) 13:27:37 ID:7wito75u] 2007/11/30-2007/12/01,00-24,[動作させる値] のようなdatファイルを下記でブランチさせると、指定範囲外だと判定されてしまうようなのです。 改善するにはどこを直せば良いでしょうか・・・最後の日付部分の比較だけで判定されてる・・? localtime(time)取得やDAT読み込みは大丈夫っぽいです。 foreach $sdat(@set){ next, if $sdat eq "\n"; @sdat = split(/,/,$sdat); @ddat = split(/\-/,$sdat[0]); @d1dat = split(/\//,$ddat[0]); @d2dat = split(/\//,$ddat[1]); @tdat = split(/\-/,$sdat[1]); if( ($ddat[1] eq '' || ($ddat[1] ne '' && $d2dat[0] eq '*' || $d2dat[0] >= $year)) &&($ddat[1] eq '' || ($ddat[1] ne '' && $d2dat[1] eq '*' || $d2dat[1] >= $mon)) &&($ddat[1] eq '' || ($ddat[1] ne '' && $d2dat[2] eq '*' || $d2dat[2] >= $mday)) &&($d1dat[0] eq '*' || ($ddat[1] ne '' && $d1dat[0] <= $year) || ($ddat[1] eq '' && $d1dat[0] == $year)) &&($d1dat[1] eq '*' || ($ddat[1] ne '' && $d1dat[1] <= $mon) || ($ddat[1] eq '' && $d1dat[1] == $mon)) &&($d1dat[2] eq '*' || ($ddat[1] ne '' && $d1dat[2] <= $mday) || ($ddat[1] eq '' && $d1dat[2] == $mday)) &&($sdat[1] eq '*' || ($tdat[0] <= $hour && $hour <= $tdat[1])) ){ chomp $sdat; $url = $sdat[2]; last; } }
626 名前:nobodyさん mailto:sage [2007/11/30(金) 13:32:25 ID:???] ひどすぎわろた
627 名前:nobodyさん [2007/11/30(金) 15:56:59 ID:7wito75u] 失礼。自己解決しました。
628 名前:nobodyさん [2007/12/10(月) 07:32:09 ID:aPvXjzqK] Perl5.x+CGIです。 現在、複数のプロセスから、同じデータにアクセス(読み書き)したいと考えています。 異なるプロセス間で共有される静的な変数、というようなイメージです。 外部ファイルやデータベースなどを経由する方法以外で、 このような処理を実現するにはどのようにすればよいか、ご存知の方がいましたらお願いします。 やはりmod_perlが適当でしょうか。
629 名前:nobodyさん mailto:sage [2007/12/10(月) 11:08:15 ID:???] 静的な変数? ていうかそれプロセスが落ちたらデータは消えていいってこと? 素直にファイルなりDBなり使えばいいとおもうんだけど、それができない理由は?
630 名前:nobodyさん mailto:sage [2007/12/10(月) 11:47:45 ID:???] 質問の意味がわからないけど mmapやmemcacheみたいなの?
631 名前:nobodyさん mailto:sage [2007/12/10(月) 13:16:59 ID:???] 読み書きするのに静的ってナンダロ スレッド使うMPM+mod_perlで:shared使うとか shared memory使うとかそういう話かな? 質問の仕方が初心者臭いし素直にDB使っとけって気がする。
632 名前:628 mailto:sage [2007/12/10(月) 20:47:52 ID:???] >629-631 ありがとうございます。遅くなってすみません。 ご想像通り初心者です。初めて触ったのは何年も前ですが、仕事とか全然関係ないので。 Perl ←―→ 外部ファイル、DB ↑ ここのコストが凄く重いので、可能な限りアクセスを減らしたいと考えています。 Perl側で保持しておけば多少は減るかなあと。 要は、「キャッシュ」のようなものだと思っていただければ。 >629 >プロセスが落ちたら はい、構いません。もう一度、データ本体から取得するだけなので。 >631 >読み書きするのに静的 「静的変数」と「定数」は全くの別物という認識だったのですが、 もしかするとPerlの世界だと違うのかもしれません。少し調べてきます。 >630-631 >mmap、memcache、shared 軽く調べてみただけですが、そういうことです。勘違いしてるかもしれませんが。 この辺のキーワードを参考に、深く見てみようと思います。
633 名前:nobodyさん [2007/12/12(水) 13:49:47 ID:uWSb2hJm] すみません質問です。 複数画像ファイルが入っている特定フォルダから更新日が一番最新のファイルを 探して表示させたいのですが出来ますでしょうか? 尚、ファイル形式は不定です。 教えてください。 宜しくお願いします。
634 名前:nobodyさん mailto:sage [2007/12/12(水) 13:58:00 ID:???] (stat 'filename')[9]
635 名前:nobodyさん mailto:sage [2007/12/12(水) 16:11:40 ID:???] 質問です。 aaa.htmというファイルを読み込んで、その中に書かれている変数を変数展開したいと思ったのですがそう簡単にはいきませんでした。 print qq|$_|; とすれば変数展開されるかなと思いましたがそれもだめ。 置換を使えば簡単なのですが、置換以外の方法がありましたら教えてください。 --------aaa.htmの内容-------- <html> <body> $a </body> </html> --------ソース-------- $a = 'aaa'; open(IN, "< aaa.htm"); @html = <IN>; close(IN); print "Content-type: text/html; charset=Shift_JIS\n\n"; foreach (@html) { print $_; }
636 名前:nobodyさん mailto:sage [2007/12/12(水) 16:27:53 ID:???] HTML::Templateでも使っとけ
637 名前:635 mailto:sage [2007/12/12(水) 16:52:55 ID:???] evalをつかったらなんとかなりそうです。 >636さんレスありがとう
638 名前:nobodyさん [2007/12/12(水) 17:26:25 ID:BkwLyerT] Encode.pm 5.85でEUC→UTF-8変換時に、 「」などの漢字が化けてしまうのですが、 これを化けないように工夫するにはどうすればいいのでしょうか?
639 名前:nobodyさん mailto:sage [2007/12/12(水) 18:06:55 ID:???] >>638 Encode::EUCJPMSを入れて、cp51932を使う。
640 名前:nobodyさん mailto:sage [2007/12/13(木) 08:48:25 ID:???] >>635 s/\$(\w+)/${$1}/g;
641 名前:628=632 mailto:sage [2007/12/13(木) 20:33:46 ID:???] 自己レスな上に遅レスです。 色々と検討してみた結果、速度や安全性に疑問も多いですが、とりあえずshm○○を使ってみようかなと思います。 ありがとうございました。
642 名前:nobodyさん [2007/12/14(金) 03:20:01 ID:jWEjvsMQ] 質問です。 Usteramで録画したflvをダウンロードしたくて、 unknownplace.org/memo/2007/10/03 を参考に以下のソースを実行しました。 #!/usr/bin/env perl use strict; use warnings; use AMF::Perl; use LWP::UserAgent; my $cid = shift || '5Fq8cQp9eHsEEknbQ22OOZniqS2xUiuz'; my $amf = AMF::Perl::Util::Object->new; $amf->addBody('client.watch_video', '/1', { cid => $cid }); my $outputstream = AMF::Perl::IO::OutputStream->new; my $serializer = AMF::Perl::IO::Serializer->new($outputstream, 'utf-8'); $serializer->serialize($amf); my $amfdata = $outputstream->flush; $amfdata =~ s/\xff\xff\xff\xff/\0\0\0\x31\x0a\0\0\0\x01/; my $ua = LWP::UserAgent->new; my $req = HTTP::Request->new( POST => 'gw.ustream.tv/gateway.php ' ); $req->content( $output ); $req->content_type('application/x-amf'); $req->content_length( length $amfdata ); my $res = $ua->request($req); my $deserializer = AMF::Perl::IO::Deserializer->new(AMF::Perl::IO::InputStream->new($res->content), 'utf-8'); use YAML; print Dump $deserializer->getObject->getBodyAt(0)->{value};
643 名前:642 [2007/12/14(金) 03:21:23 ID:jWEjvsMQ] 実行結果は以下の通りです。 Content-Length set when there is no content, fixed at /Library/Perl/5.8.6/LWP/Protocol/http.pm line 196. Can't use an undefined value as a HASH reference at test.pl line 37. どうすればいいでしょうか。 よろしくお願いします。
644 名前:nobodyさん mailto:sage [2007/12/14(金) 08:48:00 ID:???] 37行目って何処よ
645 名前:nobodyさん mailto:sage [2007/12/15(土) 20:24:19 ID:???] $text = <STDIN>; として、処理中に何らかのテキストを入力させたいです。 英数字は問題ないのですが、日本語を入力したときが変です。 aあ と入力して、バックスペースを押すとちゃんと消去されません。2回おせば「あ」の表示は消えるのですが、 受け取った文字のaも消えてしまっています。 解決策を教えてください
646 名前:nobodyさん mailto:sage [2007/12/15(土) 22:15:15 ID:???] IPアドレスから携帯のキャリア判定してる人ってみんなここから 新しいIPアドレスが追加されたか定期的にチェックしてるんですか? ja.wikipedia.org/wiki/%E5%88%A9%E7%94%A8%E8%80%85:Tietew/%E6%90%BA%E5%B8%AF%E9%9B%BB%E8%A9%B1%E3%81%AEIP%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%83%AA%E3%82%B9%E3%83%88
647 名前:nobodyさん mailto:sage [2007/12/15(土) 22:41:06 ID:???] ついでにききたいのですが、 @text = <STDIN>; ってやったときに、入力を終わりにするにはどうすればいいのですか?
648 名前:nobodyさん mailto:sage [2007/12/16(日) 02:59:28 ID:???] >646 そこから調べてるかどうかはともかく、公式サイトを見るのは確かだな。 まあ、IPアドレスが追加されること自体はあんまり無いし……。
649 名前:nobodyさん mailto:sage [2007/12/16(日) 11:33:56 ID:???] >>646 リモートホストに変換して判断してる。
650 名前:nobodyさん mailto:sage [2007/12/16(日) 16:00:14 ID:???] >>649 ホストに変換するのは失敗することあるらしいぞ。 直接IPから判断した方が確実。 気にするほどじゃないとは思うけど、どうなんだろ
651 名前:nobodyさん mailto:sage [2007/12/16(日) 18:41:45 ID:???] perlで2ちゃんねるの専用ブラウザみたいなのって作れるんでしょうか。
652 名前:nobodyさん mailto:sage [2007/12/16(日) 19:23:33 ID:???] ネットワークをサポートしていて、文章の出力が出来るなら大抵の言語で可能だと思うよ。
653 名前:642 [2007/12/17(月) 11:34:49 ID:FgX+pG+l] >>644 37行目は一番最後のprintの部分です。
654 名前:nobodyさん mailto:sage [2007/12/18(火) 10:34:57 ID:???] たとえば、sample.plに、 require('lib/lib.pl'); &dosomething(); と書いておいて、lib/lib.plに、 sub dosomething{ open(FH, '>> baka.log'); print FH time."\n"; close(FH); } とすると、lib/の中にファイルができるのではなく、ひとつ上にできてしまいます。 これをlib/の中に保存したいのですが、ライブラリからの相対パスで保存する方法はないでしょうか。 または絶対パスを使うしかないのでしょうか。 ヒントだけでもお願いします。
655 名前:nobodyさん mailto:sage [2007/12/18(火) 11:18:35 ID:???] >>654 じゃあ、ヒントだけ… つ %INC
656 名前:654 mailto:sage [2007/12/18(火) 16:52:48 ID:???] >>655 ありがとう! こーゆー用途に使うのな。
657 名前:nobodyさん mailto:sage [2007/12/19(水) 01:05:36 ID:???] ハッシュ配列の各要素をリファレンスとして関数の引数に渡したいのですが よくわからなくて試行錯誤の末下のような方法にたどり着きました $AA{'name'} = '1234'; $BB[0]{'name'} = 'abc'; $BB[1]{'name'} = 'ああああ'; $BB[2]{'name'} = '!?'; kansuu( \%AA ); $tmp = \@BB; kansuu( ${\$tmp->[0]} ); kansuu( ${\$tmp->[1]} ); kansuu( ${\$tmp->[2]} ); sub kansuu { my $h = $_[0]; print "$h->{'name'}<br>"; } BBの要素を kansuu() に入れるために もっとスマートな方法(っていうか正しい書式)がありましたら教えていただけないでしょうか?
658 名前:nobodyさん mailto:sage [2007/12/19(水) 01:14:31 ID:???] my %AA = ( name => 1234 ); my @BB = ( {name => 'abc'}, #$BB[0]に無名ハッシュ(リファレンス)をいれる {name => 'ああああ'}, #$BB[1]に〃 {name => '!?'} #$BB[2]に〃 ); kansuu( \%AA ); #\をつけることで%AAのリファレンスがわたる kansuu( $bb[0] ); #$bb[0]の無名ハッシュリファレンスを渡す kansuu( $bb[1] ); kansuu( $bb[2] ); sub kansuu { printf('%s<br>',shift->{name});#ハッシュリファレンスは->をつけて要素を取り出す }
659 名前:nobodyさん mailto:sage [2007/12/19(水) 02:00:39 ID:???] $,@,%,\と(),{},[]と->の組み合わせで大抵何とかなる。 正直スカラーのリファレンスの説明は自身がないけどおよそあってると思う my $scalar = 'abc'; #スカラー my $scalar_ref = \$scalar; #スカラーのリファレンス my $anon_scalar_ref = \do {my $anon;}; #微妙に無名じゃないけど my @array = (1,2,3); #配列 my $array_ref = \@array; #配列のリファレンス my $anon_array_ref = [1,2,3]; #無名配列のリファレンス my %hash = (a=>1,b=>2,c=>3); #ハッシュ my $hash_ref = \%hash; #ハッシュのリファレンス my $anon_hash_ref = {a=>1,b=>2,c=>3}; #無名ハッシュのリファレンス my $slacar_object = bless $scalar_ref => __PACKAGE__; # スカラー使ったオブジェクト my $array_object = bless $array_ref => __PACKAGE__; # 配列使ったオブジェクト my $hash_object = bless $hash_ref => __PACKAGE__; # ハッシュ使ったオブジェクト #素直に取り出せる printf "scalar=%s\n",$scalar; printf "array=%s\n",$array[0]; printf "scalar=%s\n",$hash{a}; #アドレスっぽいのがとれる printf "scalar_ref=%s\n",$scalar_ref; printf "array_ref=%s\n",$array_ref; printf "scalar_ref=%s\n",$hash_ref; #リファレンス先の値書き換えたり取り出したり $$scalar_ref = '書き換えちゃった';printf "scalar=%s\n",$$scalar_ref; $array_ref->[1] = '書き換えちゃった';printf "array=%s\n",$array_ref->[1]; $hash_ref->{b} = '書き換えちゃった';printf "scalar=%s\n",$hash_ref->{b}; #デリファレンスする(copyが作られる) my $scalar2 = ${$scalar_ref}; my @array2 = @{$array_ref}; my %hash2 = %{$hash_ref};
660 名前:nobodyさん mailto:sage [2007/12/19(水) 07:53:49 ID:???] CGI.pmでmetaを出力したいのですがうまくいきません。 ↓これを出力したいのですが・・・ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ttp://www.geocities.co.jp/SiliconValley-Sunnyvale/6128/perl/cgipm.html このページの解説によると、 use CGI; my $q = CGI->new; print $q->start_html( -head=>meta({'http-equiv' => 'Content-Type' -content=>"text/html; charset=$CharSet"} ), このようなコードになるはずなのですが、やってみると Undefined subroutine &main::meta called というエラーがでます。meta()がメインのサブルーチンだと解釈されてるみたいです。
661 名前:660 続き mailto:sage [2007/12/19(水) 07:54:19 ID:???] print $q->start_html( -head=>$q->meta({'http-equiv' => 'Content-Type' -content=>"text/html; charset=$CharSet"} ), とやると一応うまくいくのですが、なぜか <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> このようにもう一つ余計なメタが出てしまいます。どうすればいいのでしょうか? CGI.pmは3..31です。
662 名前:nobodyさん mailto:sage [2007/12/19(水) 10:23:45 ID:???] >>660-661 perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod my $q = CGI->new; $q->charset('UTF-8');
663 名前:660 mailto:sage [2007/12/19(水) 23:37:11 ID:???] >>662 ありがとうございました!
664 名前:657 mailto:sage [2007/12/20(木) 08:31:41 ID:???] >>658-659 ありがとうございます! 超わかりやすくて助かりました 今のプログラムの色んなところがもっと簡潔に書けそうです
665 名前:nobodyさん mailto:sage [2007/12/20(木) 10:28:40 ID:???] > 超わかりやすくて助かりました > 今のプログラムの色んなところがもっと簡潔に書けそうです 本当はわかってないくせに。
666 名前:nobodyさん mailto:sage [2007/12/20(木) 13:33:18 ID:???] >>658-659 ですべてが理解できれば天才
667 名前:nobodyさん mailto:sage [2007/12/20(木) 13:39:25 ID:???] 最低限は書かれてて分かりやすいとは思ったぞ
668 名前:nobodyさん mailto:sage [2007/12/20(木) 16:21:00 ID:???] 読む気もしねぇよ
669 名前:nobodyさん mailto:sage [2007/12/21(金) 21:13:42 ID:???] でもああやって思いつく限りの書き方試して要素やハッシュ値見てればなんとなくでもわかってくるはず。 めんどいけど。
670 名前:nobodyさん mailto:sage [2007/12/22(土) 18:50:11 ID:???] あんな変な列挙を眺めるんじゃなくて、続初めてのPerl読むべきだろ。
671 名前:nobodyさん mailto:sage [2008/01/02(水) 06:47:19 ID:???] perl5.10 に移行した人います?
672 名前:nobodyさん mailto:sage [2008/01/02(水) 20:07:21 ID:???] ノ 依存コードは書いてないけど
673 名前:nobodyさん mailto:sage [2008/01/03(木) 00:16:04 ID:???] ノシ cygwinで5.10入れてみた use 5.10;で書いてみてる
674 名前:nobodyさん mailto:sage [2008/01/05(土) 22:21:41 ID:???] 変数の中身を展開せずに確認したい場合ってどうすればいいんでしょうか? $test = "今日は\n いい天気です $wether"; こんな変数があるとして、$test自体は展開してほしいんですが、 中身の\nや$wetherは展開せずに出力したいのです。
675 名前:nobodyさん mailto:sage [2008/01/05(土) 22:58:36 ID:???] ' ちなみに、weather?
676 名前:nobodyさん mailto:sage [2008/01/06(日) 03:58:05 ID:???] >>674 $testに代入した時点で展開しちゃってるでそ そもそも確認したい意図は何? リファレンスにしてアドレスを確認する手もあるけど
677 名前:674 mailto:sage [2008/01/06(日) 14:08:20 ID:???] うーん、無理みたいですね。諦めます。一応問題は解決しましたので >>675 そうです; >>676 なるほど・・・ 意図は正規表現でゴチャゴチャいじったあとの文字列が どうしてもめちゃくちゃくになってしまうので、変数の位置関係を調べたかったのです。
678 名前:nobodyさん mailto:sage [2008/01/06(日) 16:36:10 ID:???] >>674 はなぜ>>675 の一行目を無視するんだ? それが答えじゃないか。 >>676 はそれもわかってないみたいだが。
679 名前:nobodyさん [2008/01/06(日) 23:12:25 ID:wcb81UNa] $kekka = int(200 * 0.29); print "$kekka"; このような計算をしたら、結果が57になりました。 intって小数点が発生した時に切り落とすはずですよね? えと、なぜこんなことになるのか意味が分からないのですが、 誰かご教授お願いします
680 名前:nobodyさん mailto:sage [2008/01/07(月) 01:59:09 ID:???] >>679 www.tt.rim.or.jp/~rudyard/torii009.html
681 名前:nobodyさん mailto:sage [2008/01/07(月) 11:17:24 ID:???] それ、今じゃ間違いじゃないってのが一般的。 語源の知識としてはありだけど、誤用が定着するなんていくらでもあることだから。 いつもいつも空気読めない人が指摘するよな。
682 名前:nobodyさん mailto:sage [2008/01/07(月) 11:27:36 ID:???] >>679 $kekka = int(((my $n=200 * 0.29)=~/(.*)/)[0]); print "$kekka"; こう書けばOK
683 名前:nobodyさん mailto:sage [2008/01/07(月) 11:29:04 ID:???] >>681 誤用でない方が一般的だとする根拠は?
684 名前:nobodyさん mailto:sage [2008/01/07(月) 11:38:36 ID:???] 回答にはなってないけれど、こちらの環境でもいくつか試してみた ので、その結果を書いておく。 何でこんな風な結果になるのだろうか。私も分からなかった。 $kekka = 200 * 0.29; print "$kekka"; 出力:58 $kekka = 200 * 0.29; $kekka = int($kekka); print "$kekka"; 出力:57 $kekka = int(200 * 0.29); print "$kekka"; 出力:57 $kekka = int(2 * 29); print "$kekka"; 出力:58
685 名前:nobodyさん mailto:sage [2008/01/07(月) 12:30:31 ID:???] 浮動少数の扱いの問題。 use bignum; これで解決。
686 名前:nobodyさん [2008/01/07(月) 21:15:48 ID:XSyaqzwg] >>685 おぉ いきました! 詳しい原因はよくわからないですが、ありがとうございました。
687 名前:nobodyさん mailto:sage [2008/01/07(月) 21:22:49 ID:???] ためしにPerlじゃなくてLispで (* 200 0.29) ってしてみたら57.99999999999999だってさ。機械の計算って難しいことがあるな
688 名前:nobodyさん mailto:sage [2008/01/07(月) 22:41:02 ID:???] 誤差については、がっこで習うものだと思ってたけど、そうでもない?
689 名前:nobodyさん mailto:sage [2008/01/07(月) 22:44:33 ID:???] 俺は習ったけど、もしかしたら教えてないところも少なくないかもしれん
690 名前:nobodyさん mailto:sage [2008/01/07(月) 23:59:36 ID:???] 情報工学を扱う授業でもなきゃ教わらないんじゃね? 少なくとも俺は浮動小数点の丸め誤差については習ったことない。 あと高校の世界史も。
691 名前:nobodyさん mailto:sage [2008/01/08(火) 00:07:25 ID:???] >>683 >>681 じゃないがなんかの辞書に載ってた気がする ソースはない
692 名前:nobodyさん [2008/01/08(火) 00:31:05 ID:k+nta2fc] 丸め誤差の知識はありますけど、 コンピュータの中で200*0.29ってどうやって計算してるか分からない そもそも結果が57.9999・・・・になると言われても、どういう計算をしているのか さっぱりw
693 名前:nobodyさん mailto:sage [2008/01/08(火) 00:34:28 ID:???] しかも (* 20 0.29) これは5.8って表示されるから困るw
694 名前:nobodyさん mailto:sage [2008/01/08(火) 00:38:53 ID:???] 自前のショッピングカートの消費税を int($sum * 0.05) みたいに計算してるんだけど、大丈夫だろうか…
695 名前:nobodyさん mailto:sage [2008/01/08(火) 07:14:24 ID:???] >>694 >>685 にすれば大丈夫かと
696 名前:nobodyさん mailto:sage [2008/01/08(火) 08:15:35 ID:???] 俺は一番最初の質問者ではないが、浮動小数点の丸め誤差については、 wikipediaにも載ってたね。 問題の解決には、 use bignum; つかえばいいわけで、それでいい のは分かるけれど、それとは別の話で、小数を100倍して整数で演算をして、 あとで100で割ったりする方法だったらちゃんとでるから use bignum; しなくてもいいんだよね?
697 名前:nobodyさん mailto:sage [2008/01/08(火) 22:01:08 ID:???] >>696 0.29が有効数字2桁だとあらかじめ分かっているなら100倍すればいいけどなあ。 既知でないときにはuse bignum;じゃないか?
698 名前:nobodyさん mailto:sage [2008/01/09(水) 00:10:32 ID:???] >>697 レスサンクス。 いや、意味の無い部分の考えかなと思ったんだけど、 そっちの方がメモリが少なくて済み、処理が早くなったりするのかなとか 思ったのよね。ま、すごく小さな世界をいっているんだろうけれど。
699 名前:nobodyさん mailto:sage [2008/01/09(水) 01:01:57 ID:???] うーん、俺も難しいことはわからんけど、 俺は細かい実行時間を気にしてミスをするより、コードの可読性を優先したいな。と思った。 大量のデータを扱う人から見ればふざけた態度かもしれないけどね。
700 名前:nobodyさん mailto:sage [2008/01/09(水) 02:01:45 ID:???] LL的には人間にとっての最適化(コードの可読性)のほうが重要だからそれでいいと思うな
701 名前:nobodyさん [2008/01/09(水) 03:08:01 ID:480klIK2] リーダビリティ重要。(高橋メソッド風に)
702 名前:nobodyさん mailto:sage [2008/01/10(木) 23:51:33 ID:???] IPを10進数に変換したものと、 サブネットマスク形式のリストをマッチングさせたいんですが、 どんなループさせればいいですかね? #判定ルーチン内 foreach (@list) { my ($min,$max) = subnetMinMax($_); return ($ip >= $min and $ip <= $max) ? 1 : 0; } としてるんですが、grep等を使ったほうが良いんでしょうか? ループ内でサブルーチン呼ぶのがちょっと気になります。
703 名前:nobodyさん mailto:sage [2008/01/11(金) 00:04:09 ID:???] 訂正orz x: return ($ip >= $min and $ip <= $max) ? 1 : 0; o: return 1 if($ip >= $min and $ip <= $max);
704 名前:nobodyさん mailto:sage [2008/01/11(金) 11:44:26 ID:???] @listの中にマッチするものが複数存在する可能性があって 何にマッチしたか全て取りたいならgrepだけど 有るか無いかだけでいいならループ回して見つけ次第結果返していいんじゃない?
705 名前:nobodyさん mailto:sage [2008/01/11(金) 16:30:20 ID:???] return $ip >= $min and $ip <= $max;
706 名前:nobodyさん mailto:sage [2008/01/11(金) 20:31:41 ID:???] >>704 なるほど。このままにしますありがとうございました。 >>705 そっか、そうですよね。 聞いてみて良かったです。
707 名前:nobodyさん mailto:sage [2008/01/12(土) 13:10:11 ID:???] 「うんこ」を含む行の最後に「出る」と追加することってできますか? 「うんこ」の前後は英数字・日本語交じりで文字数は不定です。 $_ =~ s/(うんこ)/$1でる/; だと、うんこ〜出るの間の文字が文末にきてしまいます。 文末指定は$みたいなので $_ =~ s/(うんこ)/$1でる$/; としてperlを実行させると、エラーなのか、プログラムが終わりません。