Perlコーディング初心者質問スレ Part 56
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/09/16(日) 19:49:43ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >2 以降
前スレ ttp://pc11.2ch.net/test/read.cgi/php/1180492441/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0002nobodyさん
2007/09/16(日) 19:51:29ID:???[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: ttp://www.site-cooler.com/kwl/perl/
[本]
リャマ: ttp://www.oreilly.co.jp/books/4873111269/
駱駝: ttp://www.oreilly.co.jp/books/4873110963/
Effective Perl: ttp://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: ttp://www.oreilly.co.jp/books/4873112028/
Perl ベストプラクティス: ttp://www.oreilly.co.jp/books/4873113008/
Perl Hacks: ttp://www.oreilly.co.jp/books/9784873113142/
[オンラインマニュアル] (追加)
最新のドキュメント: ttp://search.cpan.org/dist/perl-5.8.8/
perl5.8.xのドキュメント(一部): ttp://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: ttp://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: ttp://www.cpan.jp/search.cgi
perldoc.jp: ttp://www.perldoc.jp/
Perldoc.com: ttp://www.perldoc.com/
0003nobodyさん
2007/09/16(日) 19:52:04ID:???[モジュール]
CPAN.com: ttp://search.cpan.org/
河馬屋二千年堂: ttp://homepage3.nifty.com/hippo2000/
[テクニック]
Perlメモ: ttp://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: ttp://homepage1.nifty.com/nomenclator/perl/
Perlの小技: ttp://homepage3.nifty.com/hippo2000/perltips/index.htm
[Perl5.8Unicodeメモ]
ttp://www.pure.ne.jp/~learner/program/Perl_unicode.html
ttp://www.namazu.org/~tsuchiya/perl/perl-5.8.html
ttp://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
00041
2007/09/16(日) 19:56:03ID:???0005nobodyさん
2007/09/16(日) 20:04:09ID:???お疲れ様です。
前スレ最後に質問してしまいました。
こちらに再投稿させていただきますm(__)m
use Math::BigFloat;
my $tr = Math::BigFloat->new((@array * (1-0.68)/2));
と書くの大変なので
my $a = use Math::BigFloat;
my $tr = $a->new((@array * (1-0.68)/2));
と書いてみましたがエラーでした。
こういう意図を実現するのは無理ですか?
小数の計算をさせた上で配列のインデックスにする場合はBigfloatしておかないと危ないです。
やってない$trに
$array[-($tr +1)];
とすると実質インデックスが2個変わってしまいます。
15.999だったのが、+で16になり、さらに1が足されて17になる。
そんな現象を確認しました。
簡単な記述方法はないでしょうか。
0006nobodyさん
2007/09/16(日) 20:22:00ID:???use bignum
0007nobodyさん
2007/09/16(日) 20:40:18ID:??????
どういうことですか?
英語読めませんが、http://perldoc.perl.org/bignum.html を見てやったところ
全くMath::BigFloatが不要になってしまいました。
冒頭でuse bignumをしておけば小数点の変な誤差が発生することは皆無になるんですか?
代償として重くなるとかがあるので、軽くしたいなら面倒でもMath::BigFloatを使えばいい。
簡単にしたいならbignumを使えばいい?
0008nobodyさん
2007/09/16(日) 20:56:51ID:???my $tr = (@array * (1-0.68)/2);
メチャクチャな計算になりました。
@arrayは100なので16になるべき計算なのに50が入ってました。
もちろんbignumをつかわなければ16が入ります。
bignumを使うと他にも多大な影響があるようですね。
どういう基準で影響を与えてくるんでしょうか。
0009nobodyさん
2007/09/16(日) 21:58:06ID:???$#test
で最後の添え字をゲット。
0010nobodyさん
2007/09/16(日) 23:09:56ID:???再現しない。再現する最小コードは?
use strict;
use warnings;
use bignum;
my @array;
$array[99] = 0;
print scalar(@array), "\n"; # 100
my $tr = (@array * (1-0.68)/2);
print "$tr\n"; # 16
0011nobodyさん
2007/09/16(日) 23:24:10ID:???#!/usr/bin/perl
#京
#use bignum;
my @array;
for (1..100){ push @array,$_ }
@array = sort {$a<=>$b} @array;
my $tr = (@array * (1-0.68)/2);
print $tr;
これでできると思います。EUCコードで記述されています。
use bignum;をコメントアウトするかしないかで表示が変わります。
本来とは違う挙動をしているのでしょうか?
0012nobodyさん
2007/09/16(日) 23:35:36ID:???print 1;
というのが何千行もあった場合
print FH 1;
とやりなおすのは間に色々な式が挟まってる為一括ではできません。
標準出力先をファイルハンドルに変える設定などが冒頭でできるなら一発でできると思うのですが。
0013nobodyさん
2007/09/16(日) 23:36:59ID:???■ このスレッドは過去ログ倉庫に格納されています