【发布时间】:2013-10-30 21:41:33
【问题描述】:
我编写了以下代码,用于将参数传递给 sample.pl 中的 eval 函数并在另一个 Perl 文件 sample1.pl 中调用该函数。
sample1.pl:
use strict;
use warnings;
require 'sample.pl';
use subs "hello";
my $main2 = hello();
sub hello
{
print "Hello World!\n";
our $a=10;
our $b=20;
my $str="sample.pl";
my $xc=eval "sub{$str($a,$b)}";
}
示例.pl
use strict;
use warnings;
our $a;
our $b;
use subs "hello_world";
my $sdf=hello_world();
sub hello_world($a,$b)
{
print "Hello World!\n";
our $c=$a+$b;
print "This is the called function from sample !\n";
print "C: " .$c;
} 1;
我得到的输出是:
Illegal character in prototype for main::hello_world : $a,$b at D:/workspace/SamplePerl_project/sample.pl line 6.
Use of uninitialized value $b in addition (+) at D:/workspace/SamplePerl_project/sample.pl line 9.
Use of uninitialized value $a in addition (+) at D:/workspace/SamplePerl_project/sample.pl line 9.
Hello World!
This is the called function from sample !
C: 0Hello World!
你们能告诉我一个解决方案,如何通过传递参数通过 eval 调用函数
【问题讨论】:
-
这里有很多问题。 eval 用于编译和运行字符串,而不是读取文件并执行它。如果您想在 perl 中执行单独的文件,请使用反引号(作为一种解决方案)
-
让我们退后一步考虑一下。你到底想做什么?这是对问题的简化,还是您刚刚开始学习 Perl?您是否有需要完成的具体任务?请花点时间解释一下您的最终目标是什么。
-
你不应该使用
our,除了@ISA。使用my!并使用$a和$b以外的变量,因为sort使用的变量。 -
除非您是更有经验的 Perl 程序员,否则不要使用
eval。几乎你可以用它做的所有事情都可以通过另一种方式更安全地完成。