Perlについての質問箱 65箱目 (112レス)
Perlについての質問箱 65箱目 http://mevius.5ch.net/test/read.cgi/tech/1616856733/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
99: デフォルトの名無しさん [] 2023/06/07(水) 16:24:29.96 ID:ywJ2sk66 Perlのpackage内my変数についてちょっと疑問。 myはレキシカルな局所変数なので、他package内のmy変数は他のpackageからは参照できず、参照したければmy出なくourにすると解釈していたが。 packageが別々のソースファイルだった場合はその通りですっきりしたスコープ仕様だと思っていたが… ところが二つのpackageが同じソースファイル内にあり、他のpackageのmy変数を参照すると変な感じ: 例 use strict; use warnings; package P1; our $aa = __PACKAGE__.'aa'; my $bb = __PACKAGE__.'bb'; package P2; print __PACKAGE__ . "(1)$P1::aa\n"; print __PACKAGE__ . "(2)$aa\n"; print __PACKAGE__ . "(3)$P1::bb\n"; print __PACKAGE__ . "(4)$bb\n"; 実行結果 $ perl package_a_b.pl Name "P1::bb" used only once: possible typo at package_a_b.pl line 14. P2(1)P1aa P2(2)P1aa Use of uninitialized value $P1::bb in concatenation (.) or string at package_a_b.pl line 14. P2(3) P2(4)P1bb P2からはP1のmy $bbが$bbで参照できて、$P1::bb だとエラー、なんだこりゃ…??? ちな 5.36.0 と 530.0 で確認した。 http://mevius.5ch.net/test/read.cgi/tech/1616856733/99
100: デフォルトの名無しさん [sage] 2023/06/07(水) 21:31:39.79 ID:w5fTdC21 myはpackageとは何の関係もない packageにmyのシンボルテーブルはない だから(3)ではuninitialized value $P1::bbになる (4)は単なる文字列 正常な振る舞いだよ http://mevius.5ch.net/test/read.cgi/tech/1616856733/100
101: デフォルトの名無しさん [sage] 2023/06/07(水) 23:23:43.75 ID:ywJ2sk66 >>100 回答ありがとう、myがそういうものだと今日まで知らずにいた…おrz http://mevius.5ch.net/test/read.cgi/tech/1616856733/101
102: デフォルトの名無しさん [sage] 2023/06/08(木) 00:48:41.98 ID:ZzDLFGD7 myのスコープはブロック、ファイル、evalの3つ パッケージとは無関係だから>>99ではファイルスコープになるね package P2でもう一度my $bb宣言したらエラーになることからも分かる http://mevius.5ch.net/test/read.cgi/tech/1616856733/102
103: デフォルトの名無しさん [] 2024/02/23(金) 07:50:24.93 ID:3WpPBYhb あげ http://mevius.5ch.net/test/read.cgi/tech/1616856733/103
104: デフォルトの名無しさん [] 2024/04/14(日) 21:35:03.76 ID:byNUCOGR ローカルサーバーでsrandとrandで生成した乱数の値と レンタルサーバーでsrandとrandで生成した乱数の値が違うのは何で? どちらもsrandの値は同じとする。 http://mevius.5ch.net/test/read.cgi/tech/1616856733/104
105: デフォルトの名無しさん [sage] 2024/04/15(月) 00:21:17.88 ID:9X9lvy+w このへんから探ってみては https://github.com/search?q=repo%3APerl%2Fperl5+rand&type=code 煽りじゃないよ しんどいので俺はここまで http://mevius.5ch.net/test/read.cgi/tech/1616856733/105
106: デフォルトの名無しさん [sage] 2024/04/15(月) 12:41:15.37 ID:cLz3iDP/ プラットフォームのifdefで切り分けてそうだからそれっぽいマクロ定数でも探すといいかも http://mevius.5ch.net/test/read.cgi/tech/1616856733/106
107: デフォルトの名無しさん [sage] 2024/04/15(月) 17:29:37.18 ID:UgC/I+2W ビルドされた環境のCライブラリ依存じゃない? 同じにしたいならMath::Random::MTとか使えばいいんでね http://mevius.5ch.net/test/read.cgi/tech/1616856733/107
108: デフォルトの名無しさん [sage] 2024/04/16(火) 09:32:57.50 ID:Fr3sHPgG >>104 一般論としてPerlの内部実装は無保証でコロッコロ変わるので、疑似乱数の再現性を担保したいならコードを同梱してしまうのが最も確実 cでたったこれだけ、Perlで詰めれば20行も要らんだろう、局所使用ならファイル内subでいいレベル github.com/bmurray7/mersenne-twister-examples/blob/master/c-mersenne-twister.c 同階層にpl版もある 丁寧にコードされパッケ化で無意味に冗長なので参考ならこっち アルゴリズム特許あるか知らんし、ライセンスを許容するなら同梱 http://mevius.5ch.net/test/read.cgi/tech/1616856733/108
109: デフォルトの名無しさん [sage] 2024/04/16(火) 14:14:10.10 ID:ipSHedtl print"A\n",print"B\n"; これの動き教えてくれよ 出来ればサンプルソースも http://mevius.5ch.net/test/read.cgi/tech/1616856733/109
110: デフォルトの名無しさん [sage] 2024/04/16(火) 15:16:06.51 ID:UEoqQOMp print "A\n", print "B\n"; print("A\n", print("B\n")); まず最初のprintの引数中のprint("B\n")が評価され"B\n"が出力される print("B\n")が成功したので真の値1を帰す print("A\n", 1)となる B A 1と表示される print "X\n", 3 > 0; print "X\n", 3 < 0; print "X\n", open(my $fh, "no_such_file.txt"); http://mevius.5ch.net/test/read.cgi/tech/1616856733/110
111: デフォルトの名無しさん [sage] 2024/04/16(火) 15:37:42.78 ID:E/T1RXIg 成る程、() 使わない副作用意識しないとダメですね ありがとうございます http://mevius.5ch.net/test/read.cgi/tech/1616856733/111
112: デフォルトの名無しさん [sage] 2024/11/17(日) 20:01:50.35 ID:w8x6IOGf poetryと同等の仕組みがないときつい http://mevius.5ch.net/test/read.cgi/tech/1616856733/112
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.006s