37,721
社区成员
发帖
与我相关
我的任务
分享
open( FILEHANDLE, $my_conffile ) or die "$0: $my_conffile: $!\n";
flock( FILEHANDLE, 1 );
seek( FILEHANDLE, 0, 0 );
while( <FILEHANDLE> ){
$my_confcode .= $_;
}
$my_returnconf = eval( $my_confcode );
if( $@ ){
$@ =~ s/\s+$//s;
die "$0: $@\n";
};
return $my_returnconf
print "hello,word!\n";
$a = eval("1+2"); # eval返回一个值,你可以用来赋值、打印或运算。但如果你不用它,
# 它也就没有了,即eval不会主动改变当前环境。
eval("$b = 1"); # eval会建立一个变量$b,改变了当前环境,后面你可以使用$b
print($b);
另外,因为外面文件的内容是你没法控制的,所以盲目eval也是很危险的。my %ApacheStatGen;
%ApacheStatGen = %{ confload( $CONFFILE ) };
sub confload{
my $my_conffile = shift;
my $my_confcode = "";
my $my_returnconf;
print "my_conffile=[$my_conffile]\n";
die "$0: $my_conffile is not regular text file.\n" unless( -T $my_conffile );
open( FILEHANDLE, $my_conffile ) or die "$0: $my_conffile: $!\n";
flock( FILEHANDLE, 1 );
seek( FILEHANDLE, 0, 0 );
while( <FILEHANDLE> ){
$my_confcode .= $_;
}
close( FILEHANDLE );
print "my_confcode=[$my_confcode]\n";
$my_returnconf = eval( $my_confcode );
print "my_returnconf=[$my_returnconf]\n";
if( $@ ){
$@ =~ s/\s+$//s;
die "$0: $@\n";
};
print "my_returnconf=[$my_returnconf]\n";
return( $my_returnconf );
}
原代码如上!