Perlコーディング初心者質問スレ Part 38
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/10/07 23:23:08ID:kiEzDCJF【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0008nobodyさん
04/10/07 23:39:26ID:???http://www.geocities.co.jp/SiliconValley/5656/
http://www.hyuki.com/writing/techask.html
これはMLでの作法ですが、BBSでの質問にも当てはまると思います。
例え匿名でも、回線の向こうに居るのはあなたと同じただの人ですよ。
0009nobodyさん
04/10/07 23:40:21ID:???WikipediaのPerlの項目
http://ja.wikipedia.org/wiki/Perl
0012nobodyさん
04/10/08 00:40:34ID:LN3yr29s一般的に美しいとされるコードの書き方はどのような書き方ですか?
参考になるようなソースがあればお教えください。
0013nobodyさん
04/10/08 01:16:04ID:???http://perldoc.com/perl5.8.4/pod/perlstyle.html
http://perldoc.jp/docs/perl/5.8.0/perlstyle.pod
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlstyle.html
001412
04/10/08 02:14:31ID:LN3yr29sしかしながら、見た目の美しさではなく、
コードを後から読む人にとって、
直感的に、わかりやすいコードという意味で、美しいといいました。
誤解を招く言い方でスイマセンでした。
0015nobodyさん
04/10/08 03:17:19ID:???perlstyle にはそういう意味で美しくする為の Tips も載っているだろ?
より具体的に知りたければ、自分の書いたコードをコードレビュー系の
ML なりスレなりに投下してごらん。偏った意見が聞けて面白いよ。
http://pc5.2ch.net/test/read.cgi/php/1049514428/
001612
04/10/08 03:46:07ID:LN3yr29s参考になりました。どうもありがとう。
0017nobodyさん
04/10/08 03:58:51ID:???スレ建て乙
>>14
>コードを後から読む人にとって
それだったら、コーディング標準に従ったコード >>13のURL参照
独自ルールだとどうしても*自分にとって*美しいコードになってしまうことがあるので
質問の意図からすると、
設計の簡潔さ、適切なサンプルコード/ドキュメント(POD)を重視した方がいいんじゃないかな
場合によってはコードを読まずにすませられることもあるよ。
0018nobodyさん
04/10/08 09:25:10ID:D4NtGdWqシェルスクリプトでいうところの↓みたいなことがしたいんですが
echo "current dir is `pwd`"
以前このスレで教えてもらったのですがやり方を忘れてしまいました
ログもググってみたんですが見つかりませんでした
0019nobodyさん
04/10/08 11:14:19ID:???これが高速だし読みやすいのでお勧めだが…
(printに関して言えば、ピリオドよりコンマの方が良いが)
print "current dir is ${\`pwd`}";
print "current dir is ${\do{ `pwd` }";
print "current dir is @{[ `pwd` ]}";
ま、こんな感じで。
0020nobodyさん
04/10/08 14:50:00ID:???0022nobodyさん
04/10/08 16:02:04ID:SvnbdnXk別ウィンドウを使って表示することは可能でしょうか。
javascriptを使えばできるようなのですが、
perlのみでは無理なのでしょうか?
スレ違いなら申し訳ないです。
002312
04/10/08 16:09:32ID:HUGW4EIRどうもありがとうございます。
>>コードを後から読む人にとって
>設計の簡潔さ、適切なサンプルコード/ドキュメント(POD)を重視した方がいいんじゃないかな
>場合によってはコードを読まずにすませられることもあるよ。
ところで、PODとは、コメントのことでしょうか?
コメントだとしても、コードを読まずに済ませられるとは考えにくいので
違う気もします。宜しけれご教授ください。
0024nobodyさん
04/10/08 16:28:01ID:???スレ違いもしくは板違い。
http://pc5.2ch.net/hp/
http://pc5.2ch.net/test/read.cgi/php/1095633323/
>>23
http://perldoc.com/perl5.8.4/pod/perlpod.html
http://perldoc.com/perl5.8.4/pod/perlpodspec.html
http://perldoc.jp/docs/perl/5.6.1/perlpod.pod
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlpod.html
0025nobodyさん
04/10/08 16:39:18ID:3yz40YUbopen MAIL ,"| /usr/sbin/sendmail -t";
print MAIL "From: ".'"ほげほげ" <info@2ch.net>'."\n";
print MAIL "To: ".''."\n";
print MAIL "Cc: ".'<test@test.jp> <hoge@hoge.net>'."\n";
print MAIL "Bcc: ".''."\n";
print MAIL "Subject: ".""."\n";
print MAIL "\n";
print MAIL "test";
close MAIL;
みたいにしても動作しませんでした。
もちろん普通にtoだけいれたら動作します。
どなたかお願いします。
0026nobodyさん
04/10/08 17:35:29ID:???0027nobodyさん
04/10/08 17:47:14ID:???> ところで、PODとは、コメントのことでしょうか?
> コメントだとしても、コードを読まずに済ませられるとは考えにくいので
PODは、コメントと言うよりは、ドキュメントと言った方が適切かもしれない。
Perlの標準モジュールの多くは慣習的に、
モジュールの説明、そのモジュールの使い方(実際に動く最小限のコード)
関数/メソッドのリファレンス、... などを含んでいるので
たとえば、◯◯をしたいといったとき、
PODにそのサンプルが載っていれば内部実装のコードを読む必要はない。
(デバッグで必要になる時までは...)
002812
04/10/08 18:01:20ID:HUGW4EIRどうもありがとう。色々コード&POD読んでみます。
精進します。ありがとう。
0031nobodyさん
04/10/08 18:38:42ID:???open MAIL ,"| /usr/sbin/sendmail -t";
print MAIL "From: ほげほげ <info@2ch.net>\n";
print MAIL "To: \n";
print MAIL "Cc: <test@test.jp>,<hoge@hoge.net>\n";
print MAIL "Bcc: \n";
print MAIL "Subject: スレ違い\n";
print MAIL "\n";
print MAIL "Ccでアドレス列記はperlには関係することではない";
close MAIL;
0032nobodyさん
04/10/08 19:01:26ID:???0035nobodyさん
04/10/09 19:46:27ID:r3ZvWrWVログが10行を越したときに1行だけ残してあとのログが消えるようにするのとどっちが負荷が低いのでしょう_?
つまり、頻繁にログを1行にするのと、100行ものログを読みこむのと、どちらが負荷がかかるんでしょう。
0037初心者です。
04/10/09 20:26:36ID:fCvsZBf9以下の戻り先URLの設定でターゲットの設定は出来ないのでしょうか?
_topに戻りたいのですが、戻れません。
# 戻り先URL
$home = 'http://xxxxx.com/index.html';
誰か教えて下さいませ。大変困ってます。<(_ _)>
0038nobodyさん
04/10/09 20:29:04ID:???スレ違いもしくは板違い。
http://pc5.2ch.net/hp/
http://pc5.2ch.net/test/read.cgi/php/1095633323/
0039nobodyさん
04/10/09 21:00:25ID:LGUhwPv/SMTPを使ってのメール送信で送れてはいますが
OEでの受信で宛先の部分が
undisclosed-recipients になってしまいます。
送信元は正常に表示されているのですが。
どこを修正すればよいでしょうか?
お願いします。
use Net::SMTP;
$smtp = Net::SMTP->new('***.***.ne.jp'); #SMTPサーバ
$smtp->mail(from@test.ne.jp); #送信元
$smtp->to(to@test@ne.jp); #宛先
$smtp->data();
$smtp->datasend("Subject:メール\n"); #件名
$smtp->datasend("メール本文");
$smtp->dataend();
$smtp->quit;
004039
04/10/09 21:03:05ID:LGUhwPv/× $smtp->to(to@test@ne.jp); #宛先
○ $smtp->to(to@test.ne.jp); #宛先
004139
04/10/09 21:04:23ID:LGUhwPv/0043nobodyさん
04/10/09 21:21:16ID:???> $smtp->mail(from@test.ne.jp); #送信元
$smtp->mail('from@example.jp'); # MAIL FROM
> $smtp->to(to@test@ne.jp); #宛先
$smtp->to('to@example.jp'); # RCPT TO
> $smtp->datasend("Subject:メール\n"); #件名
> $smtp->datasend("メール本文");
$smtp->datasend("To: 39 <to\@example.jp>\n"); # To: ヘッダ
$smtp->datasend("Subject: メール\n");
$smtp->datasend("\n");
$smtp->datasend("メール本文");
0045nobodyさん
04/10/09 21:46:43ID:LGUhwPv/返信ありがとうございます。
$smtp->mail(to@test.ne.jp); のすぐ下に
$smtp->datasend("To: to@test.ne.jp\n"); を
追加してみたけど駄目でした。
どこがまずいのでしょうか?
0046nobodyさん
04/10/09 21:48:33ID:LGUhwPv/ありがとうございます。
やってみます。
0047nobodyさん
04/10/10 00:20:52ID:mkQG3wAc操作したいのですがうまくいきません
my $p = { data => 1 };
&abc($p);
print "$p->{data}\n";
sub abc {
my $p = shift;
$p->{data} = 2;
}
↑のようにやってみたのですがなぜかダメでした
再帰処理がしたいので関数内から直接変数の値をいじることはできません
0048nobodyさん
04/10/10 00:32:57ID:???そのコードは問題なく動くので別の所がおかしいのだろう。
use strict; や -w オプション、デバッガで地道に調べてくれ。
0049nobodyさん
04/10/10 00:48:31ID:???0050nobodyさん
04/10/10 02:42:47ID:???書き込みとか削除とかをifで分けていく部分はどういう風にしたらいいんですか?
0051nobodyさん
04/10/10 03:08:11ID:???0052nobodyさん
04/10/10 03:10:22ID:???&write;
} elsif ($mode eq 'delete') {
&delete;
}
こんな感じのt所です。
0053nobodyさん
04/10/10 03:11:28ID:???http://module.jp/dist/web+db-press6-perl-oo.pdf
0055nobodyさん
04/10/10 03:18:58ID:vb66WTKp@{$AoA[$i]} = @array で代用できるという事がよく分かりません。
@{$AoA[$i]} = @array と言うのはどういうことですか?
@($AoA[$i]) = @array との違いを教えてください。
0056(1/2)
04/10/10 04:56:32ID:???普通の配列変数を書く時の @array って書き方。コレ、本当は @{array} の
{ } を省略したものなんだよ。@{ と } で挟まれたホニャララを配列として扱い
ますよ、って意味で、ホニャララが 裸のワード だったら普通の配列変数と
して扱われるんだ。
@{array} = (0,2,4,8); # array という名前の配列変数
ホニャララはリファレンスでも構わなくて、配列に対してできる操作は
同じようにできちゃう。配列の要素を見る時は ${ ホニャララ }[ 添え字 ]
って構文になるよ。
$a_ref = [1,3,5,7]; # 名無しのリストリファレンス
print @{array}; push @{array}, 10; ${array}[0] = 12;
print @{$a_ref}; push @{$a_ref}, 9; ${$a_ref}[0] = 11;
そして当然、代入も。
@{array} = (0,2,4,8);
@{$a_ref} = (1,3,5,7);
文法的に間違えようのない場所なら、この { } は省略できるんだ。
print @array;
print @$a_ref;
0057(2/2)
04/10/10 05:01:32ID:???Perl の変数は予め宣言しなくても使えるよね。この振る舞いと同じように、
未定義な「場所」をムリヤリ配列として使おうとすると、本当にそういう事に
しちゃうんだ。その「場所」がスカラー値しか収められない「場所」なら、
それ自体はスカラー値であるリストリファレンスが収まるってわけさ。
@{AoA} = (); # 空っぽの配列
# スカラー値を収められる入れ物に、リストリファレンスを作って入れる
${AoA}[0] = [0,2,4,8];
# ${AoA}[1] は配列だと勝手に決めて、代入しちゃう!
@{${AoA}[1]} = (1,3,5,7);
気をつけなきゃいけないのは、未定義でもリファレンスでもない「場所」を
ムリヤリ配列として使おうとした時。perl はこういう時、下の例なら $foo の
値、つまり hoge って名前の配列変数を勝手に使っちゃうんだ。
$foo = 'hoge'; # ただの文字列
@hoge = (2,4,6,8);
@{$foo} = (0,1,2,3);
print @hoge; # 0123
この危険な機能の名前はシンボリックリファレンス。 use strict 'refs'; と
唱えておく事で禁止できるよ。
0058nobodyさん
04/10/10 14:32:49ID:bziwCOA4どのような関数がありますでしょうか?
例えば、test@aaa.ne.jpの aaa.ne.jpだけを取得したいんです。
ご存知の方お願いします。
0060nobodyさん
04/10/10 15:21:22ID:bziwCOA4indexは検索文字が対象文字列に存在するかのだと思いましたが
どのようにすればよいんでしょうか?
0061nobodyさん
04/10/10 16:18:08ID:???my $addr_spec = 'test@example.com';
# http://tohoho.wakusei.ne.jp/wwwperl2.htm#index
# http://tohoho.wakusei.ne.jp/wwwperl2.htm#substr
my $domain = substr $addr_spec, index($addr_spec, '@') + 1;
# http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlre.html
($domain) = $addr_spec =~ /([^@]+)\z/;
006255
04/10/10 19:15:24ID:vb66WTKpありがとうございました。
つまり
$a_ref = [0,2,4,6];
などと記述があった後に
@{$a_ref} = (1,3,5,7);
と書かれていたら
$a_ref = [1,3,5,7]; と読替えて良いと言うことでしょうか?
006339
04/10/10 20:18:00ID:bziwCOA4できました。
ありがとうございました。
0064大文字小文字混在をアルファベット順にソートしたい
04/10/10 21:23:27ID:0NABqG2Bこれを得点の高い順に並べ、さらに同じ得点同士ではアルファベット順に並べて
IDを取り出したいと思います。そこで以下のようにしました。
%data= ('aaa' => 90, 'bbb' => 80, 'CCC' => 80, 'DDD' => 70,);
@id_array = sort { $data{$b} <=> $data{$a} or $a cmp $b} keys %data;
しかし、これでは同じ得点の人が
大文字のアルファベット順→小文字のアルファベット順になってしまいました。
(上の例ではaaa, CCC, bbb, DDD,の順になる)
アルファベットの順(aaa, bbb, CCC, DDDの順)に並べ替える方法はありますか?
0065nobodyさん
04/10/10 21:35:49ID:???自分で sort の中に何が書けるかわかってないんじゃない?
まぁいいや。
sort { $data{$b} <=> $data{$a} or lc($a) cmp lc($b) }
とか、大文字と小文字を無くすようなことをしてやれば、全て正解でしょうに。
006664
04/10/10 22:02:50ID:0NABqG2Bできました。
文字コード自体が大文字アルファベット→小文字アルファベットの順に
なってるので、仕様だと思ってあきらめていました。
ありがとうございます。・゚・(ノД`)・゚・。
0067nobodyさん
04/10/11 00:30:18ID:???いや、だいぶ違う。
@$a_ref = (...)は新しいリファレンスを作らないし、tieやblessなどの影響はそのまま。
$a_ref = []は新しいリファレンスを作る。
特に後者にする必要がなければ、前者の方法を使った方がいい。
006862
04/10/11 01:38:46ID:21NinhMEわかりました。あの後、ラクダ読んでなんとなく
感覚が掴めました。ありがとうございました。
0069nobodyさん
04/10/11 17:04:09ID:???漏れは直さないでそのまま使えてるんだけどなんで一般的に直す必要があるのでしょうか?
0070nobodyさん
04/10/11 17:30:37ID:???スレ違い。
http://pc5.2ch.net/test/read.cgi/php/1095633323/
http://www.studyinghttp.net/cgi-bin/rfc.cgi?2616
0071nobodyさん
04/10/12 00:56:44ID:J8ZBB7PX掲示板のCGIを作ってる最中なんだけど、
(1)全ての書き込みを一つのログファイルにする
(2)書き込み毎にログファイルをつくる
ログが1000件あると仮定して10件を表示する場合、どちらの方がリソース食うだろう?
(1)の場合、処理手順は少ないが余計なデータを大量に読み込む。
(2)の場合、opendir、readdirでファイル名を読み込み、かつ各々のファイルを読み込むので、
処理は繁雑になるが余計なデータをメモリ上に展開しない。
はやりシステムとのやり取りが多くなる(2)の方がコスト高いのだろうか?
0072nobodyさん
04/10/12 00:59:02ID:???スレ違い。
http://pc5.2ch.net/test/read.cgi/php/1034645635/
0073nobodyさん
04/10/12 01:04:57ID:???儂のケースでは、データーが300件ぐらいで使ってたフリー鯖でゴルァされたのでsql導入した。
0075nobodyさん
04/10/12 01:29:03ID:???seekで位置決めしてread,writeってのもあり。
0076nobodyさん
04/10/12 01:35:04ID:???レスありがとうございます。とりあえず、一般的(と思われる)(1)の方法でやってみます。
データは可変長ですが、固定長にしてoffsetで狙い撃ちもアリですね。ちょっと工夫してみます。
>>73
すいません。そのスレ知りませんでした。
0077nobodyさん
04/10/12 01:52:29ID:???0078nobodyさん
04/10/12 10:44:09ID:???open IN,$dat.dat
@var[50..60]=<IN>
これは$dat.datを全部読んでいるんですか?それとも60行目で処理が終了しますか?
0079nobodyさん
04/10/12 11:21:32ID:???0080nobodyさん
04/10/12 11:27:40ID:???読むことは読むけど、速いことは速いんじゃない?
今のCPUで読み込みファイルの大きさで遅いってことは、普通の取り扱う範囲の
テキストファイル(1M以下程度)だとあり得ない希ガス。
Perlが一番遅いのって、「値のコピー」周辺だと思うんだけどネェ。
(特にリスト系)
まぁ、ファイルの大小と、スライス有・無でベンチとってみれヴぁ?
0081nobodyさん
04/10/12 11:47:38ID:???前スレにファイルの扱いの方が遅いと書いてあった希ガス
よほどたいそうなモン作らない限りは誤差の範囲だろ
0082nobodyさん
04/10/12 11:59:34ID:???これの作り方教えて下さい
0083nobodyさん
04/10/12 12:11:37ID:???0084nobodyさん
04/10/12 15:01:19ID:???出力結果の見方がわかりません。
テンプレにはベンチマーク関連の資料が見当たらないのですが、
見方などが載っているサイトをご存知の方いませんか?
0085nobodyさん
04/10/12 16:54:23ID:???>>3
http://perldoc.com/perl5.8.4/lib/Benchmark.html
http://pc5.2ch.net/test/read.cgi/php/997829243/
出力のどの部分が分からんのか具体的に示した方がいいよ。
0086nobodyさん
04/10/13 12:37:35ID:SrofvYG0ただし、$p1 〜 $p7はそれぞれ違う数字になるように代入したい
と思い、こんなコードを考えたのですが
008786
04/10/13 12:38:00ID:SrofvYG0$p2 = int(rand 7);
while($p1 == $p2){
$p2 = int(rand 7);
}
$p3 = int(rand 7);
while($p1 == $p3 or $p2 == $p3){
$p3 = int(rand 7);
}
$p4 = int(rand 7);
while($p1 == $p4 or $p2 == $p4 or $p3 == $p4){
$p4 = int(rand 7);
}
$p5 = int(rand 7);
while($p1 == $p5 or $p2 == $p5 or $p3 == $p5 or $p4 == $p5){
$p5 = int(rand 7);
}
$p6 = int(rand 7);
while($p1 == $p6 or $p2 == $p6 or $p3 == $p6 or $p4 == $p6 or $p5 == $p6){
$p6 = int(rand 7);
}
$p7 = int(rand 7);
while($p1 == $p7 or $p2 == $p7 or $p3 == $p7 or $p4 == $p7 or $p5 == $p7 or $p6 == $p7){
$p7 = int(rand 7);
}
008886
04/10/13 12:38:40ID:SrofvYG0p1〜p100までに1〜100までの数字をそれぞれ違う数字が入るようにするなんてするとひどいコードになる事に・・・
うまくループ構文使えばもっと簡単なコードになる気がするのですが
私では作れませんでした・・・どなたかご存知でしたら教えていただけますでしょうか。
(ちなみになぜこんな事をやりだしたかというと、特定個数の全てのアイコンを毎回順序をランダムで表示したいと考えたからです)
連続カキコすいません。(改行エラーでたので)
0089nobodyさん
04/10/13 12:41:40ID:???例えば、普通にリンクを貼るだけならできるのですが、
自サイトへはinner、他サイトへはouterというスタイルを適用したいと思っています。
ログの例:(MyIDを含むのが自サイトとします)
http://localhost/MyID/<BR>http://www.2ch.net/
出したい出力結果(HTML上):
<A href="http://localhost/MyID/"class="inner">http://localhost/MyID/</A><BR><A href="http://www.2ch.net/" class="outer">http://www.2ch.net/</A>
sub link { # 引数に渡すのはログ全体
$_[0] =~ s/([^=^\"]|^)((http|ftp|https)\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\,\|]+MyID[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\,\|]+)/$1<A href="$2" class="inner">$2<\/A>/g;
$_[0] =~ s/([^=^\"]|^)((http|ftp|https)\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\,\|]+)/$1<A href="$2" class="outer">$2<\/A>/g;
}
こう記述すると、前者も後者も全てouterになってしまいます。
if ($_[0] =~ /MyID/) {
$_[0] =~ s/([^=^\"]|^)((http|ftp|https)\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\,\|]+MyID[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\,\|]+)/$1<A href="$2" class="inner">$2<\/A>/g;
} else {
$_[0] =~ s/([^=^\"]|^)((http|ftp|https)\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\,\|]+)/$1<A href="$2" class="outer">$2<\/A>/g;
}
こうすると、今度は自サイトへのリンクは貼られるのですが、他サイトへのリンクは貼られなくなってしまいます。
上記の出したい出力結果を出すには、どのように記述したらよいのでしょうか。
009186
04/10/13 13:33:52ID:SrofvYG0配列ってランダマイズできるんですか・・・。
知りませんでした汗
ありがとうございました。探してやってみます。
0092nobodyさん
04/10/13 13:44:56ID:???@array=();
for ($count = 0; $count < 7; $count++) {
push(@array,$count);
}
&shuffle( \@array );
sub shuffle {
my $array = shift;
my $i;
for ($i = @$array; --$i; ) {
my $j = int rand ($i+1);
next if $i == $j;
@$array[$i,$j] = @$array[$j,$i];
}
}
&shuffleを呼び出す前と、呼び出した後で@arrayの中身を見てみよう。
0094nobodyさん
04/10/13 15:22:33ID:???@outにランダムな数値を出力。
@in = (1 ..100);
@out = ();
srand;
foreach (@in) {
my $r = int rand (@in + 1);
push(@out, $in[$r]);
$out[$r] = $_;
}
0096nobodyさん
04/10/13 15:48:10ID:???srand(time());
%hash = map {$_ => rand()} 0 .. 6;
@array = map $_, sort {$hash{$a} <=> $hash{$b}} keys(%hash);
print "@array\n";
0097nobodyさん
04/10/13 16:04:53ID:???List::Utilのshuffle使うな
0098nobodyさん
04/10/13 16:07:16ID:???モジュールに頼りっきりになるのもアレだが、でも使えるものは使っていきたいよね。
0099nobodyさん
04/10/13 16:11:23ID:???↑の配列の中から18に一番近い数字を取り出すみたいなのはどうしたらいいでしょうか?
0100nobodyさん
04/10/13 16:20:30ID:???$seed =18;
$tmp = $seed;
@data = (12,15,20,50);
for(@data){
my $diff = abs($_ - $seed);
$min = $_ if($diff <= $tmp);
}
print $min;
こんなんでどない?
010199
04/10/13 16:24:16ID:???$seed =18;
$tmp = $seed;
@data = (12,15,20,50);
for(@data){
my $diff = abs($_ - $seed);
if($diff <= $tmp){
$min = $_;
$tmp = $diff;
}
}
print $min;
0102nobodyさん
04/10/13 16:27:05ID:???abs($_ - $seed);が0の時はlastで抜けちまった方が良さげ
0103nobodyさん
04/10/13 16:32:45ID:???0104nobodyさん
04/10/13 16:37:15ID:???reduce {abs($a-$seed)<abs($b-$seed)?$a:$b} @data
010586
04/10/13 18:17:10ID:???書いていただいた全てのコードが勉強になりました。
一つ一つ検証して試してみたいと思います。
0106nobodyさん
04/10/14 00:02:36ID:pD0/ztzCforなどで一個一個数えていくしかないのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています