![]() |
構文 |
|
eval 実行内容1(EXPR形式) eval {実行内容2}(BLOCK形式) |
返り値 |
|
実行内容を内部で実行し,内部で最後に評価された値 |
説明
- 実行内容を内部で実行します。構文エラーや実行時エラーが発生した場合には未定義値を返し,$@にエラー・メッセージを設定します。このため,例外処理を記述する際に利用されます(例外処理についてはdieの項にもう少し詳しいサンプルがあります)。
- EXPR形式の場合,実行内容1の結果をPerlプログラムとして実行します。evalを実行するたびに実行内容1が評価されます。外部からの入力を実行すると,「不正なプログラムの実行につながるので注意して下さい。
- BLOCK形式の場合,実行内容2をPerlプログラムとして実行します。コンパイル時に実行内容2の内容がパースされます。
使用例
#!/usr/bin/perl
use strict;
use warnings;
my $expr = '1+2+3';
my $ret1 = eval $expr; # EXPR形式(1+2+3を実行する)
my $ret2 = eval { $expr }; # BLOCK形式($exprを実行する)
print $ret1, "\n"; # 6
print $ret2, "\n"; # 1+2+3
#!/usr/bin/perl
use strict;
use warnings;
my @items = qw(
1+2+3
1+2-3
(1+2)*3
int(7/3)
);
foreach my $item (@items) {
printf "%s=%s\n", $item, eval $item;
}
#!/usr/bin/perl
use strict;
use warnings;
eval {
my $filename = 'dummyfile';
open my $fh, "<", $filename or die "$!:$filename";
print <$fh>;
close $fh;
};
if ($@) {
print "Error!\n";
print $@;
exit 1;
}
exit 0;