1 名前:nobodyさん mailto:sage [2011/09/09(金) 18:11:49.71 ID:???] Perlのコーディングで困ってる人のスレです。 【投稿する際の注意】 質問するときは内容をよく吟味してから投稿してください。 「コマンドの意味がわかんない」とかはマニュアル見ましょう。 回答者さんは何でも屋じゃありません。 1: 自分はこういう事がしたい。 2: それでこんな風にやってみたが・・・ 3: こんなエラーが出て上手く行かなかった。 最低でも1と3が無いと誰も答えられないよ。 良い回答は良い質問から。一緒に勉強しましょう。 お勧めサイトは >>2 以降 前スレ hibari.2ch.net/test/read.cgi/php/1295170172/
598 名前:nobodyさん mailto:sage [2012/03/24(土) 10:10:34.01 ID:???] mod_perlとかplackみたいな永続化環境だとアクセスごとに走る部分でexitしたらだめじゃね なんにせよこれ「いわゆる省略の美学」とは全く別問題
599 名前:nobodyさん mailto:sage [2012/03/24(土) 10:43:09.74 ID:???] >>597-598 ありがとう。 mod_perlへの移植(と言ってもかなり書き換えることになりそうだ)を考えるなら、 最初からexitを使わないコーディングが重要ってことか。 mod_perlだと通常のexitは使わないほうがいいってのは聞いたことがあったんだけど、 実際にmod_perlは弄ったことがなくて、その感覚が掴めてなかった。 >>596-597 プログラムを1ファイルで済ませたい場合、 自分はメインルーチンソースファイルの先頭に、サブルーチンを最後にまとめて書くことが多いんだけど、 メインルーチンの最後に、以下はメインルーチンとしては実行されませんよと明言するためにexitを入れたりしてた。
600 名前:nobodyさん mailto:sage [2012/03/24(土) 11:58:06.99 ID:???] 俺も同じでソースの最初に main() なんだけど、その直前に exit() 書いてる。 use なんちゃら〜 our なんちゃら〜 main(); exit(0); sub main{ } sub func{ } っていう感じ。
601 名前:nobodyさん mailto:sage [2012/03/24(土) 17:23:47.75 ID:???] Cから入った人に多そう、とか思った
602 名前:nobodyさん mailto:sage [2012/03/25(日) 01:57:35.52 ID:???] 基本的に.pmにロジック書いて、.plはそれを呼ぶだけだからexitは滅多に使わないなあ。
603 名前:nobodyさん mailto:sage [2012/03/25(日) 15:34:18.54 ID:???] 1枚スクリプトで、&main; exit; は有りだと思う。 ただ基本は >>602 のようにするから滅多に使わない。 冗長の美学を語る人が、1枚に長いスクリプト書いてるのは矛盾を感じる。
604 名前:nobodyさん mailto:sage [2012/03/25(日) 18:03:11.28 ID:???] >>603 そこはスクリプトの規模によるんじゃね? 短めの、他と共通化出来ないサブルーチンが2〜3個あるくらいなら、分けるまでも無いだろう。
605 名前:nobodyさん mailto:sage [2012/03/25(日) 19:02:45.23 ID:???] それはそんなソースになってる時点で論外だな。
606 名前:nobodyさん mailto:sage [2012/03/25(日) 19:14:00.38 ID:???] 別に嫌みとかでは無いんだけど、>>605 の数百行ぐらいの小さいソースと、 2〜3000行ぐらいの中規模のソースを見てみたい。 ってのも、俺の殆どのソースは1枚で済ましてるから、他人ので学習というか知識を深めてみたいから。
607 名前:nobodyさん mailto:sage [2012/03/25(日) 20:04:16.17 ID:???] 605は安価がないからなー、自分が思ってるのと全く違う主張の可能性もあるw
608 名前:603 mailto:sage [2012/03/26(月) 02:46:50.44 ID:???] >>606 >>605 とは別人なんだが、数百行の小さいソースって、1プロジェクトで数百行ってことかな。 1ファイルで4,5百行くらいって話だとちょっと長いかな。 スクリプトファイルを書くにしても、大体いろいろな機能をクラス(pmファイル)に分けてそいつらの責任に任せたほうがメンテが楽。
609 名前:nobodyさん mailto:sage [2012/03/26(月) 14:06:22.42 ID:???] >>608 それはモダンなやり方ですか?
610 名前:nobodyさん mailto:sage [2012/03/27(火) 01:13:45.03 ID:???] え、モダンかぁ、、、、悪い書き方はしちゃダメだけど、モダンとかは気にしないほうがいいと思うよ、、、 流行り廃りだし、自分で判断したほうがいいよ
611 名前:nobody mailto:sage [2012/03/30(金) 00:02:30.52 ID:???] そうだね。モダンは足が速いから。スレッドももうなくなったしね。
612 名前:nobodyさん mailto:sage [2012/03/30(金) 00:16:05.99 ID:???] 【モダン推奨】Perlについての質問箱 50箱目 toro.2ch.net/test/read.cgi/tech/1327110999/
613 名前:nobody mailto:sage [2012/03/30(金) 00:29:41.87 ID:???] 初心者には敷居が高いから万人向けってわけじゃない
614 名前:nobodyさん mailto:sage [2012/04/03(火) 10:03:29.27 ID:???] こちらはcatalystについての質問でもよろしいでしょうか? catalystのスレはあるものの、人が居なさそうなので。。 catalystとApacheをつなぐために、 perl-Catalyst-Engine-Apache-1.12-1.el5.rf.noarch.rpm を入れようとしているのですが、依存関係で以下の物が足りないと落ちます。 ---> Package perl-Catalyst-Engine-Apache.noarch 0:1.12-1.el5.rf set to be updated --> Processing Dependency: perl(Apache::RequestRec) for package: perl-Catalyst-Engine-Apache --> Processing Dependency: perl(Apache::Response) for package: perl-Catalyst-Engine-Apache --> Processing Dependency: perl(Apache::Const) for package: perl-Catalyst-Engine-Apache --> Processing Dependency: perl(Apache2) for package: perl-Catalyst-Engine-Apache --> Processing Dependency: perl(Apache::RequestIO) for package: perl-Catalyst-Engine-Apache --> Processing Dependency: perl(Apache::URI) for package: perl-Catalyst-Engine-Apache --> Processing Dependency: perl(Apache::Connection) for package: perl-Catalyst-Engine-Apache --> Processing Dependency: perl(Apache::RequestUtil) for package: perl-Catalyst-Engine-Apache いろいろ探すと、mod_perlの旧バージョン(1.9.9)には含まれていたものの最新バージョン(2.0.5)には含まれて居ないモジュールのようです。 対応方法が分かる方、ご教授いただけますでしょうか。 宜しくお願いいたします。
615 名前:nobodyさん mailto:sage [2012/04/03(火) 11:11:13.68 ID:???] >>614 人がいなくてもそれがそのスレなんだからそこに書くしかないんじゃ? 人が少ないからで別スレきたら何でもアリになるだろ
616 名前:613 mailto:sage [2012/04/03(火) 16:39:22.06 ID:???] 自己解決しました Catalyst::Engine::Apache2 なるものがcpanから出てました ちょうど過渡期のようですね
617 名前:nobodyさん mailto:sage [2012/04/04(水) 00:34:44.70 ID:???] 過渡ちゃんペッ
618 名前:nobodyさん mailto:sage [2012/04/04(水) 18:53:47.59 ID:???] CGIゲーム改造してるんだけど ID<>名前<>パスワード<>データ各種・・・ みたいに記録してあって下のように処理しててこれが何か所も出てくる 扱うデータ増やすたびに全て修正しなくちゃいけなくてやたら面倒くさい 配列だと見た目で何の変数かわかりにくいし連想配列はつなぐときの順番がばらばらだし どちらも読み取りだけの時使わない変数まで格納するの無駄かなあと考えてたら先に進まなくなってしまった 変数の追加とか挿入とかするとき一か所くらいの修正でいい無駄の少ない方法ない? for($i=0;$i<$num;$i++){ ($id[$i],$name[$i],$pass[$i],...) = split (/<>/, $data[$i]); ↓ 処理 ↓ $newdata[$i] = "$id[$i]<>$name[$i]<>$pass[$i]<>..."; }
619 名前:nobodyさん mailto:sage [2012/04/04(水) 20:03:38.87 ID:???] >何か所も出てくる subにぶち込んどきゃいいだろ
620 名前:nobodyさん mailto:sage [2012/04/04(水) 21:27:07.37 ID:???] そんなあなたにはスライス
621 名前:nobodyさん mailto:sage [2012/04/04(水) 22:59:22.68 ID:???] スライスって数字のやつ?何か挿入して増やそうとするとずれるよね 単純に後ろに追加すると位置的にわかりにくいから挿入したいんだが、数字のチェックもしなくていい方法ない? 元のデータの書き換えは再生成するから考えないとして 例 データ0<>データ1<>データ2<>・・・ ↓ データ0<>データ1<>データx<>データ2<>・・・ それとサブルーチンだとどうやって引き渡そうか悩んでる 配列だと結局受け取るときに順番が大事だし連想配列だと上書きする時また<>で連結しにくいと思ったんだが
622 名前:nobodyさん mailto:sage [2012/04/04(水) 23:25:45.28 ID:???] 順番付き連想配列使えば良いじゃんw
623 名前:nobodyさん mailto:sage [2012/04/05(木) 00:00:05.98 ID:???] データファイルにはヘッダを必ず含めれば幸せになれるかも。 スライスは苦手なのでサンプルは今書けないけど、ファイルを全て読み込んだ時のイメージはこんな感じ。 my $data = {}; $data->{'headers'} = [〜]; $data->{'data'} = [ {○=>△,◇=>□}, {○=>△,◇=>□}, 〜以下略〜 ]; 読み書きは @{$data->{'headers'}} の順番で行えば良い で、読み書きを行うサブルーチンを作れば良い。 CSV 的なデータを連想配列で読み込むモジュールがあった気がする。
624 名前:nobodyさん mailto:sage [2012/04/05(木) 00:25:31.57 ID:???] だから順番付き連想配列使えって。 なんで無理して難しい方法で実現しようとするの?
625 名前:nobodyさん mailto:sage [2012/04/05(木) 06:21:58.63 ID:???] >>624 例えばこうやるんだよ、って簡単なサンプルコードを書いてやるといいよ。
626 名前:nobodyさん mailto:sage [2012/04/05(木) 09:51:23.36 ID:???] >>618 ちょっと書いてみた。 www5.puny.jp/uploader/download/1333586646.zip pass: perl 順番付き連想配列ってこうでいいのかな? 添削歓迎。
627 名前:626 mailto:sage [2012/04/05(木) 10:42:38.78 ID:???] id とかって配列なのか。 ぱっと見 $i いらなそうなので無視してましたよ。 要件満たしてないっぽいので忘れてください。
628 名前:nobodyさん mailto:sage [2012/04/05(木) 13:04:38.74 ID:???] www5.puny.jp/uploader/download/1333598575.pl pass:perl 自分はこう書いた
629 名前:nobodyさん mailto:sage [2012/04/05(木) 15:56:41.39 ID:???] >>628 それだったら $data = [array_ref, hash_ref, ...] の方が良くないですか? my $data = readdata_mod(); my $headers = shift @$data; for my $hash (@$data){ $hash->{NAME} .= '【逮捕】'; print "$hash->{$_}\n" for @$headers; } sub readdata_mod{ my $headers = <DATA>; chomp $headers; $headers = [split(/<>/, $headers)]; my $data = [$headers]; while(my $line = <DATA>){ chomp $line; my %tempdata = (); @tempdata{@$headers} = split(/<>/, $line); push @{$data}, \%tempdata; } return $data; } それより気になるのは >>618 のソースだと @id,@name,@pass... と配列があるんですよね。 これをどう処理してるか謎なんで レコードをなめるだけでいいのか悩むところ。
630 名前:nobodyさん mailto:sage [2012/04/05(木) 16:34:07.79 ID:???] そこは好みかな 自分はデータとヘッダは分離させたいので、ああやって書きました。
631 名前:nobodyさん [2012/04/06(金) 11:04:06.62 ID:AWfq6sbZ] すいません。perlをコマンドラインで使うやり方について質問させて下さい。 例えば数字の入ったファイル名だけ全部lsしたい時って どのように書けばいいのでしょうか。 こんな風に書いてみたんですが何も出力されません… ls | perl -e "print /[0-9]/ "
632 名前:nobodyさん [2012/04/06(金) 11:29:12.54 ID:AWfq6sbZ] ↑ find . -maxdepth 1 -name '*.gif' | perl -ne 'print if /\/*[0-9]{2}\.gif$/;' こんな感じで出来ました
633 名前:nobodyさん mailto:sage [2012/04/07(土) 02:00:48.78 ID:???] >>632 find . -maxdepth 1 -name "*[0-9][0-9].gif"
634 名前:nobodyさん mailto:sage [2012/04/07(土) 02:02:53.93 ID:???] >>632 > if /\/*[0-9]{2}\.gif$/; これはワイルドカードと正規表現をごっちゃにしているな。別物だからちゃんと区別するように。
635 名前:nobodyさん mailto:sage [2012/04/07(土) 04:29:33.70 ID:???] それって find . -maxdepth 1 -name "[0-9][0-9].gif" と等価なだけなんじゃないのか
636 名前:nobodyさん mailto:sage [2012/04/07(土) 09:58:11.44 ID:???] 以下のコードで,https://member.livedoor.com/login/ が 取得できません. use WWW::Mechanize; my $mech = new WWW::Mechanize( autocheck => 1 ); my $url="https://member.livedoor.com/login/"; #my $url="https://www.nodeworks.com"; $mech->get($url); print $mech->content; $url を https://www.nodeworks.com とした場合は,取得できます. https://member.livedoor.com/login/ が取得できない原因として, 何を疑ったらいいでしょうか??
637 名前:nobodyさん mailto:sage [2012/04/07(土) 11:49:34.04 ID:???] USER AGENT がちゃんと設定されてないだけでしょ
638 名前:nobodyさん mailto:sage [2012/04/07(土) 12:32:23.46 ID:???] HTTP::Cookies
639 名前:nobodyさん mailto:sage [2012/04/07(土) 19:43:25.79 ID:???] マジレスするとSSLを使用しているページにはCrypt-SSLeayを入れないと繋げない事もある
640 名前:nobodyさん mailto:sage [2012/04/07(土) 21:04:03.67 ID:???] あくてぃぶ とか すとろべりー ならインストール後には可能やよ Linux 標準の ぱーる は おーぷんえすえすえる 入れないとだめですわ シャキーン
641 名前:nobodyさん mailto:sage [2012/04/08(日) 11:30:20.98 ID:???] $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0; を追加すると繋げることもある
642 名前:636 mailto:sage [2012/04/08(日) 21:41:15.55 ID:???] >>641 https:://gitub.com は, $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0; でいけた. しかし,https://member.livedoor.com/login/ は,それでもいけない. https://member.livedoor.com/login/ は,特殊なんかな.
643 名前:nobodyさん mailto:sage [2012/04/14(土) 20:30:27.28 ID:???] 「かんたんプログラミングCGI/Perl」ってこのスレ的にはどうでしょう? ttp://d.hatena.ne.jp/perlcodesample/20120414/1334359182 この人のブログ、>>2 のテンプレに載ってないから心配になって聞いてみました。
644 名前:nobodyさん mailto:sage [2012/04/14(土) 20:38:40.49 ID:???] ソースコードに誤字山積ってだけで論外だろ。 そのブログ自体は数年前から、2ch に宣伝気味に貼られるけど あんま相手にされてない
645 名前:nobodyさん mailto:sage [2012/04/14(土) 20:45:44.78 ID:???] >>644 の言う通り。その本もブログも絶対に参考にしちゃだめ。 現代的()なPerlなんて覚えてもろくなことにならないから 5.6でも動くようなコーディングを心がけるべし。 あとこいつがプッシュしてるMojoliciousも、ちょっと有名なCatalystとかも やめといた方がいい。 フレームワークなんてすぐ腐る。 CGIが一番。
646 名前:nobodyさん mailto:sage [2012/04/14(土) 21:04:47.55 ID:???] フレームワークは小さなやりたいことに対して規模がデカすぎ
647 名前:nobodyさん mailto:sage [2012/04/14(土) 21:09:27.25 ID:???] 10年以内に発売されたような高性能PCとかじゃないとすぐメモリを食いつぶされるからな>フレームワーク。 フレームワークは金持ちのお坊ちゃまの娯楽、甘えでしかない。 技術を自分のモノにしたければCGIで泥臭く書け。
648 名前:nobodyさん mailto:sage [2012/04/14(土) 21:45:18.04 ID:???] フレームワークごときでメモリが食いつぶされるような 貧弱なマシンで使ってるの? それ選択が間違いなだけだよ。 ユーザー数、数万、数十万のウェブサービスを作っていれば、 必然と複数台構成のマシンになる。 メモリの話だと1台10GBオーバーとか当たり前。 そういう世界の人に対して高性能PCとか、メモリ容量とか 釈迦に説法ってやつだと思わないか?
649 名前:nobodyさん mailto:sage [2012/04/15(日) 11:24:37.83 ID:???] はいはい、Mojoと喪男でがんばってね!
650 名前:nobodyさん mailto:sage [2012/04/15(日) 11:27:08.04 ID:???] とにかくCGIで書くことを心がければ小規模から大規模までどんなアプリだって書けるようになる。 フレームワークは覚せい剤。手を出したら終わり。
651 名前:nobodyさん mailto:sage [2012/04/15(日) 11:52:49.40 ID:???] まあおれの場合、CGI.pmすら嫌なんでHTML直に書いてるけどね その方が書きやすいしメンテもしやすいと思ってる 初期の頃からそうしてるけどぶれていないね
652 名前:nobodyさん mailto:sage [2012/04/15(日) 11:58:08.00 ID:???] いいねぇ。素晴らしい。 楽はしちゃだめだよね。
653 名前:nobodyさん mailto:sage [2012/04/15(日) 13:46:50.99 ID:???] モジュール作成者の世界観とおれが直面している問題とは無関係だから。 モジュールのメソッドの整理具合が、個別の問題にマッチしていないのは 当然あり得ること。 個別の問題を解決するのを車輪の再発明だとは思わない(キリッ
654 名前:nobodyさん mailto:sage [2012/04/15(日) 14:12:09.38 ID:???] >>653 そういう場合はラッパーを作ればいい。
655 名前:nobodyさん mailto:sage [2012/04/15(日) 14:12:40.71 ID:???] プロとアマチュアの違いを見た
656 名前:nobodyさん mailto:sage [2012/04/15(日) 15:17:25.01 ID:???] なんだかんだで、ちょっと機能を足しただけのラップモジュールを作る機会って少なくないね。 自分が今のやってるロジェクトだとHTML::Template系使ってるけど、 共通パラメータやらフィルタやら、細かい部分が多くてなあ。
657 名前:nobodyさん mailto:sage [2012/04/16(月) 00:50:12.93 ID:???] ラッパーを作るってことは元のものより粗いものしか作れないでしょ
658 名前:nobodyさん mailto:sage [2012/04/16(月) 02:30:46.51 ID:???] >>643 ブログの中で自分の名前間違えてたりするレベルなので、本のほうも 推して知るべし、です。
659 名前:nobodyさん mailto:sage [2012/04/16(月) 09:27:44.08 ID:???] もちろん、こいつの雑誌連載も糞。 上手になりたかったらもっと2chを活用しろ。 オライリーと2chだけで十分。
660 名前:nobodyさん mailto:sage [2012/04/17(火) 05:05:18.23 ID:???] ある入門書にこう書いてありました 「関数とは、特定のまとまった処理を実行する機能のことです。 ・・・一般的に、プログラムの中で呼び出される際にデータを受け取って 特定の処理を行い、結果を返す働きをします」 演算子もこの説明における関数と働きは似ているように見えます 例えば加算演算子が 2 つの数を受け取って和の値を返すというように 関数と演算子に大きな違いがあるのでしょうか? なんで「関数」と「演算子」とわざわざ呼び分けているわけですか?
661 名前:nobodyさん mailto:sage [2012/04/17(火) 12:31:41.99 ID:???] その入門書の信頼性を疑ってみる。
662 名前:nobodyさん mailto:sage [2012/04/17(火) 12:31:59.01 ID:???] >>660 違いは無い。引数の取り方が違うだけ。
663 名前:nobodyさん mailto:sage [2012/04/17(火) 12:35:26.61 ID:???] 入門書なんか捨てろ Googleも使うな 2chで全て解決