トップページ⇒php
1001コメント304KB

Perlコーディング初心者質問スレ Part 46

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/01/18(水) 02:17:46ID:???
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
0116nobodyさん2006/01/22(日) 01:37:04ID:???
2つ質問があります。分かる方、答えていただけたら幸いです。
これらのことはPERLで可能ですか?

PERLでプログラムを作って条件にあわせて、メールアドレス宛に
いってほしいURLを生成して送ります。
↓
そのメールが送ってきた人がそのURLをクリックして、リンク先にいくと
結果が載っていて、その結果は多数のHTMLのページをスタイルシートを利用して
1ページにまとめて組み合わせたものになっている。

というようなことは出来ますか?
簡単に言えば、

ページ1で山田さんがAとBとCの中からAを選び、DとEとFの中からEを選びます。
↓
すると、山田さん宛にAとEの内容が記述されたページのURLが届きます。
↓
そのURL先のページもcgiによって生成される(メールからAとEの変数を渡すことになるのかな?)
↓
その表示されたページは複数のHTMLページをあらかじめ作っておいて、それらを呼び出して、組み合わせで出来上がる。この場合AとEを呼び出す

01171162006/01/22(日) 01:38:53ID:???
もう1つの質問ですが、

あらかじめHTMLページを用意しておいて、変数にしたいところのタグだけ $HOGEHOGE のようにしておいて、
cgiのほうに読み込み、$HOGEHOGEの変数の値を適用させて表示することって可能ですか? 
0118nobodyさん2006/01/22(日) 01:42:24ID:???
>116
>そのメールが送ってきた人がそのURLをクリックして、
ちゃんとした日本語文で書いてくれ
01191162006/01/22(日) 01:42:52ID:???
>>116の そのURL先のページもcgiによって生成される(メールからAとEの変数を渡すことになるのかな?)
の部分ですが、URLから判定させること出来ないですか?

その行き先のURLは一律で http://www.hogehogehoge.com/hoge.cgi というように決まっていて
hoge.cgi以降にAとEが表示されるように

http://www.hogehogehoge.com/hoge.cgi?A&E

みたいなURLを先ほど記述したメールで送っていて、これをクリックすると
hoge.cgiがAのhtmlとEのhtmlを組み合わせればいいということを判定して
これらをスタイルシートを使って組み合わせて1ページで出力するということです。

説明が分かりづらくてごめんなさい。
0120nobodyさん2006/01/22(日) 01:43:23ID:???
>>118
説明力不足でごめんなさい _(。。)_
0121nobodyさん2006/01/22(日) 02:09:21ID:???
>>115
/\Q$value\E/
という話ではなくて?
0122nobodyさん2006/01/22(日) 02:12:52ID:???
質問させてください。

''(0バイト文字列)または'.'または'..'と言う文字列に「のみ」
合致する正規表現ってどう書けばいいですか?
「〜を含む文字列」なら自力でも書けそうな気がするんですが・・・orz
0123nobodyさん2006/01/22(日) 02:21:12ID:???
>>122
/^\.?\.?$/
0124nobodyさん2006/01/22(日) 02:28:23ID:???
>>116 両方とも余裕で可能。END
0125nobodyさん2006/01/22(日) 02:34:09ID:???
>>124
どういった仕組みを利用すれば可能ですか?
0126nobodyさん2006/01/22(日) 02:49:48ID:???
CGI の初歩を勉強する
Perl 以前の問題

逆に聞きたいが、「スタイルシートを使ってページを組み合わせる」と自分で
書いているが、これは XSLT か? 「スタイルシートを使って組み合わせる」
という方法はいったいどこで聞きかじったんだ?
0127nobodyさん2006/01/22(日) 03:35:43ID:???
>>114
何でこんな的外れなレスが返ってくんの?
0128nobodyさん2006/01/22(日) 03:59:08ID:???
スタイルシートで2ページを合体って出来るもの?
0129nobodyさん2006/01/22(日) 04:01:07ID:???
>>126,128
すいません、インラインフレームでした。。。
もしくはphp利用か
0130nobodyさん2006/01/22(日) 06:28:00ID:???
ページ1で山田さんがAとBとCの中からAを選び、DとEとFの中からEを選びます。
・htmlのselectでも使って選択させ、その内容をcgiに発射
↓
すると、山田さん宛にAとEの内容が記述されたページのURLが届きます。
・cgiで受け取った情報を元にURL作ってsendmailかなんかでメール発射
↓
そのURL先のページもcgiによって生成される(メールからAとEの変数を渡すことになるのかな?)
・受け取ったURLを押すとcgiが起動
↓
その表示されたページは複数のHTMLページをあらかじめ作っておいて、それ
AとEのhtmlを読み込み”s/$HOGEHOGE/なにか/g;”かなんかで変更して一緒に表示

単純すぎて説明しずらいorz
てか、ほんとにperlできるの?
0131nobodyさん2006/01/22(日) 07:42:23ID:???
>>130
ごく初歩。
0132nobodyさん2006/01/22(日) 07:45:24ID:???
こういうことかい?
1) 山田が hoge.cgi?select1=A&select2=E で発射
2) piyo.cgi?para=A、piyo.cgi?para=E というURL付メールが届く
3) piyo.cgi?para=A、piyo.cgi?para=E が加工したページを表示

簡単にPerlで実現できると思うのだが。
0133nobodyさん2006/01/22(日) 08:12:49ID:???
むしろどのあたりが解らないのか解らない…
どこが解らないか言ってもらえれば詳しく解説したり、
モジュールを薦めたりいろいろやりようもあるんだがねぇ
# >>130の最後の一文を「ほんとにperlでできるの?」と読んで
# 130にレスを返そうとしてしまった件...アブナカッタ
0134nobodyさん2006/01/22(日) 08:15:06ID:???
選択したページを一緒に表示させるみたいだから

1) 山田が hoge.cgi?select1=A&select2=E で発射
2) piyo.cgi?para=AE というURL付メールが届く
3) piyo.cgi?para=AE が加工したページを表示

だろ

piyo.cgi?para1=A¶2=E でもいいけど。
0135nobodyさん2006/01/22(日) 08:17:25ID:???
↑ここでも文字化けするんだね。
&って書かないと駄目なのか
験し→&
0136nobodyさん2006/01/22(日) 09:22:10ID:???
>>135
&って書きたいのなら&って書くといいよ。
0137nobodyさん2006/01/22(日) 09:23:50ID:???
>>138
&って書きたいのなら&って書くといいよ。
0138nobodyさん2006/01/22(日) 09:43:12ID:???
カキたいなら家族に見つからないようにね♪
0139nobodyさん2006/01/22(日) 10:52:36ID:???
>>116
それぞれの処理を Perl のどの機能を利用して実現したらいいのか
具体的なイメージが湧いていないように見える。慌てずに一つずつ
自分で対処してくれ。他にもいろいろ書かれているが、個々の処理は
どれも難しくないが、>>117 を読む限り、目的の処理全体を実現
するには君の力はまだかなり足りない。
0140nobodyさん2006/01/22(日) 12:37:05ID:???
コマンドに対して入出力するにはどうすればいいでしょうか。
例えば、passwdコマンドにパスワードを渡してその結果を得るにはどうすればいいのでしょう。

渡すだけならばopen(PASS,"| /usr/bin/passwd")で出力用パイプでできるのですが、
これだと結果を変数へ受け取れません。

試しに入力と出力のパイプを二つつけてみましたが、
Can't open bidirectional pipe
と言われてしまいました…。
0141nobodyさん2006/01/22(日) 12:39:19ID:???
>>140
``
0142nobodyさん2006/01/22(日) 12:45:31ID:???
間違えた、passwdコマンドじゃ結果がこないからだめですね。
ここはpasswdが、受け取るべき値を返すものと仮定してください…。

実際にやろうとしているコマンドはCourier-IMAPのuserdbpwです。
0143nobodyさん2006/01/22(日) 12:47:03ID:???
>>140
は…速い。

それですと値を渡せないと思います。
こちらから値を渡して、なおかつその結果を受け取りたいと思っています。
0144nobodyさん2006/01/22(日) 12:53:47ID:???
>>140
PIPEを入力と出力両方開くだけならこれ
http://search.cpan.org/~abergman/ponie-2/perl/lib/IPC/Open2.pm
しかしpasswdのような特殊な入力方式を使っているものでできるかは知らない…
0145nobodyさん2006/01/22(日) 13:16:41ID:???
>>144
おお、これでできそうな気がしますが…、すごいサイズのモジュールですね。
configureだけしてみましたが、大量のファイルを呼んでいる上に
なぜだかすごいWARNINGができるのちょっと入れるをの躊躇してしまいます…。

もう少し他の方法を探ってみます。
どうもありがとうございました。
0146nobodyさん2006/01/22(日) 13:26:12ID:???
>>145
あ、貼ったリンクのURLが悪かった、スマソ
IPC::Open2とIPC::Open3は標準モジュールだよん
0147nobodyさん2006/01/22(日) 13:47:43ID:???
>>146
おかげさまで何とかできました。

ただWriter->autoflush(1)とするとなぜか
Can't locate object method "autoflush" via package "IO::Handle"
といわれることや、closeしなくていいのか、という疑問がありますが、
自分で使う用のスクリプトなので、とりあえず今は目をつむることにします。

とても助かりました。
どうもありがとうざいました。
0148nobodyさん2006/01/22(日) 14:09:27ID:???
>>121
ありがとうございます。
メタ文字をクォートするんですね
0149nobodyさん2006/01/22(日) 14:33:51ID:???
_, ,_
(゚Д゚)
01501162006/01/22(日) 15:08:15ID:???
さまざまなご返答をしてくださった方、ありがとうございました。
==========================================================================================================
HTMLページ(select使って変数発射)→hoge.cgiが条件などがURLを生成してメール送信→URLのpiyo.cgi?PARA=AEにAとEの
両方のページがインラインフレームを使って表示される。
==========================================================================================================

・htmlのselectでも使って選択させ、その内容をcgiに発射
↓
すると、山田さん宛にAとEの内容が記述されたページのURLが届きます。
・cgiで受け取った情報を元にURL作ってsendmailかなんかでメール発射
↓
そのURL先のページもcgiによって生成される(メールからAとEの変数を渡すことになるのかな?)
---------ここまでの過程はすべて自分でプログラムできます------------


分からないのは、ここからで、どのような処理を施せば、hoge.cgiが

・メール受け取ったURLをクリックするとpiyo.cgiが起動
↓
その表示されたページは複数のHTMLページをあらかじめ作っておいて、それ
AとEのhtmlを読み込む。

これですね。piyo.cgiが URLの piyo.cgi? 以降をどのような処理で読み込んで
AとEを合わせて表示しろ っていう処理の方法が分からなくて困っています。
01511502006/01/22(日) 15:13:29ID:???
==========================================================================================================
HTMLページ(select使って変数発射)→hoge.cgiが条件などからURLを生成してメール送信→URLのpiyo.cgi?PARA=AEにAとEの
両方のページがインラインフレームを使って表示される。 ^^^^
==========================================================================================================

訂正です。 条件など「から」  でした。すいません
0152nobodyさん2006/01/22(日) 15:46:09ID:???
>>150
そこがいちばん簡単だと思うんだがなぁ。
つーかなぜインラインフレームにこだわるのかも分からないけどね。
完成している HTML を2つくっつけたら明らかにおかしなことになるし。
なんか自分で変な条件をつけてはまってないか?

おれなら
1. パラメータを解釈して
2. 対応するファイルを開いて読み込み
3. <body></body> の間を抜き出して
4. これをファイル分くり返して
5. くっつけて print
して終わり。インラインフレームは使わない。
0153nobodyさん2006/01/22(日) 16:01:49ID:???
>>152

すいません、ここの箇所だけが分からなくて。。。

その方法でかまわないと思います。
パラメーターの解釈ってどうなるんですか?
そのcgiのURLを引っ張り出して、そこに PARA=Aが含まれるか?とかですか?

もし、よければどのような形になるか書いてもらえませんでしょうか?


例えば、呼び出すA.htmlの中身は
<HTML><HEAD></HAED><BODY> A </BODY><HTML>

呼び出すB.htmlの中身は
<HTML><HEAD></HAED><BODY> A </BODY><HTML>

としてですね。
0154nobodyさん2006/01/22(日) 16:15:37ID:???
もっと基礎を学んで来い
0155nobodyさん2006/01/22(日) 16:23:24ID:???
>>153
「ここの箇所だけ」が分からないんじゃない。
それが分からないのは CGI の基礎が全然分かってないってこと。
0156nobodyさん2006/01/22(日) 16:31:34ID:???
>153
ここは小学生の相手をする学童保育所じゃないんで、
CGIの仕組みを勉強してから来てね
0157nobodyさん2006/01/22(日) 16:42:49ID:???
おまえらの冷たさワロスw
0158nobodyさん2006/01/22(日) 17:20:29ID:???
検索CGIの改造やってます。

登録時にプルダウンメニューから入力させているのですが
登録内容の変更・削除時にあらかじめ登録していた内容が
プルダウンで表示されるようにすることはできるのでしょうか?
<OPTION>タグでselected指定をすれば実現すること自体は分かっているのですが。

どうしても難しそうだったら、変更の度に新たに入力し直してもらおうと思ってはいますが
登録側に不親切だと思うので、できれば実現したいです。
0159nobodyさん2006/01/22(日) 17:47:41ID:???
>>158
1. 「あらかじめ登録していた内容」を読む。
2. それに基いて適宜 selected な <option> を吐く。

必要なのはこれだけ。

どうしても難しそうなのは、回答の度に新たな質問が生成し直されそうな点ですが
回答側が不機嫌になりかねないので、できればもう少し基礎を学んで欲しいです。
01601582006/01/22(日) 17:52:20ID:???
>159
ごめんなさい、そしてありがとう。
0161nobodyさん2006/01/22(日) 18:08:15ID:???
こりゃあVIPのプログラムスレの影響かなぁ
0162nobodyさん2006/01/22(日) 18:34:46ID:???
あのさあのさ
メールにインラインフレームの記述した HTML を書き個数だけ用意して、
メールにその HTML のアドレスを書きゃぁいいのでぁ?
AD, AE, AF
BD, BE, BF
CD, CE, CF
0163nobodyさん2006/01/22(日) 18:55:56ID:???
>>162
それがハンパなく多くなってしまうんです。。。。
0164nobodyさん2006/01/22(日) 18:59:27ID:???
>>163
いちいちレスしている暇があるなら、CGIの基礎を学んでこい!
その方が早い。
マジ話、基礎中の基礎だからな。
ちょっと勉強すればわかるって程度の話なんだからな。
0165nobodyさん2006/01/22(日) 21:29:59ID:???
JavaScript の方がいいんでない?
とか思ったり
0166nobodyさん2006/01/24(火) 23:59:54ID:8wVWM4jM
変数q1が空でなければ、$message2に変数q1の文字列を追加する
ということをしたいのですが、エラーになってしまいます。
どこが間違えていますか?

がんばって考えてみたがエラーで鬱な部分_| ̄|○
↓
if($in{"q1"] ne ""){ $message2 .= $in{"q1"]; }
01671662006/01/25(水) 00:01:27ID:Ofc3DeTH
書き忘れました。
cgi-lib.plを使って、$in{"q1"}で変数の中身を取り込んでいます。
0168nobodyさん2006/01/25(水) 00:04:06ID:???
>>166
if($in{"q1"] ne ""){ $message2 .= $in{"q1"]; }
      〜                   〜
なんというか…フォント変えたほうが良いんじゃないか…
0169nobodyさん2006/01/25(水) 00:09:09ID:???
if($in{"q1"} ne ""){ $message2 .= $in{"q1"}; }
}と]の間違い
単純に
if($in{"q1"}){ $message2 .= $in{"q1"}; }
じゃまずいのか?
0170nobodyさん2006/01/25(水) 00:09:29ID:Ofc3DeTH
>>168
ぐはーーーー、これで3日間悩んでいますた。
ありがとうございます・・・うぅ。
まさかこんなオチとは_| ̄| . . . ○
0171nobodyさん2006/01/25(水) 00:10:36ID:Ofc3DeTH
>>170
ありがとうございます。
「空かどうかの判断」はそういう記述でもOKなんですね。
0172nobodyさん2006/01/25(水) 00:14:24ID:???
>>169
それだと"0"のときも空扱いなのに注意。
むしろ空なんだったら繋いでも結果変わらないんだから
$message2 .= $in{"q1"};
これだけで良くない?definedか調べるのなら解るけど
# 漏れの書き込みがずれてるし…フォント変えとこう:-p
0173nobodyさん2006/01/25(水) 01:45:33ID:???
if(defined($in{"q1"})){〜
でいいんじゃないかな・・・
0174nobodyさん2006/01/25(水) 02:07:16ID:???
>>170
俺も1回やったことあるw
どんなフォントだとわかりやすいんだろう。
0175nobodyさん2006/01/25(水) 02:10:15ID:???
いろいろな文字列調がある変数を全角36文字で改行したいです。
$text1, $text2, . . . $text50

改行処理をして、
$text1

$text2

$text3
.
.
.
$text50
としたいのですが、文字列に全角36文字文で「\n」を入れたいんです。
半角や数字・記号等が混じっているのですが、どのように挿入するのでしょうか?
0176nobodyさん2006/01/25(水) 02:13:47ID:???
まずは文字コードから勉強しようか
0177nobodyさん2006/01/25(水) 02:15:29ID:???
lengthで文字列のバイト数を調べればいけるかも。
0178nobodyさん2006/01/25(水) 02:16:22ID:???
Perlメモでも読んで来い
0179nobodyさん2006/01/25(水) 02:17:59ID:???
>>177
お前全角文字のど真ん中でぶった切りそうだな
0180nobodyさん2006/01/25(水) 02:18:32ID:???
>>179
そんな細かい事キニシナイ
01811752006/01/25(水) 02:18:48ID:???
>>176-178
perlメモという親切なサイトに逝ってきまつ
0182nobodyさん2006/01/25(水) 02:21:15ID:???
>>180
お前、すがすがしいぐらいにハッキリ言うなw
01831812006/01/25(水) 02:46:39ID:???
うーん、考えてみますたがダメぽ。

require "jcode.pl";
require "fold.pl";
require "cgi-lib.pl";

$bytes = '72';

$text=$in{"text"};

jcode::convert(\$text, "euc");

while (length($text)) {
(my $text_mod, $text) = fold($text, $bytes);
$text_mod .= $folded, "\n";
}

print "$text_mod";


最終的には改行された(\nの入った) $text_modができたらいいのに難しいです・・・。
0184nobodyさん2006/01/25(水) 02:54:23ID:???
>>175はなぜ配列をつかわんのだ?
0185nobodyさん2006/01/25(水) 02:55:57ID:???
自力でなんとか改行できましたー、ありがとうございます。

>>184
配列を使おうと勉強しているのですが、
@が出ると眠くなってしまうので、できたためしがありません。
@_ とかの独特の表記がまだ飲み込めません。
0186nobodyさん2006/01/25(水) 03:25:05ID:???
>>185
> @が出ると眠くなってしまうので
おまえはトンボか? グルグルグル。
0187nobodyさん2006/01/25(水) 03:49:07ID:???
眠くなるのが普通だな。
0188nobodyさん2006/01/25(水) 04:10:50ID:???
だから、配列を使ったプログラムは納期が遅れることがよくあるんだな、納得。
0189nobodyさん2006/01/25(水) 10:15:17ID:???
>>186
> > @が出ると眠くなってしまうので
> おまえはトンボか? グルグルグル。

ウケタ...今度使わせて貰うw
0190nobodyさん2006/01/25(水) 10:55:53ID:???
@ @
 △
0191nobodyさん2006/01/25(水) 22:22:06ID:???
  $RR = int(rand(2));
  $AAA[0]=$AAA[0]+1+$RR;
  $AAA[1]=$AAA[1]+1+$RR;
と
  $AAA[1]=sprintf("%03d",$AA[1]);
  $AAA[2]=sprintf("%03d",$AA[2]);
って、もっと効率よく記述できませんでしょうか  
0192nobodyさん2006/01/25(水) 22:29:35ID:???
???
0193nobodyさん2006/01/25(水) 22:38:09ID:???
>>191
map とか foreach とか。

@AAA = map { $_ + 1 + $RR } @AAA;

$_ = $_ + 1 + $RR foreach @AAA;

@AAA = map { sprintf('%03d', $_) } @AA;
0194nobodyさん2006/01/25(水) 22:38:35ID:???
>>191
効率よくするのはその部分だけ見せられてもほとんど無理だが、
見やすくするならforeachやmapが有効。

その操作は配列全体に行うの?配列全体になら
$RR = int(rand(2)) + 1;
$_ += $RR foreach @AAA;
及び
@AAA = map { sprintf("%03d",$_) } @AA;

配列の一部だけなら@AAA[0,1]のように配列の一部を指定すればOK。
その場合それが見やすくなるかは微妙だけど
01951942006/01/25(水) 22:39:51ID:???
>>193
ケコーン
遅かったorz
01961912006/01/25(水) 22:46:15ID:???
>>193-195
ためになりました!
配列操作おざなりにしてたので……
もっと勉強してみます
0197nobodyさん2006/01/25(水) 23:46:22ID:???
#!/usr/bin/perl
$hoge = '10';
&fuga($hoge);
print $hoge;

sub fuga(){
$aaa = @_ + 50;
return $aaa;
}

結果は「60」になると思ったのですが「10」でした。どこかが間違えているのでしょうか?
$hoge に fugaサブルーチン を通した結果を表示させたいです。
0198nobodyさん2006/01/25(水) 23:50:34ID:???
結果受け取ってないじゃん
01991972006/01/26(木) 00:03:19ID:???
#!/usr/bin/perl
$hoge = '10';
&fuga($hoge);
print $hoge;

sub fuga(){
$aaa = @_ + 50;
return;
}

returnだけで値を返したつもりですがこれでも「10」です・・・。
0200nobodyさん2006/01/26(木) 00:11:19ID:???
#!/usr/bin/perl

@hoge = (10, 20, 30);

print &fuga(@hoge);

sub fuga(){
  my($total);
  foreach (@_){
    $total += $_;
  }
  return $total;
}
0201nobodyさん2006/01/26(木) 00:37:33ID:???
$hoge = 10;
$moge = fuga($hoge);
print $moge;

sub fuga(){
$aaa = $_+50;
return $aaa;
}
0202nobodyさん2006/01/26(木) 00:46:45ID:???
すまん間違った
$hoge = 10;
$moge = fuga($hoge);
print $moge;

sub fuga(){
$aaa = $_[0]+50;
return $aaa;
}
0203nobodyさん2006/01/26(木) 02:00:59ID:???
サブルーチンの呼び出し時は関数名の前に&を付けるべきなのか付けないべきなのか
ちょっと↑見たら早速両方のパターン

&あるとわかりやすいとかくらいしかメリットないのかな
0204nobodyさん2006/01/26(木) 02:25:15ID:???
>>203
この質問結構出るな…
この話題から論争になったことがあるのでFAQを挙げるだけに留めて置く事にする。
ttp://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq7.html#What_s_the_difference_between_ca
漏れの好みとしては必要ないなら&つけない
0205nobodyさん2006/01/26(木) 03:21:18ID:???
俺は
&foo();
のようにしてる。
渡す値が無くても括弧はつけてるかな。
ちゃんと関数が呼ばれて意図した動作なら「お好きなように」って感じかな
0206nobodyさん2006/01/26(木) 06:40:19ID:???
use Time::HiRes qw(time);

time 関数を HiRes モジュールからインポートして使おうと思っているのですが、
インポートする際に関数を別名でインポートすることはできますか?

HiRes の time() は mtime() とかっていう名前で扱いたいので・・・
0207nobodyさん2006/01/26(木) 06:51:16ID:???
リファンレス
0208nobodyさん2006/01/26(木) 06:56:34ID:???
>>206
use Time::HiRes;
BEGIN { $::{mtime} = *Time::HiRes::time }
0209nobodyさん2006/01/26(木) 06:58:32ID:???
&{$mtime} みたくなるってことですよね?
なんか気持ち悪いw

&mtime();
のようにして呼び出すことはモジュールを書き換えない限り無理ってことなのかな?
0210nobodyさん2006/01/26(木) 06:59:05ID:???
& は余計だった
02112082006/01/26(木) 07:03:01ID:???
ごめん解説付け忘れた
>>206
Time::HiResはExporterを使ってExportしているだけなので、
Exporterがやる仕事を自前で書いてやれば良い。
で、それは何かというと使用する側のパッケージのシンボルテーブルに
指定されたシンボルをエクスポートするということなので
BEGINブロックの中でその操作を行うと>>208のようになる
0212nobodyさん2006/01/26(木) 07:10:34ID:???
おぉ〜出来た♪
Exporter とか BEGIN とかそこらへんを勉強してきます。
ありがとうございました。
0213nobodyさん2006/01/26(木) 09:55:58ID:o/1/VUZ9
@number = (123,1234,124,1245);
sub bynumber{ $a <=> $b}; }
@number = sort bynumber @number;

配列の値を数値で並べる方法なんだそうだが、
サブルーチンがどういう働きしてるかさっぱりわからん。
誰か解説お願いします。
0214nobodyさん2006/01/26(木) 10:27:31ID:???
>208
些細なことなんですが・・・
*Time::HiRes::time
の time のケツにセミコロンがありませんが (strict で書いてるけどエラー無し)、付けたほうがいいです・・・よね?
0215nobodyさん2006/01/26(木) 10:29:21ID:???
>213
昇順でソート
配列に入れる値が既に並んでしまってるのでもっとばらけて入れてみるとわかるかと
ちなみに
$b <=> $a
ってすると降順になります
■ このスレッドは過去ログ倉庫に格納されています