在perl中创建一个多行String而不显式连接且没有\ n

时间:2012-11-03 16:06:44

标签: string perl

我需要在perl中写下一个复杂的MySQL查询。 我想用多行来构建它。

不幸的是,当使用EOF符号perl时插入\ n到我的字符串中。 有没有办法在多行中写下一个字符串,以便perl不会在其中插入\ n? 我不希望用+。

将每一行连接起来

1 个答案:

答案 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

已编辑添加:

有关上述事项的一些注意事项:

  • 这是O.K.将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