ある条件を満たすときだけuse(あるいはrequire)をするということはどうしたらできますか。例えば、次のように、perlの版を判別してuseする/しないを分岐したいのですが、ifではできません。目的は、jperl環境で作成したプログラムを最新のperl環境に移行することです。
if ($]=~/^5\.12/){
use encoding 'cp932';
use Encode;
use subs qw(length);
sub length {
CORE::length(encode('cp932',shift));
}
#以下色々な関数を定義する
}
No.2ベストアンサー
- 回答日時:
use がコンパイル時に処理するのに対して require は「そこにきたとき」に処理します. なので, require であれば普通に if で分岐できます.
use はそのまま書くと if の条件に関係なく処理するから, #1 のように eval するくらいだと思います. 十分新しい Perl なら if ってプラグマがあるんだけど, jperl にはないと思う.
ところで, この length ってあってる? なんか decode っぽい気がするんだけど.... あと, 本当ならこんな小手先の対応でお茶を濁すんじゃなくって, きちんと書き直す方がいいんだよね.
No.1
- 回答日時:
eval を使うのはどうでしょうか。
if ($]=~/^5\.12/){
eval qq{
use encoding 'cp932';
use Encode;
use subs qw(length);
sub length {
CORE::length(encode('cp932',shift));
};
};
die $@ if ($@);
}
ところで、$] は 5.12 でよいのでしょうか。 perl 5.14.1 だと $] は 5.014001 でした。
この回答への補足
早速のご回答ありがとうございます。ご指摘のとおり版の数字は間違っていました。
この方式ですと、jperl 環境では(つまりifが偽になる場合)、Encodeなどのモジュールが存在しないため、プリコンパイルの段階でエラーになるようです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) laravel 本番環境でメールが送れません。 1 2023/02/17 17:57
- Perl Perl の外部モジュールの利用方法 3 2022/07/10 18:34
- 英語 移動可能な電話を借りる、use は使えますか? 4 2022/06/01 16:56
- PHP php エラー 2 2022/10/23 16:43
- 英語 Although bleeding does not occur on every occasion 1 2023/03/03 20:10
- Perl Perlのエラーについてご教授ください。初心者です。 CGIを別サーバに移したところ、Perlのバー 5 2023/05/31 10:48
- 英語 英語についてです。 If we use a train, we can go there faste 1 2022/04/16 22:26
- 英語 alcohol can be any of a food a drug or a poison de 4 2022/08/18 23:22
- 英語 The majority of currently available reviews focus 8 2022/08/07 05:55
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VHDLについてですが何がお...
-
Excel VBAでリンク切れをチェッ...
-
エクセルVBAでシートモジュール...
-
ユーザー定義関数に#NAME?が返...
-
例外処理のフローチャートの記...
-
教えて下さい。
-
VBでグローバル変数を宣言するには
-
Excel VBA 『Call』で呼び出す...
-
'Range'メソッドは失敗しました
-
VBAProjectのモジュ...
-
グラフのX,Y座標を取得したい
-
Excel VBA 標準モジュール内で...
-
VBA This Workbookモジュール...
-
EXECEL VBA コマンドボタンか...
-
Excelで時刻になったら知らせて...
-
VBSがコンパイルエラーになりま...
-
LCD ディスプレイを Raspberry ...
-
「デバイスは PRN を初期化でき...
-
erf(x)とerfc(x)のカタカナ読み...
-
Form間の値の渡し方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Perl 強制終了の回避について
-
Win32でInputBoxを実装するには?
-
VHDLについてですが何がお...
-
Perl/TkでURLを既定のブラウザ...
-
LWPでHTMLが取得できないことが...
-
Perl LWPでのIPv6エラー
-
LWP::Simpleでのgetについて
-
mechanizeのタイムアウト処理に...
-
TwitterAPI1.1でGetメソッド(...
-
Excel VBAでリンク切れをチェッ...
-
Excel VBA 定義されたプロージ...
-
例外処理のフローチャートの記...
-
ArduinoのジャイロモジュールMP...
-
ユーザー定義関数に#NAME?が返...
-
「デバイスは PRN を初期化でき...
-
VBAで別モジュールへの変数の受...
-
Excel VBA 『Call』で呼び出す...
-
エクセルVBAでシートモジュール...
-
LCD ディスプレイを Raspberry ...
-
モジュールとは何ですか
おすすめ情報