String 用Perl打印字符串

String 用Perl打印字符串,string,perl,escaping,character,String,Perl,Escaping,Character,有没有一种简单的方法,可以使用一个子例程,在Perl中打印字符串而不转义每个特殊字符 这就是我想做的: print DELIMITER <I don't care what is here> DELIMITER 打印分隔符 如果您指的是带有“特殊字符”的引号和撇号,则打印操作不会对转义进行特殊处理,而是使用双引号字符串。您可能希望尝试使用单引号字符串: print 'this is \n', "\n"; 在单引号字符串中,唯一必须转义的字符是单引号和紧跟在字符串末尾之前的反斜

有没有一种简单的方法,可以使用一个子例程,在Perl中打印字符串而不转义每个特殊字符

这就是我想做的:

print   DELIMITER <I don't care what is here> DELIMITER
打印分隔符

如果您指的是带有“特殊字符”的引号和撇号,则打印操作不会对转义进行特殊处理,而是使用双引号字符串。您可能希望尝试使用单引号字符串:

print 'this is \n', "\n";
在单引号字符串中,唯一必须转义的字符是单引号和紧跟在字符串末尾之前的反斜杠(即
'foo\\\'

需要注意的是,插值不适用于单引号字符串,因此

print 'foo is $foo', "\n";

如果您希望按字面方式打印字符串,并且使用Perl 5.10或更高版本,则不会打印
$foo
的内容

say 'This is a string with "quotes"' ;
将使用换行符打印字符串。。重要的是使用单引号而不是双引号。在“引号和类似引号的运算符”下,包含您需要的所有内容

虽然我们通常将引号视为文字值,但在Perl中它们充当运算符,提供各种插值和模式匹配 能力。Perl为这些行为提供了习惯的引号字符,但也提供了一种方法,让您可以为任何行为选择引号字符 他们。在下表中,{}表示您选择的任何一对分隔符

Customary  Generic        Meaning        Interpolates
    ''       q{}          Literal             no
    ""      qq{}          Literal             yes
    ``      qx{}          Command             yes*
            qw{}         Word list            no
    //       m{}       Pattern match          yes*
            qr{}          Pattern             yes*
             s{}{}      Substitution          yes*
            tr{}{}    Transliteration         no (but see below)
    <<EOF                 here-doc            yes*

    * unless the delimiter is ''.
习惯通用含义插入
''q{}文字编号
”“是的
``qx{}命令是*
qw{}单词列表编号
//m{}模式匹配是*
qr{}模式是*
s{}{}{}替换是*
tr{}{}音译no(但见下文)

您可以使用
\uuuu DATA\uuuu
指令,该指令将以下所有行视为可从
数据
句柄访问的文件:

while (<DATA>) {
   print # or do something else with the lines
}

__DATA__
#!/usr/bin/perl -w
use Some::Module;
....
while(){
打印#或对这些行执行其他操作
}
__资料__
#!/usr/bin/perl-w
使用一些::模块;
....
或者,您也可以使用heredoc:

my $string = <<'END';  #single quotes prevent any interpolation
#!/usr/bin/perl -b
use Some::Module;
....
END

my$string=你几乎可以在
q
qq
中使用你想要的任何字符。例如:

#!/usr/bin/perl

use utf8;
use strict; use warnings;

print q∞This is a test∞;
print qq☼\nThis is another test\n☼;
print q»But, what is the point?»;
print qq\nYou are just making life hard on yourself!\n;
print qq¿That last one is tricky\n¿;
您不能使用
qq分隔符foo分隔符
。但是,您可以使用heredocs获得类似的效果:

print <<DELIMITER
...
DELIMETER
;

print你能给出一些你觉得很难打印的字符串的例子吗?里面有很多单引号。想法是打印字符串的内容,而不管里面是什么。用于打印的子例程,可在其中指定字符串分隔符。@这将是
q/
qq/
通用字符串运算符。您可以指定分隔符,因此可以说
my$s=qq(包含“and”);
有两种类型的分隔符:括号分隔符和非括号分隔符。括号分隔符是
()
[]
{}
。第一个字符启动字符串,第二个字符关闭字符串,并警告允许嵌套(因此
qq(他说“嘿(那是我的帕伦)”;
是有效字符串)。第二次看到时,无括号分隔符关闭字符串(例如
qq/foo/;
)。这个问题仍然没有意义。请显示已断开的代码。我可以使用字符串作为分隔符吗?假设qq分隔符foo DELIMITERI有一个保证的解决方案:代码点U+FFFE和F+FFFF(以及其他)保证对交换是非法的,但您可以在内部使用它们。这还包括代码点>0x10\u FFFF,如
\x{DEADBEEF}
。我以为你应该把分号放在行上,你可以用
来做这件事,但你需要
使用功能“say”
或指定一个最低版本,如
使用5.10.0
来做这件事,或者你可以用-E而不是-E作为一行。请参阅
perldoc功能
print <<DELIMITER
...
DELIMETER
;
print <<'DELIMETER'
...
DELIMETER
;