使用do执行存储在文件中的Perl代码

在最近的文章《如何使用eval在文本文件中执行Perl代码》之后,Perl程序员mithaldu指出,Perl内置函数do提供了类似的功能。

这是文本文件‘print.txt’的内容

print "it works! \n";

下面是使用eval的原始解决方案

use File::Slurp;
use strict;
use warnings;

my $command = read_file('print.txt');
eval $command;

以下是使用do重写的相同代码

use strict;
use warnings;

do 'print.txt';

使用do比eval解决方案需要更少的代码行,并且不需要打开文件句柄或使用模块来读取文件(例如File::Slurp)。do函数还会更新@INC和%INC,因此它可以用来加载程序后面使用的模块(eval不会这样做)。

在需要解析文本文件中的非Perl代码的情况,可能需要使用eval而不是do。

使用do并不能替代执行存储在单独文件中的代码所固有的风险 - 这是一个酷技巧,但不是一个推荐的解决方案。

官方Perl文档Perldoc提供了关于doeval的更多信息。


本文最初发布在PerlTricks.com

标签

David Farrell

David是一位专业程序员,他经常推文博客关于代码和编程艺术。

浏览他们的文章

反馈

这篇文章有什么问题吗?请在GitHub上打开一个问题或拉取请求来帮助我们。