• ベストアンサー

use文を分岐させる方法?

Perl5.6とPerl5.8の環境でスクリプトを書いているのですが、perl5.8では use encoding "shiftjis"; はエラーなく動作しますが、Perl5.6ではだめです。 同じソースでそれぞれによって動作を変えたいのですが、useはif文で分岐をかけても実行されるので、 同じソースで処理を分ける他の方法はあるのでしょうか? × if($] >= '5.008001'){ use encoding "shiftjis"; }

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

useの行を文字列にしてevalすれば、とりあえずエラーは出なくなります。 if($] >= '5.008001'){ eval "use encoding 'shiftjis'"; } 通常useは処理が始まる前に実行されます(ifで分岐をかけても実行されるわけではないです)が、文字列を引数とするevalの中ではeval文がきたとき、その都度コンパイルされるのでif文で分岐をかけることができます。

その他の回答 (1)

  • nightowl
  • ベストアンサー率44% (490/1101)
回答No.2

以前の質問と全く同じように見えるが、回答者氏のアイディアでは 解決しなかったのかね。あの時に補足要求しておけばよかったのに。 せっかく eval で例外処理をしているテクニックも見逃されているようだし、 まさに「豚に真珠」ですな。 use 文は BEGIN ブロックで囲まれたように読み込まれて コンパイルされるから、実行時に分岐しようったってうまくいくはずがない。 あなたの嫌いなラクダ本に明記してあるんだが、本当に進歩がない人だね。 http://www.att.or.jp/perl/man/perlmod.1.html

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1601046