如何在Perl中引用长字符串?

Dav*_*d B 6 string quotes perl

我通常使用简单的引号,但有时我得到很长的行,我不能打破,也需要使用转义字符,所以我得到这样的东西:

my $str = "select query_accession,query_tag,hit_accession,hit_tag,significance from summaryTables where query_id = \'$query_id\';"
Run Code Online (Sandbox Code Playgroud)

我知道在Perl中有各种其他方法来表示字符串.你会推荐什么?

更新 感谢所有人提供与SQL相关的建议.我学到了一些有价值的东西,但是,我的问题仍然存在(作为一般的问题,不管SQL):是否有一些运算符允许引用而不会捕获换行符?

我现在做的是:

my $str = "123 123 456 sdndfnd sdfdmd " .
 "dfsdjkfs 343489 dfjsdj 3 34kdfsk kd " .
 "fd kd9534 rfg 546 5";
Run Code Online (Sandbox Code Playgroud)

这很难看.

bri*_*foy 10

我喜欢这里的文档,虽然有些人鄙视它们,因为终结器必须出现在行的开头,尽管你的缩进级别.

my $str = <<"SQL";
  SELECT 
    query_accession,
    query_tag,
    hit_accession,
    hit_tag,
    significance
  FROM   
    summaryTables
  WHERE 
    query_id = ?
SQL
Run Code Online (Sandbox Code Playgroud)

我也喜欢格式化我的SQL,所以我可以很容易地看到语句中的结构.


Aif*_*Aif 5

看看perlop的Quote-Like Operators.使用qq了双引号和q单引号.


Cha*_*ens 4

不。Perl 5 的所有字符串创建方法都知道并包含换行符。您可以像在问题中那样使用串联运算符,也可以抽象出解决问题所需的代码:

#!/usr/bin/perl

use strict;
use warnings;

sub single_line {
    my @strings = @_;
    for (@strings) {
        s/\s+/ /g;
        s/^\s+|\s+$//g;
    }
    return wantarray ? @strings : $strings[0];
}


my $sql = single_line "
    select query_accession,query_tag,hit_accession,hit_tag,significance
    from summaryTables
    where query_id = ?;
";

print "[$sql]\n";
Run Code Online (Sandbox Code Playgroud)