【モダン推奨】Perlについての質問箱 50箱目
■ このスレッドは過去ログ倉庫に格納されています
CGI についての質問は板違いです。WEB プログラミング板でどうぞ。 CGI と Perl の区別がつかない人も WEB プログラミング板に行ってください。 (WEB プログラミング板: http://hibari.2ch.net/php/ ) 回答する際はモダンな方法でお願いします (例 jcode.plではなくEncodeモジュールを使った方法) 理由はもう2012年です。いい加減2000年以前の方法はやめましょう。 最新のPerlを使うほうがかっこいいです。 いつまで勉強しないつもりですか? 過去にとらわれるのはもうやめです。進歩しませんよ。 このスレでは(CGI 以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。 スレ違いの質問にはスルーか、速やかな誘導をお願いします。 "The duct tape of the Internet" こと、Perl についての質問箱です。 "There's more than one way to do it" ということで、 Perl の奥深さについて皆で語り合い、追求してまいりましょう。 http://www.perl.org/get.html ● 2011/10/30 現在の最新版: 5.14.2 ▼ 前スレ Perlについての質問箱 49箱目 http://toro.2ch.net/test/read.cgi/tech/1319953460/ リンク集は >>2-3 辺り Perl 日本語処理の基礎の基礎 >>4 辺り プログラムはプログラマだけのものじゃなくて、依頼者や使用者のものでも あって、依頼者視点での保守、使用者視点での保守をしていかないとならない。 その場限りのソフトウェアならモダンPerlでも構わないかもしれないが、 保守するのであれば、流行で作ったものは時間が経つと「変な髪形」になっ てしまう。それが分かってないのは、おまいのしりが青い証拠だ。 >>106 受託ってやつ? ウェブサービス作ってるんじゃないの? 俺にとってプログラムは自社のもので、自分たちが 開発しやすいように最善の方法を目指してるんだけどさ、 客に足を引っ張られるのって、ちょっと可哀想に思う。 >>106 そういう時はバージョンと使用するライブラリを指定すればいいんだよ。 依頼者は何も指定しなかった場合、 古いPerllで作ろう。 それが依頼者のためになるんだ。 >>106 客が要求するのがモダンではないと決めてかかってる。 客がモダンを要求したらどうするつもりだ? 単にお前は、モダンPerlが書けないだけ。 逆になんでモダンにこだわるの?変なとこにこだわって成果がでないんじゃ 本末転倒じゃないの?成果とモダンとどっちが優先なの? >>113 単におまいはモダンっていいたいだけちゃうんか この青尻め >>115 モダンを諦めれば、成果が出るとでも思ってるの? むしろ、モダンを使う=成果が出る なんだが。 一旦モダンって名前を頭から消して普通にPerlコードを書かせてみるとする そいつのコードがKENTみたいなやつだとして、それが他の人が誰でも保守できるようなシロモノになるとは到底思えない >>117 そんなこと言ってないだろ、どこを読んでんだ?青尻くん 青尻くんとこは結構自由みたいだけど、個人事業主なの? これまでの積み重ねがないと例えば会社が終わりになったときに技術的にも 全てを失うことになるよ。 モダンなんかやってて技術の積み重ねになるわけがない。 わざわざ不便なものを選んで苦しむのが積み重ねか 古いんだよそんなスポ根的発想は! 青尻くんは、プログラムは実現したいこととその解決方法の両方を記述する ためのものだってこと、ちゃんと理解してるの?そうか、してないのかまだ 青いのか。 普通にわかれよ。 モダンperlがいいものだとしたら普通に普及する。 駄目なもので無理やり普及させたいのには訳がある。 本や講演などで稼ぎたい人もいるってこった。 > モダンperlがいいものだとしたら普通に普及する。 実際に普及してるよな。 半径5m以内の、CPANモジュールも使えない環境を見て言ってるんだろうな。 そうだな。青尻くんが青筋立ててキーキーいう必要はないはずだよな? かわいいの♪ステマつげるぅ〜♪ いーないーな♪それいいなぁー♪ つげるタイプの魔法だょ〜♪ ステルスマーケティング用語か。個々の技術とまったく関係ない話だな。 要は互換性のなさをごまかそうとしているんだな。ばればれだぞw >>118 で、きみの書いた誰でも保守できるようなコードはどこにあるの? 長期に渡る保守が予想されるソフトウェアは一時期の流行に合わせて 書くのではなく、将来を見据えた記述をするのが正解。 意固地に10年前の書き方を押し付ける必要はない 今使える書き方と今使えるモジュールで書けばいい 今使えない書き方で書けと読めてるお前がおかしい ワンライナーや売り切り逃げ切りのソフトならお好きにどうぞ モダンは互換性がないのと将来のメンテナンスが不安なのが弱点か。 モダンゆえに時間軸の過去も未来もだめってことか。それは困る。 >>138 >互換性がない 何と? >将来のメンテナンスが不安 将来のメンテナンスを考えると何を使えばいいの? 素のPerlや標準モジュールが思いつかないあたり、いい、すごくいいよ、 青尻くん。だんだん気に入ってきた。 たとえば標準モジュールの例としては、 http://perldoc.perl.org/index-modules-A.html ・文字コード関係 Encodeモジュール (Jcodeは×) ・日付関係 Time::Piece、Time::Seconds (もろもろある日付モジュールは×) ・オブジェクト指向関係 Object::Accessor、Class::Struct データベース関係(ファイル以外)は、何もありません。 >>141 が言っていることはこういう意味です。 がんばって標準モジュールを列記してみたものの、やっぱり素のPerlは 思いつかないところ、青尻くん、すばらしい。すごくいい。 「モダンPerl使いなのでlocaltimeは使えません。」キリッ 職場で一度言ってみたい。。。試用期間で終わるだろうけどw >>143 localtimeは、Time::Pieceで使うよw 標準モジュールのTime::Pieceが素のPerlを拡張してくれるのに、 今更配列のインデックスで年取得して+1900とかする 冗長なコード書くバカいるのかい? >>143 お前がTime::Piece知らないってのが モロバレだなw はい、このように、モダンPerlを嫌ってる人=無知なだけ ってことなのです。 > 素のPerlや標準モジュールが思いつかないあたり って言っておきながら、標準モジュールをあげたら今度は > がんばって標準モジュールを列記してみたものの、やっぱり素のPerlは > 思いつかないところ もしかして、自分の知らない標準モジュールばっかりで 方向転換したのかいな? モダンPerlとそうでないPerlとの違い、メリットについてもっと教えておくれ 標準モジュールを使いこなすのがモダン。 そうでないものは単に勉強不足なだけ。 なんだ、そうだったのか。てっきりlocaltimeも満足に使えないのかと 思ってたよ。失敬、失敬、こりゃ失敬。 念のため言っとくがlocaltimeから リストコンテキストで取得するのは古いやり方だからな。 最近のやり方はlocaltimeからTime::Pieceオブジェクトを返す方法。 もちろん標準モジュール。 で、Time::Pieceのインタフェースってlocaltimeと互換性あるの? 例えばリストコンテキストで使うと同じように値が戻ってくるの? >>152 % perl -MTime::Piece -E'say (localtime);say scalar localtime;say localtime->datetime' 職場にようやく5.8が入ったんでよーし、これからはモダンPerlだぞ!と 意気込んできたらTime::Pieceは5.10以上と知ってがっかり。 らくだ本に載ってるTime::localtimeを使って愛想笑いでごまかすしかない。 その職場に5.10が入るのは10年後であった。 そしてcpanmやperlbrewを入れることは全面禁止されていた。 そんなんで仕事できるの?w 少なくとも効率が悪いね。 古い所が新しい所に あっさり追い抜かれる原因の一つである。 やっぱりモダンっていうのは供給者側の視点であって、利用者側の視点が 抜け落ちているな。残念。 利用者? 俺は利用者なんだが。 勉強しない奴に合わせる理由なんてないよ。 おれに合わせる必要はない。逆におれはおれでperl4が使われているところも あるから、がんばってlocaltimeで書くと。需要ベースで考えるしかない。 残念。 まあゆっくりやっていこう。モダンPerlにタイムリミットがあるわけでなし。 古いPerlにはタイムリミットあるけどな。 Perl4のサポート期間は10年ぐらい前に終わっていそうだけどw perl4の需要はすでに99.9%無い かろうじて残っているような需要に対応する必要はない。 >>161 Perl4に拘るのはせいぜいあなた個人あるいはお客様だけでありますように あなたの後をうける人、あなたの下につく人が不幸にならないことを祈りたいですなぁ windowsXp:ActivePerl環境で、perlをタスクスケジューラからバックグラウンドで実行させたい。 wperl.exeで実行すればよいとgoogle先生が教えてくれたんだけど、 ↓でやっても実行時にウィンドウが一瞬だけ開いてしまう。 C:\Perl\bin\wperl.exe sample.pl ↓だと↑より長くウィンドウが表示されるので、wperl.exeが効いていないわけではないっぽい。 C:\Perl\bin\perl.exe sample.pl うーん、なぜだ 誰か教えてください タスクスケジューラに設定したのはwperl.exeではなくバッチファイルと予想。 % pp --gui --verbose --output=sample.exe sample.pl でスクリプトをexeファイルにする。 ttp://search.cpan.org/~rschupp/PAR-1.005/lib/PAR/Tutorial.pod デバッガあててみたら↓が原因だった our $mech = new WWW::Mechanize(autocheck => 1); 手前は中で何やってるんだよ・・・ これ以上解析するのはめんどいが、 ウィンドウが表示されるのは耐え難いので 暇なときに中をのぞいてやる >>170 なんかすごそう 暇なときにやってみる ハッシュにblessしたオブジェクトのプロパティに対してlvalue属性つきのサブルーチンを用意しようとしています。 単純なアクセサなので呼び出されたときにAUTOLOADで補足してインストールするようにしています。 package Config; sub new { my ($class) = @_; bless { name => 'foo', }, $class; } sub AUTOLOAD { no strict 'refs'; my ($self) = @_; our $AUTOLOAD; if ($AUTOLOAD =~ /.*::(.*)\z/) { *$AUTOLOAD = sub : lvalue { my ($self) = @_; $self->{$1}; }; } goto &$AUTOLOAD; } sub DESTROY {} # 一応・・ package main; my $obj = Config->new; print $obj->name,"\n"; #=>'foo' $obj->name = 'bar'; print $obj->name,"\n"; #=>'bar' これは正常に動作しますが、mainパッケージの最初のprint文をコメントアウトした場合や 新たなプロパティをセットしようとした場合↓にはAUTOLOADが呼ばれず(AUTOLOADに行く前に?)エラーとなります。 $obj->update = '2012/4/8'; => Can't modify non-lvalue subroutine call at... 回避方法あるでしょうか? 投稿の際に行数を節約しようと修正した部分で動かないところがありました ×*$AUTOLOAD = sub : lvalue { my ($self) = @_; $self->{$1}; }; my $name = $1; *$AUTOLOAD = sub : lvalue { my ($self) = @_; $self->{$name}; }; package _Config; our $AUTOLOAD; sub new { bless { name => 'foo' }, shift } sub AUTOLOAD : lvalue { my ($self) = @_; (my $name = $AUTOLOAD) =~ s/.*://; my $sub = sub : lvalue { shift->{$name} }; { no strict 'refs'; *{$AUTOLOAD} = $sub; } $self->$name(); } sub DESTROY {} ここまで来ると普通のハッシュでよくね? あと、ネタすれなんで、本スレで質問しる。 >>174 おおーありがとうございます。AUTOLOAD自体をlvalueにするというのは気づきませんでした。 実際のプログラムはもう少し複雑ですが、正しく動作しています。 >>普通のハッシュでよくね? たしかにw 一応オブジェクトであってはほしいのですが、ハッシュ記法であれば何の不都合もなく $obj->{name} = 'bar'; と書けるわけですしね。 オマケでメソッド呼び出しも、と考えてたらハマってしまった格好です Apple 社の Mac OS X は、 ベースの一部 が FreeBSD です。Apple 社独自の ユーザインタフェースとともに、豊富なUNIX(R)基盤が取り入れられています。 >>171 事前にSTDOUT、STDERRをつぶして おいたらどーなる? ウインドウアプリで、そこに吐くと、 自動的に新規コンソールが開く、 とかだったような。 >>179 タスクのウィンドウが表示されなくなってうれしいものの、その他の ウィンドウも一切表示されなくなりました ;_; (D-SUB抜いて試しました) ∧∧ ( ゚Д゚ )∩ ⊂ ノ / 0 し´ えっ…と、 ここかな…、と ∧∧ ∧∧ ∩゚Д゚≡゚Д゚ ) `ヽ |) | __ |〜 ∪ ∪ ドスッ ∧∧.ミ. _ ( )┌┴┴┐ / つ.再開│ 〜 ./ └┬┬┘ ∪∪ ││_ε3 ゛゛゛゛ 最近のPerlでOOP用ライブラリってどんなのが主流ですか? Mooseだろ? 最近のライブラリでそれ以外使ってるの有るのか? Mooseが重いと思ったらMouseとAny::Mooseの組合せで代用もよし cpan でモジュールインストールしんたいんだけど install やら make やら make install やら全部 OK でたのに perldoc -l インストールしたモジュール名 やるとそんなのないて怒られる。 なんで? >>190 普通 perldoc -l DBI などは成功すると思うよ。 どうやって入れたの? モジュール名は? >>191 cpan>install Math::Vector::Real でいれて 全部 make やら make install やら全部 OK と出たが ないようだった。 cpanplus でインストールしてみたらいけたのだが原因がわからない。 Regexp::Assembleでマッチした時って 後方参照使えるの? perl 5.10.1 を使っています。 $str = "ABCD"; の時 @a = $str =~ /AB|CD/g; を実行すると、@a = ( "AB", "CD" ) と2つの要素が返されますが、 @a = $str =~ /AB|BC/g; だと、@a = ( "AB" ) しか帰ってきません。 (ABがマッチしたら、その次のCからサーチが始まるため) @a に ("AB", "BC") と、マッチするものすべてを得たい場合、 どうすればよいでしょうか。 なんか面白そうなお題なのでとりあえず最悪くさいものを作ってみた 素晴らしい人がボロクソにけなしてくれると期待しつつ投げてみる $str='ABCD'; { my $tmp=$str; while($tmp=~/AB|BC/){ push @a,$&; $tmp = $&.$'; $tmp=~s/^.//; } } print join' ',@a; >>194 場当たり的に色々試していたら @a = $str =~ /(?=(AB|BC))/g; で、(AB,BC) が取得できました。 (?= で、次の走査開始点を移動させないようにしたから、でしょうか? 一過性のモダンPerlはもう終わり。 らくだ本の発行によって本来のPerlへの回帰が始まっている。 本来のPerl=5.0でも動く範囲でしかコード書かない そういえばPerl5のスレってないね?やっぱりまだPerlの方が使われてるのかな? モダンPerl書いたひとはどうしてるの?最近見ないけど、やっぱりだめなの? まあソースをみて改良したりとか前向きな動機はほぼゼロで99.99%はこのメーカー 困らせてやれって開示請求なんだろうな。 USP(Universal Shell Programming)研究所は、UNIX/Linuxの基本思想である、 「小さな道具」(コマンド)を組み合わせて「問題を解決する」(シェルス クリプト)手法の研究・普及を行っています。この開発手法(ユニケージ 開発手法)は、従来のウォーターフォール型開発や、オブジェクト指向言 語・データベースソフトを用いた開発手法と一線を画し、圧倒的な開発生産 性 圧倒的な柔軟性を特徴としています。 ttp://www.usp-lab.com/ 本スレも、荒しに常駐されてぐだぐだだし、 WebProgの方も同じみたいに、スレ違いの会話が ぐだぐだ続いて終了したし、終りかなあ。 ここのスレの方がまだ真面にperlの話をしてた気がするよ。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる