0

我需要在 perl 中写下一个复杂的 MySQL 查询。我想将它构造成多行。

不幸的是,当使用 EOF 表示法时,perl 将 \n 插入到我的字符串中。有没有办法在多行中写下一个字符串,这样 perl 就不会在其中插入 \n ?我也不想用 + 明确地连接每一行。

4

1 回答 1

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的最后件事有点不寻常,因为如果没有别的,通常在它后面有一个分号来表示语句的结束。

    如果您在同一行上有多个 heredocs,则每一个都从前一个结束后的行开始:

    my $abc = <<'EOF1' . <<'EOF2';    # same as:  my $abc = "abc\nxyz\n";
    abc
    EOF1
    xyz
    EOF2
    
于 2012-11-03T16:09:06.383 回答