我需要在perl中写下一个复杂的MySQL查询。 我想用多行来构建它。
不幸的是,当使用EOF符号perl时插入\ n到我的字符串中。 有没有办法在多行中写下一个字符串,以便perl不会在其中插入\ n? 我不希望用+。
将每一行连接起来答案 0 :(得分:5)
不,但你可以在事后轻松删除这些行。例如,这个:
(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
- 表达式括在括号中;变量仍然作用于封闭块。 my
- 表达式计算其声明的变量,您可以继续修改该变量。例如:
(my $three) = 3; # same as: my $three = 3;
(my $four = 2) += 2; # same as: my $four = 4;
(my $five = 'twenty-five') =~ s/.*-//; # same as: my $five = 'five';
heredoc符号<<
启动跟随行的heredoc(多行字符串)。例如:
my $abc = <<'EOF' . 'xyz'; # same as: my $abc = "abc\nxyz";
abc
EOF
事实上,这实际上非常普遍; <<EOF
成为非常的最后一件事情有点不寻常,因为如果没有别的,那么通常会有一个分号来表示该陈述的结束。
如果你在同一行上有多个heredoc,那么每个heredoc都会在前一个结束后的行上开始:
my $abc = <<'EOF1' . <<'EOF2'; # same as: my $abc = "abc\nxyz\n";
abc
EOF1
xyz
EOF2