首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在perl中创建不带显式连接和不带连接的多行字符串\n

在perl中创建不带显式连接和不带连接的多行字符串\n
EN

Stack Overflow用户
提问于 2012-11-04 00:06:44
回答 1查看 340关注 0票数 0

我需要用perl语言编写一个复杂的MySQL查询。我想把它组织成多行。

不幸的是,在使用EOF表示法时,perl会在我的字符串中插入\n。有没有一种方法可以在多行中写下一个字符串,这样perl就不会在其中插入\n?我也不想显式地用+来连接每一行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-04 00:09:06

不能,但您可以很容易地在事后删除这些行。例如,如下所示:

代码语言:javascript
复制
(my $query = <<'EOF') =~ s/\n */ /g;
    SELECT col1,
           MIN(col2)
      FROM t
     WHERE col3 > 17
     GROUP
        BY col1
EOF

print "$query\n";

将打印以下内容:

代码语言:javascript
复制
    SELECT col1, MIN(col2) FROM table t WHERE col3 > 17 GROUP BY col1

编辑后添加的

关于以上内容,有几点需要注意:

  • my-expression括在圆括号中是可以的;该变量的作用域仍然是封闭的块。
  • A 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';

  • The heredoc notation <<在以下行启动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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13210925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档