Perlについての質問箱 63箱目
■ このスレッドは過去ログ倉庫に格納されています
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。 CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。 (WEBプログラミング板: http://kohada.2ch.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.18.2) ▼前スレ Perlについての質問箱 61箱目 http://toro.2ch.net/test/read.cgi/tech/1381561905/ Perlについての質問箱 62箱目 http://toro.2ch.net/test/read.cgi/tech/1385039352/
>>602 XPで動くかは試してないけど、Strawberry Perlっていうのもあるよ どうしてもActivePerlじゃないとだめなの? おれ XP で Strawberry Perl つかってる ActivePerl はモジュールの対応が遅いから乗り換えた >>617 のところでActive Perlの古いのから最新まで全部ダウンロードできるじゃん それで解決だろ >>624 それだけだったらLinuxやFreeBSDなどを使うって方法もあるだろ? だからM$に金を払うのがいやだけど、MSのOSが好きという理由であるはずだ もしくはMS以外のOSがクソだっていう可能性もあるけど >>618 perlはもう進化が止まってるので、あんまり新しいことは出来ない 自分で作るなら別だけど rubyやpythonなら整ってる筈 >>618 もう見てないだろうけど HTML::TreeBuilder HTTP::Daemon LWP::UserAgent WWW::Scripter くらいでなんとかなると思うよ。簡単かどうかは知らんけど大体なんとかなってる。 最近はperlは余り聞かないな 中学生の時にはブームだったけど……。(何十年も前) 学校ではpython とかだと思う。C# java が主力? とにかく、滅多に聞かないな Perlは全然進化しないからな 一年ちょっと前に6がでて音沙汰なし 7はいつ出るんだ?って状態 >>634 > 実用性を重視するならJava一択 それって言語の実用性じゃなくて 人材的な意味での実用性だよな つまりJavaは色んな所で使われてる言語だから Javaできますって言っておけば採用されやすい。 自分が実用性がある人間になりたいならJava一択 言語なんかいくつ修得してもいいんだから、大人しくJava勉強しとけ 何がなんだか仕様に混乱するから3つまでしか習得出来ません 4つめ覚えるとなにかを忘れます 621 > むしろなぜXPを使ってるのか知りたい 動作確認だよ XPと10で動くならVistaでも7でも8でもでも動く可能性が高いから いちいち全OSを揃えて動作確認すると シロウトの趣味でアプリケーション開発するには荷が重すぎる いちいち全OSで動作させたいと思う理由は何? サポートが終了しているXPで動作する必要はないし Vistaも2017年4月までだ。シェアから考えれば切り捨てても十分だし 7と10で動作確認すればいいじゃん 俺の周りでは、いまだにNT3.5.1を使ってる取引先があるのだが。 用途を特定した専用マシンみたいなのは、特にOSを入れ替えずにずっと使うな 測定機器や実験機器の一部とか、何かの制御用とか ただ、そんなマシンは新しいソフトを入れたりもしないから、 互換性とかどうでもいい世界だけど 以前こちらでお世話になった顔文字のど素人です。 $ perl -p -e 's/(..)/$1 /g;' 123456 ↓ 12 34 56 恐縮ですが上記の逆(スペースの削除)をご指導願います。 00 06 fc 25 58 50 0a 00 54 92 31 03 49 46 88 d0 c6 ↓ 0006fc2558500a0054923103494688d0c6 よろしくお願いいたします _(_^_)_ とにかく学習しようという気がまったく見えないのが凄い 普通1時間以内に学習を完了してそうなものを、10日以上経ってるぞ active perlで、長いファイル名のあるフォルダに対して readdir すると、 エラーになって止まるんだけど、どうやって回避すればいいんだ エラーが返るとかじゃなくて実行自体が止まるので、とりあえず読んでみて、 とかが出来ない windowsのエラーじゃねぇの? とりあえずevalすれば実行は止まらないと思うけど >>653 ひょっとして、ファイル名にユニコード文字が混じったりしてない? readdirのユニコード版なら、こうゆうモジュールもある。 http://search.cpan.org/ ~xaicron/Win32-Unicode-0.26/lib/Win32/Unicode/Dir.pm それを使うと、既存のreaddir の挙動が変わるの? >>659 「長い」って何文字なん?260文字以下だと問題ないはず。 Windowsで260文字以上のファイル名を普通に作ろうとすると、 「ファイル名が長すぎる」とエラーが出るが、 ネットワークドライブを使うと、作れてしまうようだ。 ただ、それを実際に使おうとすると、ドツボに嵌るみたいだな。 @file = split(/\n/,`dir /s /b *.* 2>NUL`); な。次スレのテンプレに追加するから。 シェルとカーネルを縦横無尽に使いこなすのがPerlプログラミングの醍醐味。 print 1+(2+3); print (1+2)+3; この二つの文の違いを使いこなすのが、Perlプログラミングの醍醐味。 awk 由来の 0+ ハックや "". ハックは常識として使いこなすのが、Perlプログラミングのたしなみ。 工夫できないなら何を使ってもダメ sub to_s { $_[0].'' } sub to_i { $_[0]+00 } >awk 由来の 0+ ハックや "". ハックは そもそも、常識でないといいたげな、このレスは何? まともな参考本読めば、最初の方に書いてある。 ハックでもなんでもない Win-7、Active Perl 5.16です。Unicode文字を含むperlの処理結果を utf16leで出力しようとしています。下のようにやってみましたが、ダメでした。 出力をバイナリエディタでみると、改行コードが変な風にいじられていました。 binmode STDOUT => ":encoding(utf16le)"; print "ユニコード文字を含むテキスト\n"; 色々試した結果、下のスクリプトのようにすると、概ね動くことが解り ましたが、動かない場合もあります。下の例では、「aaaaa」は出力され ますが、「bbbbb」は出力されません。どうするのが正しいでしょうか? use utf8; binmode STDOUT; use Encode qw/ encode decode /; sub wprint{ foreach(@_){ s/\n/\r\n/g; print encode('utf-16-le', $_); } } wprint "a"x5, "\n"; foreach (1..5){ wprint "b"; } wprint "\n"; >改行コードが変な風にいじられていました perlではどのOSでも改行をLF(\n, 0x0a)として扱っている Windowsでは通常出力する際に自動的にLFをCRLFに変換している 0x0a (perlの\n) 0x0a 0x00 (utf16にエンコード) 0x0d 0x0a 0x00 (0x0a を 0x0d 0x0a に変換、正しくは 0x0d 0x00 0x0a 0x00 にしたい) wprint関数のやり方が上手くいくのは 0x0a (perlの\n) 0x0d 0x0a (s/\n/\r\n/g で置換) 0x0d 0x00 0x0a 0x00 (utf16にエンコードし、自動変換も無効にしているのでこのまま出力される) >「bbbbb」は出力されません 様々な事情で特殊変数 @_ の各要素やループ時に設定される一時変数 $_ は元の値の別名として扱われる つまり同じ値を参照しているため、それらに代入や置換などを行うと元の値も変更されてしまう 元の値が変数ならそれが変更されるだけで問題はないが、定数の場合変更できないのでそこで死んでしまう wprint関数では @_ でもループ内でも変数として受け取っていないため置換処理で引数の値を変更しようとしている 'a' x 5 は評価されたときに変数に入れられたように扱われるので問題はないが、直後の "\n" はまさしく定数なので変更できず死に、以降の処理が止まる 関数内で最初に my @args = @_; のように一度変数で受け取るのが意図しない変更を防ぐ意味でも良いだろう >>673 672です。 よく解りました。 ありがとうございました。 print print (1+2)+(4+5)+6+7; 3 23 print print print (1+2)+(4+5)+6+7; 3 23 1 👀 Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f) $hash{'aaa'}{'bbb'}{'ccc'} = 1; みたいなことをしても、普通に通るのが凄いよな それでいて、仕様としては別に多次元ハッシュなんか対応してない なにをするんでもいちいちチェックが入って膨大な自動操作が裏で行われてる証拠。 さらに変数と実体を結びつけるデータテーブルもかなりの容量を使用してる。 木構造の探索などをやると、動作がCの10倍程度違うと言われるけど、やってみたらメモリ容量が100倍以上違うことも確認された。(将棋の盤面探索)。 まあ一時的にスクリプトが欲しいときとか、それが良い時はそれで良いけど、 通常のソフトウェアを作る時内部でそんなことが起きれてば完全な欠陥なわけであって。 そうか、100倍以上違うのか。試してみたいからソースコードを見せてくれ。 >>678 えーと、インタプリタとコンパイラって知ってるかい? 1 ビット × 8000000 のビットマップって Perl でどうやるんだろう? こうかな? $perl -e '$h{ $_ } = 1 foreach 0 .. 7999999; system("bash","-c","ps -p \$PPID -F");' UID PID PPID C SZ RSS PSR STIME TTY TIME CMD i 5240 4743 96 253250 997920 1 11:18 pts/4 00:00:05 perl -e $h{ $ みたいなことでもしたんだろうか。 >>680 インタプリタとコンパイラの速度差は2倍未満と言われてるけどな この場合は自動型変換などの暗黙の処理とデータテーブルが問題。 もちろん自動型のコンパイラを使用しても同じ結果になる。 「そう言われてる」ってやつだからな。 ただ有名なんで検索すればいろんなところで出てくる。 10倍遅くなるのは、自動処理が8でインタプリタが2、合計10 別に正確な情報どうこうじゃなくて、 おそいのがインタプリタのせいだと思ってるよりずっといいでしょって話 ろくに知らなければこういうことをするかもな、という想像なんだが。わかりにくかったのならすまん。 なにしろ何をしたのかまったく解らないから適当に想像するしかないんだよ。 Cでも 伸び縮みを含めた動的なメモリ宣言と開放と、呼び出しの度そのチェックと、管理情報の保存. 動的な値の自動変換と、呼び出しの度そのチェックと、管理情報の保存. たったこんだけでも超遅くなるか つか動的な宣言って超遅いよね それはそうと俺も稀にPerlやるんだが、 use utf8; use strict; use warnings; binmode STDIN, ':encoding(utf8)'; binmode STDOUT, ':encoding(utf8)'; binmode STDERR, ':encoding(utf8)'; これ毎回書くんだが、全部省略できないかの すぐこれ書くの忘れて文字コード関係でおかしくなるし、書いたら書いたで無駄に目障りなんだが・・・ # Hoge.pm package Hoge; use strict; use warnings; use utf8; binmode STDIN, ':encoding(utf8)'; binmode STDOUT, ':encoding(utf8)'; binmode STDERR, ':encoding(utf8)'; sub import{ strict->import; warnings->import; utf8->import; } 1; # script.pl use Hoge; # ただし@INCからHoge.pmが見つかるようにする そういやutf8なら binmode STDOUT, ':utf8'; で良かったか >>677 参照の -> を参照に対しては省略できるってだけだが。 それが凄いところ オブジェクト指向だって、ほんの小手先でちゃんと実用になるものを実装しちゃってる >>693 最低レベルな。 小手先で済ませちゃったから、それ以上の 便利な機能はライブラリ任せになっちゃって いつまでも標準が生まれなかった。 Perl6にさっさと移行すればいいのに 言語なんてそれでいいだろ 標準に拘っても何も得しない >>695 可読性の問題だ。 意味は全く一緒なのに、書き方を変えてどうする? 言語を変えるのと一緒だぞ どうせ定番の奴がデファクトスタンダードになるんだから同じことだ それは目的がニッチ過ぎたか利用者が少なすぎたからで、 どっちにしろ標準になんかならない Perl6 ? そういえばそうゆうものもあったな。ググると、 1年半前に正式安定版がリリースされたのか。知らなかった。 誰も、その事を話題にすらしていないし。 http://tamae.2ch.net/test/read.cgi/php/1162721943/ 「 Perl6/Parrotスレ - Part2 」 >>689 +690 PERL5OPTと組み合わせれば全て解消。 >>688 そうか?ディスクI/Oが絡まないようなメモリ上だけの操作ならさほど遅い感じしないけど。 まあ、単純なのと比べたら遅いけどね。 >>705 理論上完全に最適化できたとしても速度差は5倍以上あるよ $str = "みかん りんご ぶどう"; を・みかん ・りんご ・ぶどうというように文字の最初に・をつけるには どう置換すればいいんですか? join '', map { '・' . $_ } split ' ', $str; linux mint18 perl6のインストールについて $ sudo apt install rakudo パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 E: パッケージ rakudo が見つかりません どうしたらインストールできます? $ perl6 -v This is perl6 version 2015.11 built on MoarVM version 2015.11 すいません、解決しました メモリリーク検出になに使ってる? とりあえず昔からTest::LeakTrace使ってるんだけど いまはもっと便利なものがあったりするのかな? Perl/Qt は癖があるね、Perl/Qtとクラスを同時に使おうとするとなかなか大変。 テキストファイルを読み込むときに // (例えばfile://...) があると、そこから行末まで読み込めない現象が起きるんだけど どうしたらちゃんと読み込める? binmodeにしても解決しなかった >>717 open fp, "<$file"; while(<fp>){ print $_; } みたいな感じで読み込んでる ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる