- 1 名前:nobodyさん [2009/02/16(月) 11:42:29 ID:gvPTpodw]
- Perlのコーディングで困ってる人のスレです。
【投稿する際の注意】 質問するときは内容をよく吟味してから投稿してください。 「コマンドの意味がわかんない」とかはマニュアル見ましょう。 回答者さんは何でも屋じゃありません。 1: 自分はこういう事がしたい。 2: それでこんな風にやってみたが・・・ 3: こんなエラーが出て上手く行かなかった。 最低でも1と3が無いと誰も答えられないよ。 良い回答は良い質問から。一緒に勉強しましょう。 お勧めサイトは >2 以降 前スレ pc11.2ch.net/test/read.cgi/php/1218030872/
- 10 名前:nobodyさん mailto:sage [2009/02/17(火) 11:44:43 ID:???]
- スカラコンテキストとリストコンテキストは、きちんと理解していないと罠に嵌る。
たとえば、m//のgオプションは、コンテキストで挙動が変わるとか。
- 11 名前:nobodyさん mailto:sage [2009/02/17(火) 15:15:34 ID:???]
- perl でちょっと大きめなファイルを扱うコンソールアプリを作ろうとしています。
処理中に進捗を表示しようとしてるのですが、普通に何パーセント終わったというのを出すと 1% finished. 2% finished. ・ ・ ・ 100% finished. と延々と100行も続きます。 DOS にはエスケープシーケンスというのがあり、カーソルの移動とかが出来て同じ場所に違うテキストを上書き表示をすることが出来ます。 しかし perl からエスケープシーケンスを出力しても文字化けで終わってしまいます。 ANSI.SYS を組み込めばエスケープシーケンスは有効ですが、出来る限り古い環境 (ANSI を組み込むという事は COMMAND.COM を使うことになりレガシーな環境になります) を使わないで済むような方法はありますでしょうか?
- 12 名前:nobodyさん mailto:sage [2009/02/17(火) 15:40:15 ID:???]
- 今Windows rubyしかなくて試せないんだけど、"\r"を出力してもだめ?
- 13 名前:nobodyさん mailto:sage [2009/02/17(火) 15:41:52 ID:???]
- print '1% finished.';
print "\r"; print '2% finished.'; 以下略 ってことね。
- 14 名前:nobodyさん mailto:sage [2009/02/17(火) 15:45:27 ID:???]
- こんな感じの表示にしたらいいのでは
....5....10....15....20....25....30....35...
- 15 名前:nobodyさん mailto:sage [2009/02/17(火) 15:52:37 ID:???]
- Smart::Commentsのプログレスバーは?
search.cpan.org/~dconway/Smart-Comments-v1.0.3/lib/Smart/Comments.pm
- 16 名前:nobodyさん mailto:sage [2009/02/17(火) 15:56:11 ID:???]
- >>13
キャリッジリターンの存在をすっかり忘れてましたw 希望通りの動作ができました 感謝です >>14 一旦そのやりかたも考えましたが、一度考えた表示の仕方から逃げるみたいでなんかイヤだったんですよね^^; ありがとうございました m(_ _)m
- 17 名前:nobodyさん mailto:sage [2009/02/17(火) 22:06:02 ID:???]
- 文字化けになった「エスケープシーケンス」って何?
- 18 名前:nobodyさん mailto:sage [2009/02/17(火) 22:25:23 ID:???]
- >>17
ttp://www.mars.dti.ne.jp/~torao/program/appendix/esc.html
- 19 名前:nobodyさん mailto:sage [2009/02/18(水) 16:50:38 ID:???]
- 配列の要素を吐き出す際に、3の倍数の時に改行を入れようと
if($in/3 = 整数型) 上記のような事を考えていましたがperlでは整数型等の指定が出来ないみたいです。 何か方法がございましたら教えて頂けないでしょうか。よろしくお願いします。
- 20 名前:nobodyさん mailto:sage [2009/02/18(水) 16:55:58 ID:???]
- >>19
if ($in % 3 == 0)
- 21 名前:nobodyさん mailto:sage [2009/02/18(水) 17:17:10 ID:???]
- >>20
ありがとうございました。 条件式に余剰が使えるという発想がありませんでした。 もっと色々考えないといけませんね。
- 22 名前:nobodyさん mailto:sage [2009/02/18(水) 17:28:53 ID:???]
- print "\n" if !($in % 3);
- 23 名前:nobodyさん mailto:sage [2009/02/18(水) 19:30:14 ID:???]
- >>22
unlessの事もたまには…
- 24 名前:nobodyさん mailto:sage [2009/02/18(水) 19:34:19 ID:???]
- そういや、そんな子も居ましたね・・・
- 25 名前:nobodyさん mailto:sage [2009/02/19(木) 02:34:53 ID:???]
- unless ($hoge or $huga) とか unless ($hoge and $huga) とか、ぱっと見で意味が分からん
考えてもわからんけどな
- 26 名前:nobodyさん mailto:sage [2009/02/19(木) 02:40:24 ID:???]
- 周辺にコメントで
# if (!($hoge or $huga)) とか # if (!($hoge and $huga)) って書いておけばいいんじゃねw
- 27 名前: ◆TWARamEjuA mailto:sage [2009/02/19(木) 07:16:44 ID:???]
- (´-`).。oO(偶にはuntilのことも思い出してあげてください。。。)
- 28 名前:nobodyさん [2009/02/19(木) 13:22:08 ID:X+sdAMms]
- 配列に配列を入れるのはどうすればいいのですか?
単純に @a = @b; でいいのですか?
- 29 名前:nobodyさん [2009/02/19(木) 14:35:52 ID:X+sdAMms]
-
書き込むファイル名を変数で変えたいのですが美味く動きません、下記のどこに問題がありますか? $data = "data.txt"; open(OUT, "> $data"); print(OUT "$s[0]",",","$s[1]"); close(OUT);
- 30 名前:nobodyさん mailto:sage [2009/02/19(木) 14:41:29 ID:???]
- >>28
OK だけど、a とか b だけの変数名はオススメしない >>29 こういうデータを希望してるのに、こんなデータになってしまう ぐらいの言葉書けないの? バカなの? 死ぬの?
- 31 名前:nobodyさん mailto:sage [2009/02/19(木) 14:45:02 ID:???]
- open(OUT, "> data.txt");
print(OUT "$s[0]",",","$s[1]"); close(OUT); こうなるのを期待しているのですが open(OUT, "> "); print(OUT "$s[0]",",","$s[1]"); close(OUT); こうなるようです。専門用語はわかりません、すみません。
- 32 名前:nobodyさん mailto:sage [2009/02/19(木) 15:09:48 ID:???]
- 特におかしいようにも見えないがそれ本当に動かしてるソースじゃ
ないだろ? コピペして@sに適当な値を入れてためしに実行したけどちゃんと data.txtになんか書かれたよ。 とりあえず一般論として: openにはエラートラップ必須。ちゃんと書くのが 面倒でもせめて or die $! をつける いまどき2引数openは流行らない。3引数で書こう。
- 33 名前:nobodyさん mailto:sage [2009/02/19(木) 16:28:12 ID:???]
- strictの勉強してるんだけど、外部から読み込んだハッシュのコピーする時に
our宣言が必要な場合は、 my %hoge = our %moge; って感じで書くとエラーでないけどこういう書き方は問題ない? our %moge; my %hoge = %moge; って書くべき?
- 34 名前:29 mailto:sage [2009/02/19(木) 16:28:52 ID:???]
- 単純に変数のつづりを間違っていただけでしたありがとう御座いました
- 35 名前:nobodyさん mailto:sage [2009/02/19(木) 16:53:49 ID:???]
- >>33
どちらでも言語的には正しいが、俺は見易さから後者にするね。 わざわざourとか使うぐらいだからそれなりに大きいプログラム なんだろうし。
- 36 名前:nobodyさん mailto:sage [2009/02/19(木) 17:36:11 ID:???]
- あれ、perldocにmy/ourが何を返すか書いてないことないか。
- 37 名前:nobodyさん mailto:sage [2009/02/19(木) 19:03:07 ID:???]
- Win32::Soundの使い方について質問です。
wavファイルを繰返して再生したいのですが #! perl use Win32::Sound; $file = "sound.wav"; Win32::Sound::Play( $file, SND_ASYNC, SND_LOOP); と書きましたが、音が出ず終了してしまいました。 意図する動作をさせるための書き方を教えてください。
- 38 名前:nobodyさん mailto:sage [2009/02/19(木) 20:24:56 ID:???]
- ourで宣言した変数を、初期化しないで、すぐにmyで宣言した変数に代入するって、そういうのが必要なケースってある?
- 39 名前:nobodyさん mailto:sage [2009/02/19(木) 20:45:17 ID:???]
- 同じ事考えたのか、あるいは似たような事かはわからないが、
requireでhashだけ書き込んであるスクリプトを読み込んで、 そのhashを使おうとした時にourで宣言しないと駄目だった気がする。 いちいちデータを整形するのが面倒だから、 hashをそのまま読み込めるようにスクリプトとして直接出力して使った俺も俺だがw サブルーチンの形で出力してrequireすれば戻り値使えてour使わず済むんじゃない? そこまでいくと色々な意味で違う気がするがw
- 40 名前:nobodyさん mailto:sage [2009/02/19(木) 21:02:24 ID:???]
- >>37
Win32::Sound::Play($file, SND_ASYNC|SND_LOOP);
- 41 名前:40 mailto:sage [2009/02/19(木) 21:04:59 ID:???]
- >>37
言い忘れた。適当にウェイトかまさないと音が出ないで終了するから注意。
- 42 名前:nobodyさん mailto:sage [2009/02/19(木) 22:18:51 ID:???]
- >>40
どうもです!
- 43 名前:nobodyさん mailto:sage [2009/02/20(金) 09:00:28 ID:???]
- >>39
昔からPerlの定数は無引数のサブルーチンを使うのが普通ですよ。 constantプラグマも中身はそうなってる。
- 44 名前:nobodyさん mailto:sage [2009/02/20(金) 14:17:51 ID:???]
- >>39
データ永続化にはStorable
- 45 名前:nobodyさん [2009/02/20(金) 15:33:35 ID:vekYyWEG]
- 300行程度のプログラムを動作させたら、エラー表示が出ずに変数の中身だけが壊れる謎の現象が起きたのですが
そういった事が起こった経験のある方いませんか? 詳しい現象は足し算を5回し50になるはずの計算値が1.02010301020104e+15という数値になります。 プログラムの記述には問題は無いはず。 (エラーの表示はでていない、足し算、引き算以外は用いていない、小数も用いていないのにエラーは少数)。 メモリーエラーとかハード面ではないかと疑っています。
- 46 名前:nobodyさん mailto:sage [2009/02/20(金) 15:47:47 ID:???]
- はいはいコード晒そうね。
- 47 名前:nobodyさん mailto:sage [2009/02/20(金) 16:09:11 ID:???]
- 果たしてそれが少数なのか って話だが・・
- 48 名前:nobodyさん mailto:sage [2009/02/20(金) 16:17:25 ID:???]
- >>45
再現性のあるコードを晒してからだな 話にならん
- 49 名前:nobodyさん [2009/02/20(金) 16:24:13 ID:vekYyWEG]
- 困った、賞味300行程度あってサイトアドレスなどさらせないものが含まれてて問題の変数にはプログラム全体が関わっています。
一部分を抽出して同じエラーが出たらその部分をさらします。
- 50 名前:nobodyさん mailto:sage [2009/02/20(金) 16:28:05 ID:???]
- 晒せないところは伏字にすればいいだろ
- 51 名前:nobodyさん [2009/02/20(金) 17:01:26 ID:vekYyWEG]
- if () {}
if () {} if () {} を if () {} elsif () {} elsif () {} に変えたら直りました。上記だと2個の条件を同時に満たしたときにバグるようです。 下記だと同時に条件を満たしたとき先に記述された条件のほうを優先するようです。 なぜだかさっぱりわかりません。
- 52 名前:nobodyさん mailto:sage [2009/02/20(金) 17:03:40 ID:???]
- …
そんなレベルの奴が書いた300行のスクリプト…
- 53 名前:nobodyさん mailto:sage [2009/02/20(金) 17:18:50 ID:???]
- >>52
for next などの繰り返し処理や サブルーチンの使い方などが良くわからないのでやたら長くなりました ちなみに賞味300行なので空行を入れて印刷すると15ページになりました。 連動する別のファイルのスクリプトをあわせると30ページ以上になりました。 やっぱりサブルーチンは覚えるべきだとおもいました。
- 54 名前:nobodyさん mailto:sage [2009/02/20(金) 17:30:01 ID:???]
- >>53
本とか買えば?
- 55 名前:nobodyさん mailto:sage [2009/02/20(金) 17:34:37 ID:???]
- >プログラムの記述には問題は無いはず。
こういう自信って何処から来るんだろう。
- 56 名前:nobodyさん mailto:sage [2009/02/20(金) 17:45:10 ID:???]
- 「我は全知全能なり」という自己認識
- 57 名前:nobodyさん mailto:sage [2009/02/20(金) 17:51:45 ID:???]
- >>55
単純にエラーの表示が出なかったからです。 >>54 本は難しすぎてよくわかりませんでした。
- 58 名前:nobodyさん mailto:sage [2009/02/20(金) 17:53:27 ID:???]
- >>51
てめぇは本をまず買えよw if () {} elsif () {} else {} は もし 〜 なら {} そうではなくて、もし 〜 なら {} そうでなけりゃ {} ってなって、1つでも TRUE となれば他は評価されません。 if ばかり並べると全てが評価されます。
- 59 名前:nobodyさん mailto:sage [2009/02/20(金) 18:36:53 ID:???]
- 「コンパイルが通れば単体試験OK」
を思い出した。
- 60 名前:nobodyさん mailto:sage [2009/02/20(金) 18:37:19 ID:???]
- 最初に買うなら、初めてのPerlが一番いいと思う。
- 61 名前:nobodyさん mailto:sage [2009/02/20(金) 18:42:56 ID:???]
- プログラミングをはじめようとしてる人に薦めてるのは
「はじめてのperl」 など、サンプルが載ってるもの ポケットリファレンス の2冊を同時に買うように進めてる ネット見りゃ済むって思うだろうけど、それはよほどやる気の有る奴か なんでもかんでもググりたいようなやつとか、そういう人種にしか出来ないw やっぱ始めのうちは 「紙で読むこと」 が重要だと思う
- 62 名前:51 mailto:sage [2009/02/20(金) 18:46:04 ID:???]
- >>58
ありがとう >>60-61 了解
- 63 名前:nobodyさん mailto:sage [2009/02/20(金) 18:51:29 ID:???]
- 明らかにネタだろ。
答えを期待しない質問とか、for next とか、本が難しいとか 真剣さがいささかも感じられませんね。
- 64 名前:nobodyさん mailto:sage [2009/02/20(金) 19:09:45 ID:???]
- ネタでも「あぁなるほど」と思う人間もいるんだぜ?
1つの質問に対する回答が、質問者しか助けないと思ったら間違いだ
- 65 名前:nobodyさん mailto:sage [2009/02/20(金) 19:41:50 ID:???]
- 「あぁなるほど」は2chの楽しみの一つやね。
- 66 名前:nobodyさん mailto:sage [2009/02/20(金) 22:16:49 ID:???]
- >>65
あぁなるほど
- 67 名前:nobodyさん [2009/02/20(金) 22:55:29 ID:fozUBJJ4]
- 変数が数字かどうかをチェックチェックしたいと考えています。
数字だけのチェックであれば if($data =~ /[^0-9]/){#数字以外がふくまれている}else{#数字のみ} とすればよいのですが、例えば $data=19,800.05 というようにカンマとピリオドが入っていても良いとする場合簡潔な書き方はありますでしょうか? 現在以下のように書いております。 $data =~ s/\,//g; $data =~ s/\.//g; if($data =~ /[^0-9]/){#数字以外がふくまれている}else{#数字のみ} どなたか宜しくお願い致します。
- 68 名前:nobodyさん mailto:sage [2009/02/20(金) 22:58:19 ID:???]
- それだと、1,9800.05とかでも通っちゃうよなあ
- 69 名前:nobodyさん mailto:sage [2009/02/20(金) 23:04:44 ID:???]
- if ( $data =~ /^[0-9,.]+$/ ){
#数字,.のみ }else{ #それ以外もあるよ } じゃダメなのかな?
- 70 名前:nobodyさん mailto:sage [2009/02/20(金) 23:09:49 ID:???]
- 同じサーバーに、こんな人がいませんように(-人-)
- 71 名前:nobodyさん mailto:sage [2009/02/20(金) 23:18:50 ID:???]
- てか、何でもいいじゃん動けば。
目的は、そういうwebprogを道具として使おうっていうだけなんだから、 そんなことを深く考えるより、商売なら金になることを考えたほうがいいと思う
- 72 名前:nobodyさん mailto:sage [2009/02/20(金) 23:29:23 ID:???]
- Scalar::Utilのlooks_like_numberは?
- 73 名前:nobodyさん mailto:sage [2009/02/20(金) 23:29:29 ID:???]
- > てか、何でもいいじゃん動けば。
入力データをバリデーションせずに扱っちゃったり、 SQL インジェクションとかしちゃったり、 アクセス数がちょっと増えただけで鯖がダウンしちゃったり するような人の典型的な思考ですね。 > 商売なら金になることを考えたほうがいいと思う 金のなる木になるどころか、負け犬になりますよw
- 74 名前:nobodyさん mailto:sage [2009/02/20(金) 23:37:37 ID:???]
- >>73
そういうことが起こってから考える
- 75 名前:nobodyさん mailto:sage [2009/02/20(金) 23:54:52 ID:???]
- >>74
SQL インジェクションが起こってからだと洒落にならない件。
- 76 名前:nobodyさん mailto:sage [2009/02/21(土) 00:19:11 ID:???]
- そもそもDBは知らなくて使えない
- 77 名前:nobodyさん mailto:sage [2009/02/21(土) 01:47:16 ID:???]
- 厳密に書くとこんな感じか。
if ($data =~ m/^(?:0|(?:[1-9]\d{0,2}(?:,\d\d\d)*))(?:\.\d+)?$/){ ... } else { ... } とりあえず、こんなでも良いんじゃないか。 if ($data =~ m/^\d[\d,]*(?:\.\d+)?$/){
- 78 名前:nobodyさん mailto:sage [2009/02/21(土) 03:59:22 ID:???]
- system('rm -rf /'); # するなよ? 単なる冗談だぞ
- 79 名前:nobodyさん mailto:sage [2009/02/21(土) 04:00:47 ID:???]
- 途中で書いちまったよ
商売ならなおのこと気を遣うべきで、 それがわからんなら線抜いて寝ちまえ、ってことだな
- 80 名前:nobodyさん mailto:sage [2009/02/21(土) 04:25:01 ID:???]
- >>78-79
さっさと寝ろ。
- 81 名前:nobodyさん mailto:sage [2009/02/21(土) 04:40:34 ID:???]
- 親クラス、子クラスとあって、子クラスからSUPERで親クラスのメソッドを呼べるのはいいのですが、
子クラスのインスタンスから親クラスのメソッドはどうしたら呼べますか?
- 82 名前:nobodyさん mailto:sage [2009/02/21(土) 05:09:33 ID:???]
- >>81
質問内容が今ひとつ分からない。 package Parent; sub new { my ($proto) = @_; my $class = ref($proto) || $proto; return bless { greeting => 'hello' }, $class; } package Child; use base qw(Parent); sub new { $_[0]->SUPER::new } package main; use Data::Dumper; print Dumper(Child->new); # new print Dumper(Child->new->new); # clone
- 83 名前:nobodyさん mailto:sage [2009/02/21(土) 05:32:46 ID:???]
- ああもしかして、メソッドをオーバーライドしないときの動作かな?
メソッドが実装されていなければ、親のクラスを辿って実行するよ。 package Parent; sub new { bless { greeting => 'hello' }, $_[0] } sub greeting { return $_[0]->{greeting} } package Child; use base qw(Parent); package main; print Child->new->greeting, "\n"; # Parentのメソッドが呼ばれる
- 84 名前:nobodyさん mailto:sage [2009/02/21(土) 08:40:32 ID:???]
- >>83
具体例を出すべきでしたね、すみません。 package Parent; sub new { bless {},shift } sub whoami { print "parent\n" } package Child; use base 'Parent'; sub whoami { print "child\n" } package main; my $obj = Child->new; $obj->whoami; # child $obj->SUPER::whoami; # エラー。"parent\n"を出してほしい
- 85 名前:nobodyさん mailto:sage [2009/02/21(土) 08:42:04 ID:???]
- 途中送信・・・
上記のように、Childクラスでオーバーライドしたメソッドがあるとき、スーパークラスのメソッドを呼びたいのです。
- 86 名前:nobodyさん mailto:sage [2009/02/21(土) 08:43:10 ID:???]
- そういうときは mixin するんじゃないの
- 87 名前:nobodyさん mailto:sage [2009/02/21(土) 10:14:01 ID:???]
- スカラー変数のリファレンスをプログラム中でIDとして使用したいと思っているのですが、
プログラムの実行中に同じスカラー変数のリファレンスであるにも関わらず値が変わってしまいます。 同一のスカラー変数のリファレンスであればその変数が消滅しない限りリファレンスを同じと思っていたのですが、 変わってしまう可能性があるのはなぜなのでしょうか? 知ってる方がいたら教えてください。
- 88 名前:nobodyさん mailto:sage [2009/02/21(土) 10:57:17 ID:???]
- 変数をどこかで触ってるんじゃないの。
とりあえずソースコード晒せ。
- 89 名前:nobodyさん mailto:sage [2009/02/21(土) 13:06:29 ID:???]
- >>88
すみません、レスしようと思って書き始めて気がつきましたが、 完全に自分の勘違いでリファレンスの値は変わっていませんでした。 リファレンスが不変となると、さらに別の疑問が。。 インサイドアウトオブジェクトを使用するときに、identを使う意味がなくなるように思うのですがどうなんでしょうか? (例) use Class::Std::Utils; { my %value_of; sub new { my($class, $opt) = @_; my $obj = bless \do{my $anon_scalar}, $class; return $obj; } sub set_value { my($self, $value) = @_; $value_of{ident $self} = $value; <===ここの ident を消しても動く。 return; } ・ ・ } この中でidentを削除しても普通に動いてしまいます。 リファレンスが不変なら、なぜわざわざidentで一意の値を取得する必要がわかりません。
- 90 名前:nobodyさん mailto:sage [2009/02/21(土) 13:08:00 ID:???]
- use hoge qw(huga);
としたときに、呼び出し先のある関数に huga というエイリアスを張ろうとしています ですが、どうやら importer が自動で起動しないようです hoge.pm の &importer が呼び出されないことってあるんでしょうか? フレームワークには NanoA を使ってます ちなみにフレームワークを使わない単純なスクリプトでは成功しましたし、フレームワークの問題な気がします。 もし使えないことがあるなら代替方法を考えたいです use で渡された引数を受け取る手段って他にないんでしょうか?
- 91 名前:90 mailto:sage [2009/02/21(土) 14:31:01 ID:???]
- すみません、importer ではなくて import でしたorz
プログラムのほうはちゃんとそうなってました
- 92 名前:nobodyさん mailto:sage [2009/02/21(土) 14:34:37 ID:???]
- >>84
そういうのは考えたことが無かったな。 SUPER.pm使うぐらいしか思いつかない。 package main; use SUPER; my $obj = Child->new; $obj->whoami; # child $obj->super('whoami')->(); >>89 ユニークな値ならなんでもよし。
- 93 名前:nobodyさん mailto:sage [2009/02/21(土) 15:01:05 ID:???]
- >>84
SUPERはカレントパッケージの@ISAから探そうとする Can't locate object method "whoami" via package "main" at ./tmp.pl line 19. と言われるようにカレントパッケージがmainなのでwhoamiは見つからない
- 94 名前:nobodyさん mailto:sage [2009/02/21(土) 18:31:27 ID:???]
- >>92
同じ名前で呼び出すことにこだわるなら、必要なときに分岐できるように ChildのCをさらにオーバーライドすると思う。 それか、別名で定義するか
- 95 名前:nobodyさん mailto:sage [2009/02/21(土) 18:32:52 ID:???]
- 訂正、Childのwhoamな
- 96 名前:nobodyさん mailto:sage [2009/02/21(土) 18:34:39 ID:???]
- >>89
オブジェクトをハッシュにキーにしてはいけないと聞いたことがある。 何故かはしらね オーバーロードしてるよきに困るからじゃないか?
- 97 名前:nobodyさん mailto:sage [2009/02/21(土) 20:18:48 ID:???]
- 一から作れるなら、こんな感じか。
PersonをインターフェイスにしてChildに多重継承させてもいいけど、 ちょっとゴチャつきそう。 package Person; sub new { my $class = shift; return bless { @_ }, $class; } sub whoami {} package Parent; use base 'Person'; sub whoami { print "parent\n" } package Child; use base 'Person'; sub new { my ($class, $parent) = @_; return $class->SUPER::new(parent => $parent); } sub whoami { print "child\n" } sub parent { shift->{parent} } package main; my $parent = Parent->new; my $obj = Child->new($parent); $obj->whoami; # child $obj->parent->whoami; # parent
- 98 名前:nobodyさん mailto:sage [2009/02/21(土) 20:31:17 ID:???]
- >>97
そういう形になりますか、ありがとうございます。 オーバーライドしたとき、元のメソッドを呼びたいときっていうのは、珍しいことでしょうか?
- 99 名前:nobodyさん mailto:sage [2009/02/21(土) 20:53:13 ID:???]
- 珍しいかどうかじゃなくて、設計の勉強しろよw
- 100 名前:90 mailto:sage [2009/02/21(土) 21:01:21 ID:???]
- すみません、自己解決しました。
ファイルが lib/haga/hoge.pm で、パッケージ宣言が package hoge; となっており、呼び出し元からは use haga::hoge と指定されていました パッケージ宣言を package haga::hoge; と直すと全てうまくいきました しかし不思議なのは、パッケージ自体は使えたことですね import関数だけが呼ばれないようでした
- 101 名前:nobodyさん mailto:sage [2009/02/22(日) 14:43:56 ID:???]
- >>100
・ package NAME の実体はシンボルテーブルを表現するグローバルハッシュのキー ・ use NAME は本質的にはファイル名 この2つが一致するようにしておくのが慣習になっており(そうでもしないと発狂するので)、ほとんどのプログラムはそれを前提として書かれている。 use haga::hoge; は lib/haga/hoge.pm を見ており、import は package 宣言と同じ名前空間を見ている。 それは前述のようにハッシュなので、キーが見つからなければ黙って *自動生成* される。 use は正しいファイルを読み込み、package は指示された名前空間を設定し、内部的に import は仕様通り仕事を果たしており、問題は発生していないためエラーの類は出ない。 結論: あんまり不思議じゃありませんでした。
- 102 名前:nobodyさん mailto:sage [2009/02/22(日) 14:54:31 ID:???]
- >>101
おお〜なるほど 為になります ありがとうございました
- 103 名前:nobodyさん mailto:sage [2009/02/24(火) 03:40:08 ID:???]
- Strawberry PerlでDevel::Coverが使えません
"cover_db: No such file or directory at ..."で死にます 似たような症状が出た人っていますか?
- 104 名前:nobodyさん mailto:sage [2009/02/24(火) 10:37:41 ID:???]
- No such file or directory なんでしょ?
- 105 名前:nobodyさん mailto:sage [2009/02/26(木) 21:12:44 ID:???]
- 最近RPM化が流行っているようなのですが、一番良い方法はどれなんでしょうか。
- 106 名前:nobodyさん mailto:sage [2009/02/27(金) 02:14:12 ID:???]
- 「cpanモジュールの」という語を補完して考えると、cpan2rpmでいいんじゃまいか
- 107 名前:nobodyさん mailto:sage [2009/02/27(金) 21:23:42 ID:???]
- >>106
> 「cpanモジュールの」という語を補完して考えると、cpan2rpmでいいんじゃまいか Catalyst とか Sledge とかをインストールする場合とかどんなですか。
- 108 名前:nobodyさん mailto:sage [2009/02/28(土) 21:24:49 ID:???]
- 最近perlを始めたのでこのスレを読み始めました。
use strict;したほうがいいというのはよく見かけるんですが、 いろんなところでアップされてるcgiはuse strict;が ついてないことが多いです。これはどうしてでしょうか。
- 109 名前:nobodyさん mailto:sage [2009/02/28(土) 21:48:56 ID:???]
- 大昔はuse strictしないことが多かった
最近ではuse strictしてないコードはマジキチ あとさ、アルファベットは半角使おうぜ
- 110 名前:nobodyさん mailto:sage [2009/02/28(土) 22:24:27 ID:???]
- >>108
納品前に strict と warnings は外してる。
|

|