就像C中的#define
(预处理器指令)一样,有没有办法在perl中定义代码块。
use constant PI=>3.14;
像这样我只能定义变量。 我可以用一段代码做同样的事吗?
以下代码部分不起作用。我怎样才能实现同样的目标?
use constant FUN=>{
$i=3;
while($i)
{
print "$i\n";--$i;}
}
答案 0 :(得分:3)
Perl没有宏。 (一个充分疯狂的程序员可以使用源过滤器伪造它们,但最好避免使用那种黑魔法。)use constant
不会像C预处理器那样触发内联替换。相反,它创建一个始终返回相同值的子例程。当你写
use constant PI => 3.14;
Perl的作用(基本上)
sub PI() { 3.14 }
constant
pragma只能用于定义值,而不能用于定义代码。要重用代码,请改为定义子程序。
答案 1 :(得分:2)
大多数人都会写下(给予或采取大括号的定位):
sub FUN
{
my $i = 3;
while ($i)
{
print "$i\n";
--$i;
}
}
你可以这样做:
my $FUN = sub { print "$_\n" foreach (qw(3 2 1)); };
&$FUN();
答案 2 :(得分:0)
使用sub
关键字定义功能。
与C语言不同,预处理在诸如perl等脚本语言中几乎无用。
答案 3 :(得分:0)
这有点麻烦,但是您可以使用字符串eval来实现代码的运行时评估:
use strict;
use warnings;
my $code = "
my \$value = 17;
print \"\$value\n\";
" ;
eval $code ;
结果:
[pt@localhost bin]$ perl testit2
17
[pt@localhost bin]$
写任何复杂的东西都需要疯狂的转义技能。
更新:如果您使用q()而不是“,那么将需要更少的转义。
答案 4 :(得分:-1)