什么';在Perl中,打印多行字符串而不进行变量替换是一种简单的方法吗?
我有一个Perl程序,它读入一组数据,对其进行剪切,然后输出几种不同的文件格式。我想让Perl成为其中一种格式(以.pm包的形式),并允许人们在自己的Perl脚本中使用隐藏的数据 打印数据很容易使用 我还想将一些助手函数打印到生成的包中 打印多行字符串而不进行变量替换的简单方法是什么 我希望能够做到:什么';在Perl中,打印多行字符串而不进行变量替换是一种简单的方法吗?,perl,Perl,我有一个Perl程序,它读入一组数据,对其进行剪切,然后输出几种不同的文件格式。我想让Perl成为其中一种格式(以.pm包的形式),并允许人们在自己的Perl脚本中使用隐藏的数据 打印数据很容易使用 我还想将一些助手函数打印到生成的包中 打印多行字符串而不进行变量替换的简单方法是什么 我希望能够做到: print <<EOL; sub xyz { my $var = shift; } EOL print将分隔符的名称括在单引号中,不会进行插值 print <
print <<EOL;
sub xyz {
my $var = shift;
}
EOL
print将分隔符的名称括在单引号中,不会进行插值
print <<'EOL';
sub xyz {
my $var = shift;
}
EOL
print您可以使用像或这样的模板包
或者,您可以推出自己的基本模板系统,其外观如下:
my %vars = qw( foo 1 bar 2 );
Write_Code(\$vars);
sub Write_Code {
my $vars = shift;
my $code = <<'END';
sub baz {
my $foo = <%foo%>;
my $bar = <%bar%>;
return $foo + $bar;
}
END
while ( my ($key, $value) = each %$vars ) {
$code =~ s/<%$key%>/$value/g;
}
return $code;
}
my $mail = "Hello!
Blah blah.";
my%vars=qw(foo 1 bar 2);
写入\u代码(\$vars);
子写入代码{
我的$vars=班次;
my$code=尝试将您的代码编写为实际的perl子例程,然后使用在运行时获取源代码。使用数据节存储perl代码:
#!/usr/bin/perl
use strict;
use warnings;
print <DATA>;
#print munged data
__DATA__
package MungedData;
use strict;
use warnings;
sub foo {
print "foo\n";
}
!/usr/bin/perl
严格使用;
使用警告;
印刷品;
#打印蒙版数据
__资料__
包装材料;
严格使用;
使用警告;
sub-foo{
打印“foo\n”;
}
您实际上可以在下一行继续字符串文字,如下所示:
my %vars = qw( foo 1 bar 2 );
Write_Code(\$vars);
sub Write_Code {
my $vars = shift;
my $code = <<'END';
sub baz {
my $foo = <%foo%>;
my $bar = <%bar%>;
return $foo + $bar;
}
END
while ( my ($key, $value) = each %$vars ) {
$code =~ s/<%$key%>/$value/g;
}
return $code;
}
my $mail = "Hello!
Blah blah.";
就我个人而言,我发现它比herdocs更具可读性(B::Deparse不能正确捕获闭包,而闭包比人们想象的更为常见。请使用Data::Dump::Streamer。@Schwern:B::Deparse对闭包做一件事(假设eval上下文正确),Data::Dump::Streamer做另一件事(假设除了转储代码之外,任何封闭变量都不被使用)。这两种情况都不能说是“不正确的”。如果您正在创建一个实际的Perl子例程,请不要对其进行字符串化。将其设置为库。这不是捕鼠器游戏:)我建议查看Data::Dump::Streamer,因为它比Data::Dumper更准确。建议使用模板模块。请不要滚动自己的:-)没关系,我想我不得不哭着睡在一堆奇怪的信誉点上