Perlについての質問箱 23箱目
■ このスレッドは過去ログ倉庫に格納されています
0142デフォルトの名無しさん
2006/03/16(木) 04:42:13linuxは普段使ってないから、(knoppixで)軽く確認した程度だが...
セグメンテーションフォルトは、requireされた側でByteLoader.pmの読み込み
が発生したときに起こっていた。
つまり、読みこみ側(test1.pl)が使わないByteLoaderを読まれる側(test2.pl)が
使っているのが原因。
現状で唯一の対策はByteLoaderを使わない事。
また、表示内容の不一致は、$valではなく$dbgを表示している為。
バイトコード化されたtest2.plをrequireした時点で、$valと$dbgは別物になる。
確認は、こんな感じで。
#!/usr/bin/perl
our $val = {'dummy'=>''};
my $dbg=$val;
print "-initial\nval($val)=[",join(',',keys $val),"]\n";
print "dbg($dbg)=[",join(',',keys $val),"]\n";
require "./test2.pl";
print "-Required\nval($val)=[",join(',',keys $val),"]\n";
print "dbg($dbg)=[",join(',',keys $dbg),"]\n";
hoge::hoge();
print "-hoged\nval($val)=[",join(',',keys $val),"]\n";
print "dbg($dbg)=[",join(',',keys $dbg),"]\n";
exit;
初期化される変数の一覧は、バイトコード化されたモノをvi等で見ればわかる。
ここまで書けば、解決方法は解るよね?
正攻法以外に、嫌な方法や汚い方法があるけど、嫌な方法が手軽でPerlらしいと思う。
>>133
ここに書いた程度しか理解してないのに言うのも何だけど、perlccは実験段階だろ。
■ このスレッドは過去ログ倉庫に格納されています