我需要用perl语言编写一个复杂的MySQL查询。我想把它组织成多行。
不幸的是,在使用EOF表示法时,perl会在我的字符串中插入\n。有没有一种方法可以在多行中写下一个字符串,这样perl就不会在其中插入\n?我也不想显式地用+来连接每一行。
发布于 2012-11-04 00:09:06
不能,但您可以很容易地在事后删除这些行。例如,如下所示:
(my $query = <<'EOF') =~ s/\n */ /g;
SELECT col1,
MIN(col2)
FROM t
WHERE col3 > 17
GROUP
BY col1
EOF
print "$query\n";将打印以下内容:
SELECT col1, MIN(col2) FROM table t WHERE col3 > 17 GROUP BY col1编辑后添加的:
关于以上内容,有几点需要注意:
my-expression括在圆括号中是可以的;该变量的作用域仍然是封闭的块。my-expression的计算结果是它声明的变量,您可以继续修改该变量。例如:(my $three) = 3;# same as: my $three = 3;(my $four = 2) += 2;# same as: my $four = 4;(my $five =‘25-five’) =~ s/.*-//;# same as: my $five = 'five';
<<在以下行启动heredoc (多行字符串)。例如:我的$abc = <<'EOF‘。‘nxyz’;#等同于: my $abc = " abc \nxyz";abc EOF
事实上,这实际上是很常见的;对于<<EOF来说,作为最后一行的事情有点不寻常,因为如果没有其他事情,它后面通常会有一个分号来表示语句的结束。
如果在同一行上有多个heredocs,则每个heredocs在前一个heredocs结束后的行上开始:
my $abc = <<'EOF1‘。;#等同于: my $abc = " abc \nxyz\n";abc EOF1 xyz EOF2
https://stackoverflow.com/questions/13210925
复制相似问题