X



【モダン推奨】Perlについての質問箱 50箱目

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2012/01/21(土) 10:56:39.03
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辺り


0106デフォルトの名無しさん
垢版 |
2012/03/17(土) 00:38:01.50
プログラムはプログラマだけのものじゃなくて、依頼者や使用者のものでも
あって、依頼者視点での保守、使用者視点での保守をしていかないとならない。
その場限りのソフトウェアならモダンPerlでも構わないかもしれないが、
保守するのであれば、流行で作ったものは時間が経つと「変な髪形」になっ
てしまう。それが分かってないのは、おまいのしりが青い証拠だ。
0109デフォルトの名無しさん
垢版 |
2012/03/17(土) 00:54:53.13
>>106
受託ってやつ?
ウェブサービス作ってるんじゃないの?

俺にとってプログラムは自社のもので、自分たちが
開発しやすいように最善の方法を目指してるんだけどさ、
客に足を引っ張られるのって、ちょっと可哀想に思う。
0111デフォルトの名無しさん
垢版 |
2012/03/17(土) 02:46:55.30
依頼者は何も指定しなかった場合、
古いPerllで作ろう。

それが依頼者のためになるんだ。
0113デフォルトの名無しさん
垢版 |
2012/03/17(土) 03:04:12.17
>>106
客が要求するのがモダンではないと決めてかかってる。
客がモダンを要求したらどうするつもりだ?
単にお前は、モダンPerlが書けないだけ。
0115デフォルトの名無しさん
垢版 |
2012/03/18(日) 01:23:00.96
逆になんでモダンにこだわるの?変なとこにこだわって成果がでないんじゃ
本末転倒じゃないの?成果とモダンとどっちが優先なの?
0117デフォルトの名無しさん
垢版 |
2012/03/18(日) 03:15:04.19
>>115
モダンを諦めれば、成果が出るとでも思ってるの?

むしろ、モダンを使う=成果が出る
なんだが。
0118デフォルトの名無しさん
垢版 |
2012/03/18(日) 07:42:28.32
一旦モダンって名前を頭から消して普通にPerlコードを書かせてみるとする
そいつのコードがKENTみたいなやつだとして、それが他の人が誰でも保守できるようなシロモノになるとは到底思えない
0122デフォルトの名無しさん
垢版 |
2012/03/20(火) 19:21:50.84
これまでの積み重ねがないと例えば会社が終わりになったときに技術的にも
全てを失うことになるよ。
0124デフォルトの名無しさん
垢版 |
2012/03/20(火) 20:23:18.91
わざわざ不便なものを選んで苦しむのが積み重ねか
古いんだよそんなスポ根的発想は!
0125デフォルトの名無しさん
垢版 |
2012/03/20(火) 22:46:00.37
青尻くんは、プログラムは実現したいこととその解決方法の両方を記述する
ためのものだってこと、ちゃんと理解してるの?そうか、してないのかまだ
青いのか。
0126デフォルトの名無しさん
垢版 |
2012/03/20(火) 23:19:46.15
普通にわかれよ。
モダンperlがいいものだとしたら普通に普及する。
駄目なもので無理やり普及させたいのには訳がある。

本や講演などで稼ぎたい人もいるってこった。
0132デフォルトの名無しさん
垢版 |
2012/03/24(土) 12:30:46.46
かわいいの♪ステマつげるぅ〜♪
いーないーな♪それいいなぁー♪
つげるタイプの魔法だょ〜♪
0133デフォルトの名無しさん
垢版 |
2012/03/25(日) 07:17:46.89
ステルスマーケティング用語か。個々の技術とまったく関係ない話だな。
要は互換性のなさをごまかそうとしているんだな。ばればれだぞw
0135デフォルトの名無しさん
垢版 |
2012/03/27(火) 21:08:40.38
長期に渡る保守が予想されるソフトウェアは一時期の流行に合わせて
書くのではなく、将来を見据えた記述をするのが正解。
0136デフォルトの名無しさん
垢版 |
2012/03/27(火) 21:29:13.75
意固地に10年前の書き方を押し付ける必要はない
今使える書き方と今使えるモジュールで書けばいい
0137デフォルトの名無しさん
垢版 |
2012/03/28(水) 05:29:06.98
今使えない書き方で書けと読めてるお前がおかしい
ワンライナーや売り切り逃げ切りのソフトならお好きにどうぞ
0138デフォルトの名無しさん
垢版 |
2012/03/28(水) 06:14:36.83
モダンは互換性がないのと将来のメンテナンスが不安なのが弱点か。
モダンゆえに時間軸の過去も未来もだめってことか。それは困る。
0140デフォルトの名無しさん
垢版 |
2012/03/28(水) 06:46:19.55
>>138
>互換性がない
何と?
>将来のメンテナンスが不安
将来のメンテナンスを考えると何を使えばいいの?
0141デフォルトの名無しさん
垢版 |
2012/03/28(水) 21:48:50.07
素のPerlや標準モジュールが思いつかないあたり、いい、すごくいいよ、
青尻くん。だんだん気に入ってきた。
0142デフォルトの名無しさん
垢版 |
2012/03/28(水) 22:59:03.49
たとえば標準モジュールの例としては、
http://perldoc.perl.org/index-modules-A.html

・文字コード関係
Encodeモジュール
(Jcodeは×)

・日付関係
Time::Piece、Time::Seconds
(もろもろある日付モジュールは×)

・オブジェクト指向関係
Object::Accessor、Class::Struct

データベース関係(ファイル以外)は、何もありません。

>>141が言っていることはこういう意味です。
0143デフォルトの名無しさん
垢版 |
2012/03/28(水) 23:57:43.96
がんばって標準モジュールを列記してみたものの、やっぱり素のPerlは
思いつかないところ、青尻くん、すばらしい。すごくいい。

「モダンPerl使いなのでlocaltimeは使えません。」キリッ

職場で一度言ってみたい。。。試用期間で終わるだろうけどw
0146営利利用に関するLR審議中@詳細は自治スレへ
垢版 |
2012/03/29(木) 02:28:11.13
> 素のPerlや標準モジュールが思いつかないあたり

って言っておきながら、標準モジュールをあげたら今度は

> がんばって標準モジュールを列記してみたものの、やっぱり素のPerlは
> 思いつかないところ

もしかして、自分の知らない標準モジュールばっかりで
方向転換したのかいな?
0150デフォルトの名無しさん
垢版 |
2012/03/30(金) 21:55:40.66
なんだ、そうだったのか。てっきりlocaltimeも満足に使えないのかと
思ってたよ。失敬、失敬、こりゃ失敬。
0151営利利用に関するLR審議中@詳細は自治スレへ
垢版 |
2012/03/31(土) 00:55:04.25
念のため言っとくがlocaltimeから
リストコンテキストで取得するのは古いやり方だからな。

最近のやり方はlocaltimeからTime::Pieceオブジェクトを返す方法。
もちろん標準モジュール。
0152デフォルトの名無しさん
垢版 |
2012/03/31(土) 01:09:11.56
で、Time::Pieceのインタフェースってlocaltimeと互換性あるの?
例えばリストコンテキストで使うと同じように値が戻ってくるの?
0155デフォルトの名無しさん
垢版 |
2012/03/31(土) 02:46:36.36
職場にようやく5.8が入ったんでよーし、これからはモダンPerlだぞ!と
意気込んできたらTime::Pieceは5.10以上と知ってがっかり。
らくだ本に載ってるTime::localtimeを使って愛想笑いでごまかすしかない。
0159デフォルトの名無しさん
垢版 |
2012/03/31(土) 12:09:29.38
やっぱりモダンっていうのは供給者側の視点であって、利用者側の視点が
抜け落ちているな。残念。
0161デフォルトの名無しさん
垢版 |
2012/03/31(土) 15:55:14.37
おれに合わせる必要はない。逆におれはおれでperl4が使われているところも
あるから、がんばってlocaltimeで書くと。需要ベースで考えるしかない。
残念。
0168営利利用に関するLR審議中@詳細は自治スレへ
垢版 |
2012/04/01(日) 12:23:36.71
windowsXp:ActivePerl環境で、perlをタスクスケジューラからバックグラウンドで実行させたい。
wperl.exeで実行すればよいとgoogle先生が教えてくれたんだけど、
↓でやっても実行時にウィンドウが一瞬だけ開いてしまう。
C:\Perl\bin\wperl.exe sample.pl

↓だと↑より長くウィンドウが表示されるので、wperl.exeが効いていないわけではないっぽい。
C:\Perl\bin\perl.exe sample.pl

うーん、なぜだ
誰か教えてください
0170デフォルトの名無しさん
垢版 |
2012/04/02(月) 01:47:27.43
% pp --gui --verbose --output=sample.exe sample.pl
でスクリプトをexeファイルにする。

ttp://search.cpan.org/~rschupp/PAR-1.005/lib/PAR/Tutorial.pod
0171168
垢版 |
2012/04/03(火) 00:54:00.46
デバッガあててみたら↓が原因だった
our $mech = new WWW::Mechanize(autocheck => 1);

手前は中で何やってるんだよ・・・
これ以上解析するのはめんどいが、
ウィンドウが表示されるのは耐え難いので
暇なときに中をのぞいてやる

>>170
なんかすごそう
暇なときにやってみる
0172営利利用に関するLR審議中@詳細は自治スレへ
垢版 |
2012/04/07(土) 01:50:55.99
ハッシュに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...

回避方法あるでしょうか?
0173172
垢版 |
2012/04/07(土) 02:55:30.64
投稿の際に行数を節約しようと修正した部分で動かないところがありました

×*$AUTOLOAD = sub : lvalue { my ($self) = @_; $self->{$1}; };

my $name = $1;
*$AUTOLOAD = sub : lvalue { my ($self) = @_; $self->{$name}; };
0174営利利用に関するLR審議中@詳細は自治スレへ
垢版 |
2012/04/07(土) 17:14:55.67
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 {}

ここまで来ると普通のハッシュでよくね?
あと、ネタすれなんで、本スレで質問しる。
0175営利利用に関するLR審議中@詳細は自治スレへ
垢版 |
2012/04/07(土) 19:05:08.57
在日韓国・朝鮮人や,
働かないで金をせびるクズ人間を取り締まってくれや。
追うも国士館,追われるも国士館頼むぞ。

http://www2.ocn.ne.jp/~hirohito/photo/s6116.jpg
http://www.masuko.co.jp/school/img/otona/4men_2.jpg
http://keiten.net/image/070804kokushi/kekki.htm

規律ある大学生活
http://daiminsya.exblog.jp/2750544/

国士舘OBの回想
http://www.youtube.com/watch?v=LBtSNMhree4&feature=related

国士舘アルバム
http://www.youtube.com/watch?v=5vZmce3qPGg&feature=related

0176172
垢版 |
2012/04/07(土) 23:31:22.35
>>174
おおーありがとうございます。AUTOLOAD自体をlvalueにするというのは気づきませんでした。
実際のプログラムはもう少し複雑ですが、正しく動作しています。

>>普通のハッシュでよくね?
たしかにw
一応オブジェクトであってはほしいのですが、ハッシュ記法であれば何の不都合もなく
$obj->{name} = 'bar';
と書けるわけですしね。
オマケでメソッド呼び出しも、と考えてたらハマってしまった格好です
0179デフォルトの名無しさん
垢版 |
2012/04/14(土) 14:38:18.13
>>171
事前にSTDOUT、STDERRをつぶして
おいたらどーなる?

ウインドウアプリで、そこに吐くと、
自動的に新規コンソールが開く、
とかだったような。
0180デフォルトの名無しさん
垢版 |
2012/04/17(火) 22:06:08.88
>>179
タスクのウィンドウが表示されなくなってうれしいものの、その他の
ウィンドウも一切表示されなくなりました ;_;
(D-SUB抜いて試しました)
0183デフォルトの名無しさん
垢版 |
2012/04/29(日) 06:35:31.99
再開
0184デフォルトの名無しさん
垢版 |
2012/04/29(日) 06:52:54.09

  ∧∧
  ( ゚Д゚ )∩
 ⊂   ノ
  /  0
  し´
えっ…と、
ここかな…、と
 ∧∧ ∧∧
∩゚Д゚≡゚Д゚ )
`ヽ     |)
  | __ |〜
  ∪  ∪
      ドスッ
  ∧∧.ミ. _
  (   )┌┴┴┐
  /   つ.再開│
〜   ./ └┬┬┘
 ∪∪    ││_ε3
     ゛゛゛゛
0190デフォルトの名無しさん
垢版 |
2012/05/15(火) 18:28:38.45
cpan でモジュールインストールしんたいんだけど
install やら make やら make install やら全部 OK
でたのに
perldoc -l インストールしたモジュール名
やるとそんなのないて怒られる。
なんで?
0192デフォルトの名無しさん
垢版 |
2012/05/16(水) 07:35:09.36
>>191
cpan>install Math::Vector::Real
でいれて
全部 make やら make install やら全部 OK と出たが
ないようだった。

cpanplus でインストールしてみたらいけたのだが原因がわからない。
0193デフォルトの名無しさん
垢版 |
2012/05/16(水) 19:04:48.32
Regexp::Assembleでマッチした時って
後方参照使えるの?
0194デフォルトの名無しさん
垢版 |
2012/06/20(水) 00:40:13.88
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") と、マッチするものすべてを得たい場合、
どうすればよいでしょうか。

0195デフォルトの名無しさん
垢版 |
2012/06/20(水) 01:29:26.87
なんか面白そうなお題なのでとりあえず最悪くさいものを作ってみた
素晴らしい人がボロクソにけなしてくれると期待しつつ投げてみる

$str='ABCD';
{
my $tmp=$str;
while($tmp=~/AB|BC/){
push @a,$&;
$tmp = $&.$';
$tmp=~s/^.//;
}
}
print join' ',@a;
0196194
垢版 |
2012/06/20(水) 02:51:53.45
>>194
場当たり的に色々試していたら
@a = $str =~ /(?=(AB|BC))/g;
で、(AB,BC) が取得できました。
(?= で、次の走査開始点を移動させないようにしたから、でしょうか?
0197デフォルトの名無しさん
垢版 |
2012/07/15(日) 14:22:38.65
一過性のモダンPerlはもう終わり。
らくだ本の発行によって本来のPerlへの回帰が始まっている。
0201デフォルトの名無しさん
垢版 |
2012/07/20(金) 06:04:14.97
まあソースをみて改良したりとか前向きな動機はほぼゼロで99.99%はこのメーカー
困らせてやれって開示請求なんだろうな。
0203デフォルトの名無しさん
垢版 |
2012/07/25(水) 02:06:14.30
USP(Universal Shell Programming)研究所は、UNIX/Linuxの基本思想である、
「小さな道具」(コマンド)を組み合わせて「問題を解決する」(シェルス
クリプト)手法の研究・普及を行っています。この開発手法(ユニケージ
開発手法)は、従来のウォーターフォール型開発や、オブジェクト指向言
語・データベースソフトを用いた開発手法と一線を画し、圧倒的な開発生産
性 圧倒的な柔軟性を特徴としています。

ttp://www.usp-lab.com/
0204デフォルトの名無しさん
垢版 |
2012/07/30(月) 19:45:03.06
本スレも、荒しに常駐されてぐだぐだだし、
WebProgの方も同じみたいに、スレ違いの会話が
ぐだぐだ続いて終了したし、終りかなあ。

ここのスレの方がまだ真面にperlの話をしてた気がするよ。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況