以下のsub.plは単体で呼び出すとうまく動くのですが、main.plから呼び出すと |$ perl sub.pl を実行します |"\x{0436}" does not map to cp932. "\x{042c}" does not map to cp932. "\x{00b5}" does not map to cp932. ... となってしまいます。何故化けてしまうのでしょうか? やりたかったこと(標準出力を一時的に切り替えたい)はselectを使うことで解決したのですが、 以下がうまく行かない理由が分からず、分かる方がいらしたら教えていただきたいです。 両ファイルともutf-8で保存しています。windows環境です。
#### main.pl #### use strict; use utf8; use Encode; binmode STDIN, ":encoding(cp932)"; binmode STDOUT, ":encoding(cp932)"; binmode STDERR, ":encoding(cp932)"; my $command = "perl sub.pl"; print "> $command を実行します\n"; print decode("cp932", `$command`);
### sub.pl #### use strict; use utf8; binmode STDIN, ":encoding(cp932)"; binmode STDOUT, ":encoding(cp932)"; binmode STDERR, ":encoding(cp932)"; open DEF_STDOUT, ">&STDOUT"; open STDOUT, ">:encoding(cp932)", "./test.txt" || die "ファイルが開けません: $!"; print "testです"; close STDOUT; open STDOUT, ">&DEF_STDOUT"; binmode STDOUT, ":encoding(cp932)"; # この行を消すと、main.plの実行は上手くいくのですが、単体実行でwide character in print 化けます。 print "生成しました\n";