[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 07/03 13:37 / Filesize : 153 KB / Number-of Response : 618
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Perlについての質問箱 34箱目



1 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 00:07:22 ]
"The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。

CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 ttp://pc11.2ch.net/php/ )

CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。

ttp://www.perl.org/get.html
● 2008/01/11現在の最新版: 5.10.0
● 2007/01/11現在の開発版: 5.9.5

前スレ
Perlについての質問箱 33箱目
pc11.2ch.net/test/read.cgi/tech/1192463997/

リンク集は>>2-3
過去スレは>>4 あたり


281 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 14:25:00 ]
「置換した文字列」ではない。
置換もしくは削除した文字数を返す。

282 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 14:32:45 ]
while ($x =~ m/\d/gs) { $count++ }

283 名前:268 mailto:sage [2008/02/01(金) 14:41:11 ]
>>281
書き間違えでしたスイマセン

284 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 15:47:47 ]
重箱の隅だけど、
tr/a/a/
ってのは置換したことになるの?

285 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 16:05:17 ]
やってみろ。

286 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 17:08:30 ]
tr/hoge/hage/

の hoge にマッチした回数でいいんじゃね?

287 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 18:12:45 ]
>>284
文法上は置換する(したことになる)が、実際の置換は行われない。
tr/X// や tr/X/X/ は対象に含まれるXを数える為の記述で、この場合には対象が
左辺値である必要もない。

perl -le "print q/123,456/ =~ tr/0-9a/0-9a/" # エラーにならない
perl -le "print q/124,456/ =~ tr/0-9a/0-9b/" # エラーになる
perl -le "print int(1234.56) =~ tr/0-9a//" # エラーにならない

288 名前:デフォルトの名無しさん [2008/02/01(金) 21:17:49 ]
ちょっと自分で試してみればすぐ答えが出るのに。
なんで試さないのかなぁ。
もしかして、ナイコン?

289 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 13:24:32 ]
確かにわけわからん
レスを書くよりキーを叩く回数が少ないのに。




290 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 13:55:00 ]
重箱の隅とか言いつつperlバイナリのソースコードのレベルの話を求めてるんじゃね?

291 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 15:24:02 ]
% perl -MO=Deparse -e 'print q/aaaaa/ =~ tr/a//'
print 'aaaaa' =~ tr/a//;
-e syntax OK
% perl -MO=Deparse -e 'print q/aaaaa/ =~ tr/a/a/'
print 'aaaaa' =~ tr/a//;
-e syntax OK

292 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:10:44 ]
5.00503だと 'aaaaa' =~ tr/a// は
Can't modify constant item in character translation
と怒られてdieした。5.6.1なら置換回数が返された。

293 名前:デフォルトの名無しさん [2008/02/03(日) 23:24:30 ]
質問です。
だいぶ前に書かれたライブラリ(*.pl)が現役で動いているとします。
色々な箇所で使われているため、(動いている限りは)できるだけこれを修正したくありません。

このライブラリの中に、以下のようなサブルーチンがあります。

  sub Func
  {
    local *data = $_[0];

    #ハッシュにいろいろ詰め込む
  }

このサブルーチンは、以下のように呼び出すようにとサンプルコードが示されています。

  local %hash;
  &Func(*hash);

これを呼び出し側だけでもlocalを排除しようと、以下のように書き換えました。
実行してみた結果、ちゃんと動いているように見えます。

  my %hash;
  Func(\%hash);

この場合、
1.呼び出し元だけを書き換えることに意味はあるのか?
2.あるとしたら正しい書き方は?(cron、CGI、mod_perlで動かすことを想定)

よろしくお願いします。

294 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 02:17:53 ]
バージョンによる

295 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 02:25:32 ]
>>293
一般論としては、その修正で得られるのが自己満足だけなら、さわらないことをお勧めする。


296 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 10:16:16 ]
>294
あ、バージョン書き忘れてました。

 Perl 5.005
 Apache/1.3.28 (Unix)
 mod_perl/1.29

※下2つはCGIやmod_perl動作時のもの。


>295
自分がlocalの挙動をきちんと理解していないこともあり、予期せぬバグを生み出す原因になるので
なるべくmyで統一したいと考えています。

それに、そのサブルーチンを呼ぶときだけlocalなのも変かなーと。



297 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 10:21:10 ]
>>296
> 自分がlocalの挙動をきちんと理解していないこともあり、予期せぬバグを生み出す原因になるので
> なるべくmyで統一したいと考えています。

そんな変質的行為に突入する前に、localの挙動をきちんと理解しろ。

298 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 10:41:31 ]
localだと値を追いかけるのが面倒で……。

299 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 11:08:20 ]
基本的にはそれで正しく動くはず。
ただ、1.2.の問いがあるから「書き換える必要はないんじゃないの?」って言われてるわけで。




300 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 11:38:30 ]
ありがとうございます。

ライブラリの方を修正したいけど……中途半端に手を出したら悲惨なことになりそう……

301 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 11:52:29 ]
古いライブラリをmod_perlで使おうとは思わないなぁ

302 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 12:18:11 ]
古いライブラリをmod_perlで使うんじゃないんです
古いライブラリがmod_perlで動いてるんです……

303 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 12:22:08 ]
自分なら、そんな動作よくわからない関数mod_perlで使わないが・・・
なんかラッパー関数作ってそっち使うようにしてけば
そのうち古い関数は淘汰されるんでは?


304 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 12:51:20 ]
まあ、その少しずつやってます……。

305 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 13:53:56 ]
他人の書いたperlの読みにくさは異常
書き換えるよりも書きなおしたほうが早いことさえある

306 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 14:38:28 ]
読みながら書き直したりする。

以前、「どう見てもPrologです。本当にありがとうございました」な
プログラムをもらったことがある。


307 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 18:33:33 ]
よくわからない物はよくわかるようになるまで触らない方がいいとは思うな。
localが気になるならコメント添えてここはこういう理由って記述しときゃ後で見たときにもわかるし。
せめてそのライブラリの流れ把握できるくらいになってからでないと。

308 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 19:53:07 ]
localの98%くらいはmyにしてしまっても問題なくね?

309 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 00:06:02 ]
いや、97%くらいだろ。



310 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 05:09:26 ]
動いてんならいじるなよ

311 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 18:09:00 ]
懸念してるのは想定外の2%だか3%のバグの発生だからな。
上でも言われてるがいじるメリットが自己満足だけなら俺もそのままのがいいとは思う。

312 名前:デフォルトの名無しさん [2008/02/05(火) 20:11:35 ]
Exporter が import を強制的にexportしなくなったのって、
仕様変更はいつから?
実装変更は、perl 5.9から?

313 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 00:30:23 ]
人狼ってゲームのCGI設置したいんだけど(nifftyに)
できなくて質問CGIが動かないんだけど、以下エラー
Wed Feb 06 00:22:09 2008 Client Abort 2-- detected during CGI/SSI process
Wed Feb 06 00:22:10 2008 Warning: Connection closed and CGI process ID=400 still alive
Wed Feb 06 00:22:11 2008 Warning: Connection closed and CGI process ID=400 still alive
Wed Feb 06 00:22:12 2008 Warning: Connection closed and CGI process ID=400 still alive
Wed Feb 06 00:22:14 2008 Warning: Connection closed and CGI process ID=400 still alive
Wed Feb 06 00:22:15 2008 Warning: Connection closed and CGI process ID=400 still alive
Wed Feb 06 00:22:16 2008 Warning: Connection closed and CGI process ID=400 still alive
Wed Feb 06 00:22:18 2008 Warning: Connection closed and CGI process ID=400 still alive
Wed Feb 06 00:22:19 2008 Warning: Connection closed and CGI process ID=400 ・・・・・・
以下の文法あやしい?
sub sub_lock {
# 1分以上古いロックは削除する
if (-e $lock_path) {
local($mtime) = (stat($lock_path))[9];
if ($mtime < time - 60) { &sub_unlock; }
}
local($retry) = 5;
# mkdir関数式ロック
while (!mkdir($lock_path, 0755)) {
if (--$retry <= 0) { &error('LOCK','LOCK is BUSY'); }
sleep(1);
}
$sys_lockflag=1;
}

ニフティで設置してる人いたからできるとは思うんだけども誰か助けて(;;)。。。

314 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 01:18:29 ]
鼬害です

315 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 03:27:35 ]
>>1 の冒頭くらい読んでね。
ここはプログラムの板でってCGIの板じゃないよ。はい移動。
pc11.2ch.net/test/read.cgi/php/1176143582/

316 名前:デフォルトの名無しさん [2008/02/06(水) 16:20:24 ]
Perlって数ヶ月書かないだけでかなり忘れるんだけど、
おまいらPerlは毎日のように書いてるの?
俺のような記憶力弱いやつはPythonに替えるべき?

317 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 16:22:52 ]
$str =~ tr/a-z/A-Z/g;

として小文字を大文字に変換しようとしてますが、

Bareword found where operator expected〜

とか言ってエラーになります。
何度ググってもこれであってるぽいんですが…。わけがわかりません助けて。

318 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 16:26:31 ]
その前後が問題なんじゃないの?

319 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 16:29:44 ]
>>317自己レス
gをなくしたら通りました。g使えないの?
ぐぐってでてきた複数の例で使われてるんだけど。
試したVerは5.8.2と5.8.8。



320 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 16:31:36 ]
tr///はcdsだけみたいね

321 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 17:01:29 ]
uc($str);

322 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 17:26:53 ]
>>316
そんな毎日やるわけないけど
忘れたらリファレンスのページとか参考にすりゃいんじゃないの?

>>319
gはm s // だけのはず。
tr y は>>320
似てるけど一応動作は別もんだからね。

323 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 18:47:07 ]
>>316
Pythonでも、クラスのメソッドとか多くて覚えられないけどね。
ただ、Pythonに乗り換えたらPerlには戻れないと思う。

324 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 20:38:28 ]
>>316
使うときはWebサイトか昔書いたソースを見ながらやってる

325 名前:デフォルトの名無しさん [2008/02/06(水) 22:47:26 ]
>>316
毎日とは言わないが、けっこう頻繁に使ってるな。
1回しか使わないような使い捨てスクリプトは perl で書いてる。
何度も使うのはCやjavaやVBやVBScriptや・・・・
perl って便利ですよ。
バッチファイルみたいに手軽にかけて、バッチファイルよりも遥に高度な処理ができるからね。

perl が嫌われてる理由を俺なりに考えてみた。
・漢字(ShiftJIS)に対応していない
・サーバアプリに向かない(CGI は負荷が重い)
・ソース丸見えだから業務アプリに向かない(納品できない)

でも使いようによっては超強力だよ。

326 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:56:53 ]
perlって嫌われてるのか?
ところでperlで自分で書いたものって一月も前に書いたものは修正したくてならなくなるんだがwww

327 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:58:19 ]
> 漢字(ShiftJIS)に対応していない
Encode.pmがあるじゃない
> サーバアプリに向かない(CGI は負荷が重い)
Hatena, Mixi, その他探せば色々あると思うんだけど

Perlが糞な理由はOOPやリファレンス回りの小汚い記法と
省略の美学(笑)によって解読不能なコードが書けるからだろう

きちんと書けば(『Perlベストプラクティス』みたいに)大分ましだが
Perlの特長を削いでる感じがするね

328 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 00:21:34 ]
>>325
>ソース丸見えだから業務アプリに向かない
暗号化する仕組みがあるよ。


329 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 00:33:04 ]
個人で使うならRubyかPythonのほうが幸せになれる?



330 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 00:46:13 ]
>>329
個人で使うだけなら、迷わずPerl。

まぁ、好き好きだけどね。

331 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 00:57:31 ]
理由はユーザーが多いから?年期の入った言語ゆえにソースが転がってるから??
後発の言語のほうが練られてそうなんですが。
初学者なんでこのままマスターしようか乗り換えようか迷ってるのですわ。

332 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 01:02:24 ]
perlなんて簡単なバッチ処理を書いて使い捨てにするようなのに向いてる言語だから、
マスターした!って達成感を味わいたいなら別の言語にしたほうがいいよ。

333 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 01:05:36 ]
perlを使う理由なんて「どこにでもある」「たいていのものはCPANにある」しかないよ。

334 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 01:08:19 ]
マスターてのがどういう状態を指してるのか分からんが、
一通り文法覚えて書けるようになるだけなら、RubyもPythonも大して変わらんね

335 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 01:24:51 ]
Perlぐらい憶えときゃええがな。他言語へも1,2週で移行できるわな
そんな人生の選択みたいに迷うほどのことちゃいまっせ

336 名前:331 mailto:sage [2008/02/07(木) 01:43:10 ]
マスターって言葉使いましたが単にテキスト処理ならなんでもってレベルです。
レスありがとうございました。とりあえずPerl覚えときます。

337 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 01:50:17 ]
>>327
横入りだけどJcode使ってた身としてはEncodeはかゆいとこに手が届かないなぁ。
あと、今はPHPとかエディタの機能とかで知れてるけど正規表現に腰が引けてる人もいたかもね。
使いこなせば強い味方だけどいきなりだとさっぱりわからんだろうし。
記述の簡略化はあるねー即興で組んだやつはファイルのクローズせずに終わらせたりかなり乱暴なことしてる。

338 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 02:12:19 ]
良くも悪くも無茶な書きかたができるよね

339 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 09:46:44 ]
コード書く
→後日、意味もなく省略化を施す
→さらに後日、自分の書いたものが理解できず解読作業

ひとつのコードで3回も楽しめるPerlサイコー\(^o^)/



340 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 10:38:16 ]
>>339
あるあるwwwありすぎて困るwww

341 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 11:22:36 ]
日々のperlは書き捨て

342 名前:デフォルトの名無しさん [2008/02/07(木) 12:13:33 ]

激しくスレ違いかもしれませんが、質問です。

PCゲームを多重起動しようと試みたのですがダメでした。
大抵のゲームはWindowsのアカウントを2つ作成し、別々のアカウントで起動すれば問題ありません。

現在、Vistaを使っているのでXPではどうなるかはわかりませんが(XPは右クリックから別ユーザーで起動が可能)、
Vistaでその手法をとる場合、runasコマンドを使用することになります。
しかしこのコマンドで別々に起動しても、後から起動したほうが無効になってしまいました。

で、ここからがわけわかめなのですが、同一のデスクトップからの起動はダメでも、
Windowメニュー→ユーザー切り替えをし、別々に起動すればうまくいきました。

この違いはいったいなんなのでしょうか?
 

343 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 12:17:36 ]
このゆとりはいったいなんなのでしょうか?

344 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 12:27:32 ]
単なる誤爆じゃね? と思いたいが

345 名前:デフォルトの名無しさん [2008/02/07(木) 15:02:53 ]
use utf8;
use Encode;
use WWW::Mechanize;

my $start = "***.com/***html";
my $mech = WWW::Mechanize->new( autocheck => 1 );
$mech->get( $start );

my $phrase = 'こんにちは';
$mech->follow_link( text_regex => qr/$phrase/);
.....

見たいなコードを書いて日本語のページ(shiftjis)をとりに行ってるんだけど、
getのときの文字コードの判別がうまくいかないので、
text_regexがうまく動かないんですが、いい方法ないですか?


346 名前:デフォルトの名無しさん [2008/02/07(木) 17:29:33 ]
>>345
裏2chにあります

●裏2chの入り方
1・”名前欄”に「ura2ch.czfusianasana.net」と入力します。
  裏2chへ飛ぶためのコマンドです、間違えないように”「」”の内側の文字をコピーペーストして下さい。 
2・メール欄に閲覧したい板の関連キーワードを入力してください。
 例:ロリ、グロ、無修正など
3・”本文欄”にIDとパスワードを入力します。
  ID/パスワード=「guest/guest」
4・書き込みが終了すると2chのTOPに戻るのでもう一度入場
5・背景が暗転していたら成功、裏2chに侵入出来ています。

ちなみに裏2chに既存の板は勿論存在します、それにサーバーは外国のサーバーなので日本のややこしい法律に抵触する事も無いです
週末や2ちゃんねるで話題の事件があるときはアクセス数が増えサーバーに負荷がかかる為、つながりについ場合があります
スポーツ選手のコラや無臭性画像も多数UPされている板も存在します
それに完全な匿名性を誇るので違法行為を繰り返しても逮捕される事はまずありません

347 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 18:01:32 ]
すごい久々にそのコピペ見た。

348 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 18:07:56 ]
:content_cbで変換するとか?


349 名前:p4143-ipbfp205otsu.shiga.ocn.ne.jp ◆TWARamEjuA mailto:例:ロリ、グロ、無修正など sage [2008/02/07(木) 20:57:18 BE:3811875-2BP(6825)]
wktk♪

名前が長すぎるようです♪



350 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 21:41:57 ]
コマンドプロンプトでperl -vと打ち込むところでperlと打ち込んだら
exitと打ち込んでもコマンドプロンプトが終了できなくなってしまいます・・・

351 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 22:03:10 ]
__END__

352 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 22:08:09 ]
kill -KILL `pidof perl`

353 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 22:10:53 ]
^D

354 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 23:16:05 ]
CTRL+Z
エンター

355 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 01:33:02 ]
ctrl+s押して右往左往したことはある

356 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 09:05:11 ]
>>355
あるある。リンクが切れたのかと思っちまう。

#ちなみに、Ctrl+Qでぬける。


357 名前:345 mailto:sage [2008/02/08(金) 11:45:09 ]
自己解決しました。
裏2ちゃんねるにはいけませんでした、残念w


358 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 00:38:06 ]
>>332
>perlなんて簡単なバッチ処理を書いて使い捨てにするようなのに向いてる言語だから、

したり顔でそんな放言出来るなんて、おまいはまだまだだな。
perlでも信頼性と保守性を担った、アプリケーションと呼べるレベルのものまで書けるわさ。

359 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 00:57:31 ]
でっていう



360 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 01:14:05 ]
さくっと書いてさくっと終わるようなものに 「も」 向いている言語だというのは間違いないんじゃないかな

361 名前:デフォルトの名無しさん [2008/02/09(土) 01:32:18 ]
いっしょけんめいPerlのコアなプログラミングを学習したところで、
就職にはなんの役にも立たない。
それどころか、履歴書や職務経歴書に「Perl」などと書こうものなら
面接のその場で不採用決定。
C言語とか覚えとけば、java やその他の言語にも生かせるが
Perlじゃ「つぶしが利かない」からねぇ。

362 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 01:38:34 ]
まあ、趣味のプログラマな人間には全く関係ない話題ではあるなあ。

363 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 01:52:55 ]
ウチの会社なら…履歴書の審査は通るぞ!
(他の履歴とか面接でダメになる可能性はるけど)



364 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 01:54:14 ]
VBとか書いてあるよりはマシ。
まあ、会社の分野というか方向性によって違うんだろうけど。

365 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 06:17:51 ]
「特技: 自転車に乗れます」と書くようなもんだからな。

366 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 06:38:44 ]
参照渡しについて質問。

$a = 'aa';
$b = \$a;
print $$b;

のデリファレンスを

print $b;

この形で行いたいんですが、良い代入方法は無いでしょうか?
*b = *a;は配列とかも同じになるので無しで。

PHPの
$b = &$a;
みたなのを希望。


367 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 07:02:56 ]
>>366
www.kt.rim.or.jp/~kbk/perl5.005/perlmod.html#Symbol_Tables
$b = \$a;

368 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 07:07:50 ]
>>367
ありがとうございます。
読んで来ます。

369 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 09:14:46 ]
比較で一致しないのはなぜ? 整数だと一致するし、直接比較しても一致する。 $b = $b+0.1;
がみそ?

$a = 5.5;
$b = 4.5;

for($i = 0; $i< 11 ; $i++)
{
if($a == $b)
{
printf("match :");
}
else
{
printf("unmatch :");
}

printf( "%2.2f %2.2f \n",$b,$a);

$b = $b+0.1;
}

結果

unmatch :5.40 5.50
unmatch :5.50 5.50   (- 一致しない



370 名前:デフォルトの名無しさん [2008/02/09(土) 09:24:45 ]
>>369
異なる値が一致しないのは当然。

371 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 09:50:00 ]
浮動小数点を==で比較してはいけない。プログラミングの常識。

372 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 09:51:09 ]
差の絶対値がある閾値より小さいかどうかで調べるよね。

373 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 09:58:13 ]
へーそうなんだ。整数しか使ったことがないから知らなかった。
369じゃないけど勉強になったわ。

374 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 10:12:53 ]
cygwinのPerlだと
perl -e '$A=5.5;$B=5.500000000000001;print "match\n"if $A eq $B'
これがイコールになっちゃうみたいですね

375 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 11:18:45 ]
浮動小数点表現では0.1が循環小数になる。
(だからお金の計算に浮動小数点使っちゃだめ)

376 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 12:02:59 ]
>>374
eqの意味知っていて意図的に使ってるの?

377 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 14:08:21 ]
>>374
こりゃ便利だな。

378 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 17:17:17 ]
>>371
FAQのようですね。確かに今回初めて浮動小数点の比較を使ったんだけど、知らなかった。

379 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 17:29:41 ]
>>378
> FAQのようですね。

ちゃう。ちゃんとした教育を受けた人なら、質問を出す前に教わるくらいの事柄。





380 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 17:32:41 ]
>>375
じゃあ、お金の計算には何使えばいいんだ?
利息計算とかでいやでも小数使うと思うんだが。

381 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 17:40:17 ]
10進浮動小数点数






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<153KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef