Perlについての質問箱 64箱目
■ このスレッドは過去ログ倉庫に格納されています
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。 CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。 (WEBプログラミング板: https://medaka.5ch.net/php/ ) このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。 スレ違いの質問にはスルーか、速やかな誘導をお願いします。 荒らしはスルー推奨。 "The duct tape of the Internet" こと、Perlについての質問箱です。 "There's more than one way to do it" ということで、 Perlの奥深さについて皆で語り合い、追求してまいりましょう。 www.perl.org/get.html Download Latest Stable Source (5.28.1) ▼前スレ Perlについての質問箱 61箱目 http://toro.5ch.net/test/read.cgi/tech/1381561905/ Perlについての質問箱 62箱目 http://toro.5ch.net/test/read.cgi/tech/1385039352/ Perlについての質問箱 63箱目 https://mevius.5ch.net/test/read.cgi/tech/1392820583/ 病気の人か 5ちゃんねるで悪態つくだけの惨めでみっともない人生 >>616 >>505 をよろしくお願いします 期待していい? >>614 数万人の天才が挑戦しているがいまだに達成していない >>621 むしろ天才よりも秀才のほうやろ。 本当の天才はそういうことに関わらん気がする。 直感的に不可能か、現実的に意味がないかを悟っていそうというか。 バグの無いことの証明が不可能なのは、 ゲーデルの不完全性定理とかあのへんまで突っ込んでいくからであって、 99.9%okなら良しとする現実世界なら普通に可能 >>623 そしてその0.1%が理由になって戦争になるわけですね UTF8からShift-JISに変換し、その中で変換できなかった文字列はhtml数値文字参照に変換したいです (UTF8)楽しいね🙂→(Shift-JIS)楽しいね🙂 ; このような風にです こちらのサイトを参考にして↓のように書いてみたのですが https://blog.netandfield.com/shar/i/details/004482.html#home use Encode; my $word = "楽しいね🙂"; Encode::from_to( $word, "UTF8", "Shift_JIS", Encode::FB_HTMLCREF); print "$word"; (結果) ?y??????🙂 ; と、元の日本語が文字化けしてしまいます どこを直せばいいでしょうか? Perlのバージョンは5.18.2 Encodeモジュールのバージョンは2.49です その出力先(ターミナル?コンソール?)は、そもそもシフトJISテキストを表示できるのか? できない場合は、プログラムは関係なく、ターミナルが文字化けする。 ためしにtext.htmlのようなファイルに出力してから、その内容を確認したら? 前にやろうとして諦めた pythonだと簡単 try: str_sjis = str.encode("CP932") except UnicodeEncodeError: print str.encode("utf-8") >>628 そのレベルならPerlでも簡単 絵文字だけ抜き出してHTML特殊文字化 でしょ >>627 ターミナルです ファイルに出力してそれをShift-JISとして開いたら文字化けもなく見ることができました 内部的には問題なかったのですね ありがとうございました プロトタイプ属性の指定がどうやってもできん use feature 'signatures'; sub foo :prototype($$) ($left, $right) { return $left + $right; } これで構文エラーになる理由が全く分からん え???? use feature 'signatures'; sub NAME(SIG) BLOCK # with signature sub NAME :ATTRS (SIG) BLOCK # with signature, attributes sub NAME :prototype(PROTO) (SIG) BLOCK # with signature, prototype 構文こうなってるけど? 以下のようなhtmlがあるとします <div> <p>AAA</p><p>BBB</p><p>CCC</p><p>DDD</p> </div> <p></p>の構文が4個の場合は、構文を文字列として2個ずつ別の変数に分けたいです。 ($str1 に"<p>AAA</p><p>BBB</p>" 、 $str2に"<p>CCC</p><p>DDD</p>" <p></p>の構文が6個の場合は3個ずつ、8個の場合は4個ずつ・・・と前半と後半で分けて 2つの変数に代入したいのですが、方法はあるでしょうか? そら一発では無理だろう 一旦配列に入れてから真ん中で分ける ちょろい問題。単なる初心者で釣りなんかじゃないでしょう。 @foo = (); @bar = (); while ($str =~ s{^[\s\S]*?<p>(.+?)</p>(.*)<p>(.+?)</p>[\s\S]*$}{$2}){ push @foo, $1; unshift @bar, $3; } 2行目間違えてた。 while ($str =~ s{^[\s\S]*?<p>(.+?)</p>(.*)<p>(.+?)</p>[\s\S]*?$}{$2}){ # 元ネタ my $html = '<html><p>hoge1</p><p>hoge2</p><p>hoge3</p><p>hoge4</p><p>hoge5</p><p>hoge6</p><p>hoge7</p><p>hoge8</p><p>hoge9</p><p>hoge10</p></html>'; # 全部のpタグの中身を引っ掛ける my @p_list = $html =~ /<p>(.+?)<\/p?/g; # 引っかかった数取得 my $size = int(@p_list); # 前半と後半に分けて突っ込む my @mae = @p_list[0..int($size/2)-1]; my @ato = @p_list[int($size/2)..$size-1]; # 結果表示テスト print Dumper([\@mae, \@ato]); なんだこの糞改行(´・ω・`) # 全部のpタグの中身を引っ掛ける my @p_list = $html =~ /<p>(.+?)<\/p>/g; # 引っかかった数取得 my $size = int(@p_list); # 前半と後半に分けて突っ込む my @mae = @p_list[0..int($size/2)-1]; my @ato = @p_list[int($size/2)..$size-1]; # 結果表示テスト print Dumper([\@mae, \@ato]); 俺のは巨大なHTMLだとメモリが死ぬ 安全策なら>>640 >>644 まあ、そんなに巨大だったら、どっちにしろ死ぬやろけどな。w 本気で心配するならチビチビつままないと。 Ruby の、Nokogiri で、スクレイピングしてみた require 'nokogiri' doc = Nokogiri::HTML(<<EOT) <div> <p>AAA</p><p>BBB</p><p>CCC</p><p>DDD</p> </div> EOT p_tags = doc.css( "div > p" ) # div の直下のp half_cnt = p_tags.length / 2 def make_p_str( ary ) # 要素の配列から、文字列を作る str = "" ary.each do |elem| tmp = elem.to_html # 要素 tmp.chomp! # 末尾の改行を削除する str += tmp # 連結 end str end p str_before = make_p_str( p_tags[ 0...half_cnt ] ) # 前半 p str_after = make_p_str( p_tags[ half_cnt..-1 ] ) # 後半 出力 "<p>AAA</p><p>BBB</p>" "<p>CCC</p><p>DDD</p>" Mechanize とか、curl + Nokogiri でも、静的なページなら、DOM を取得できるけど、 Ajax など、JavaScript で、動的にDOMを組み立てている場合は、 sleep するとか、Selenium WebDriver などを使わないと、DOMを取得できない 5ch などは、空のHTMLを送ってきてから、 Ajax で、ページの内容を取得しているから、 HTMLをスクレイピングするだけでは、タイミングによっては内容が存在しない Ruby で、curl, Nokogiri の例 require 'nokogiri' html = `curl http://www.example.com/ ` doc = Nokogiri::HTML( html ) elements = doc.css( "h1" ) puts elements.first.content #=> Example Domain open-uri の例 require 'open-uri' require 'nokogiri' url = 'http://www.example.com/' doc = Nokogiri::HTML(open(url)) プロテクトのつもりは無いんだろうけど、機械にやさしくない 最近だとメルカリのページ取得して、なんで空? と思った Selenium WebDriver なら、指定した要素が出現するまで、指定した時間だけ待ってくれる 漏れは、10〜20秒ぐらいを指定してる webであれこれしたいなら、javaが近道なのは自明だな 逆にPerlできないことってなんだ? ライブラリは揃ってるものとして あんまりない 弱いのはライブラリ面なので言語的に不足してる機能はそれほどない なら、C++があれば他の言語は要らなくなる。 さらに極言すれば、アセンブラがあれば他の言語は要らなくなる。 GUIは弱い。 まあ強いと言っていいのはC#くらいだから、しゃあない? 返信が遅くなってすいません >>640 ,643,646 勉強になりました ありがとうございました GUI必要なツールはC#使うけど、CUIだけとか引数もなくて単に実行するだけとかそういうのだいたい全部Perlで書いてる GUIって結局、裾野の方々でも使えるようにする工夫であって、 テキストエディタで条件設定した方がよっぽど効率いい場合が殆どなのでは 自分専用ツールでGUIで作った記憶がない >>661 スマホのアプリはテキストエディタを使うのが主流か? スマホのは作ったことすらないけど、 CUIなんて選択肢がそもそもあるのか? >>661 だからなに? ああそう、とかいってほしいの? GUIが必要ないものはPerlでって話でしょ これに噛み付いた>>661 が意味不明 噛みつかれた、と思っちゃうのが糖質なんだよな 書き込みがみんな攻撃に見えるっていう >>653 だってJavaとPerlでスマホのGUIを比べるのがどうかしてる >>667 わけがわからなすぎるからな。 攻撃に見えてもしゃあない。 オレには隙自語に見えた。 で、本人はどういうつもりなの? そうだねでいいんでね おれもそう思う GUIがあった方がいいなって時はつければいいし あー。PerlでスマホのGUIか。書けたらいいな。 ていうか世界は広いからとっくの昔に誰かが作ってそう。 Perl(パール)[Pathological Eclectic Rubbish Lister] Google翻訳[病理学的折衷的なゴミリスター] どうしてこうなった? perlのguiといえばTk, Tkx, wxWdget, Qt, GTK …色々あって やろうと思えばやれると思うけど。 オレはPerlではTk, Tkxしかやったこと無いけどさ >>677 「病理的に異常な妥協を寄せ集めたゴミくずリストを作るものです」と? 処理が終わったらwindowsにポップアップを出すくらいでいいわ >>676 同感 適材適所 Perlは高度なバッチ処理が適所だと思う やれるというのと、それを目標に人が集まってくるのは別 rubyのrailsとかpythonの機械学習とかみたいに、 GUIの為にperlを覚えたような奴を見たことない GUIのために言語を選ぶ? 少なくともperlにおいては、そんなことないだろJK >>682 そんなに出来のいいものではなかった記憶。 Tk自体も、Perlとのなじみかたも。 CでXを直接使うよりはマシに違いないが。 >>682 その前にWindowsのGUIの方が普及しただろうが あれはperlで書かれていたのか? 馬鹿は黙っていればいいのに もはや何の話題だかわからん罠 CGIでPerlを使う話からどうやったらこんなカオスが生まれるのか Microsoftが卑怯な手段を使ったから普及したのでは? Microsoftがどうこうというよりも、ほかがどんくさかっただけやろ。 Windowsは、メッセージループとかコピペとか、最初からけっこうこなれてたような。 どっちも、今ならあんな仕様にはきっとしてなさそうな気はするが、当時としてはなかなか。 で、GUIと言えばperlと言われたのはいつの時代のどのアプリやOSなのかね 個人的な思い込みではなく そういや Perl/tk はその後日本語対応うまくいったのかな? 最初使った時にダメでそれ以来使ってないのだが。 perlはモジュールの品質が悪すぎたな どうにでもかけすぎた上にperlのオブジェクト指向きつい感じ オブジェクト指向は万能じゃないからな ライブラリを効率的に使い回す方法をあれこれ模索してたら、 名前空間の衝突を積極的に使う方法に行き着いて、 いろんな型を統一的に扱えるように書けるようになったら、 これ何も知らない人から見たらただのオブジェクトだよなということで出来た 最終的なものに付けた名前であって、最初からオブジェクト指向を目指した訳ではない そこからオブジェクトなんだったらどうせだからと、面倒くさい宗教に変わっていってしまった だから、大層なものである必要は全然なくて、メンバーとメソッドが使えるだけで十分便利 データ(オブジェクト)を中心に処理を考えるみたいなのが発展してオブジェクト指向になったのでは? どう発展して来たかは今更どうでも良い話だが。 オブジェクト指向でやるようなアプリはPerlでやるべきではないと思ってる Perlはバッチ処理一択 別にOOPで作りたいならPerlでいい。 Perlは文字列を扱うスクリプトで本領を発揮するもんだけどね。 >>770 そもそも動的片付けの言語でOOPはクソだと思ってるわ。 膨大なライブラリはオブジェクト指向のお陰なのに 小規模なダクトテープ的な処理しかしない人には不要だろうけど >>703 ライブラリはその通りだった… ただメインモジュールを上位でオーバーライドしてどうのこうのとか そういうのはいい思い出無い >>703 Perlでダクトテープ以上のものを作ろうとは思わないから。 ま、しゃーない。 普段は過疎っているクセに誰かが質問を書き込んだ途端クソどうでもいいヤジ馬(質問には一切答えられない)がわらわらと湧いてくる 数日前からLWPでhttpsにつながらなくなったんですが、verify_hostnameを無効にするとつながります Windows 10、straberry perlなんですが、Windows側の証明書の問題とかあるのでしょうか? Mozilla::CAなど関係しそうなモジュールは最新にしてみましたが、改善しませんでした >>709 直るかもしれないけど、また何かが更新されてダメになるよね ほかにないですか? 証明書関連なんだろうけど、サーバの証明書が悪化してしまったのでは クライアントとしては無視しないといけない状態に Let's Encrypt みたいな無料の証明書を使っているサイトかも。 そういうサイトが多い 証明書の期限切れ >>708 特定サイト(接続先)の話でしょ? そのサイトの証明書の期限切れだと思うよ レスありがとうございます 特定サイトではなく、また、ブラウザでアクセスできてLWPではできないという状況です その後、セキュリティソフトにESETを使っているのですが、 ESETにブロックされていることが分かりました Mozilla::CAの証明書が気に入らないのか、ESETの不具合なのか.. どちらかが更新されるのを待ちたいと思います ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.4 2024/05/19 Walang Kapalit ★ | Donguri System Team 5ちゃんねる