我需要在 perl 中写下一个复杂的 MySQL 查询。我想将它构造成多行。
不幸的是,当使用 EOF 表示法时,perl 将 \n 插入到我的字符串中。有没有办法在多行中写下一个字符串,这样 perl 就不会在其中插入 \n ?我也不想用 + 明确地连接每一行。
不,但您可以在事后轻松删除这些行。例如,这个:
(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
的最后一件事有点不寻常,因为如果没有别的,通常在它后面有一个分号来表示语句的结束。
如果您在同一行上有多个 heredocs,则每一个都从前一个结束后的行开始:
my $abc = <<'EOF1' . <<'EOF2'; # same as: my $abc = "abc\nxyz\n";
abc
EOF1
xyz
EOF2