在Perl中打印字符串

时间:2010-11-05 17:59:18

标签: string perl escaping character

使用子程序是否有一种简单的方法可以在Perl中打印字符串而不必转义每个特殊字符?

这就是我想要做的事情:

print   DELIMITER <I don't care what is here> DELIMITER

显然,如果我可以将字符串作为分隔符而不是特殊字符,那将会很棒。

6 个答案:

答案 0 :(得分:8)

perldoc perlop,在“引用和引用类操作符”下,包含您需要的所有内容。

  

虽然我们通常将引号视为文字值,但在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 ''.

答案 1 :(得分:4)

$str = q(this is a "string");
print $str;

如果你的意思是带有'特殊字符'的引号和撇号

答案 2 :(得分:3)

您可以使用__DATA__指令将所有以下行视为可以从DATA句柄访问的文件:

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

__DATA__
#!/usr/bin/perl -w
use Some::Module;
....

或者您可以使用heredoc:

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

答案 3 :(得分:2)

打印并没有对转义做特殊的事情,双引号字符串正在这样做。您可能想尝试使用单引号字符串:

print 'this is \n', "\n";

在单引号字符串中,必须转义的唯一字符是单引号和在字符串结尾之前发生的反斜杠(即'foo\\')。

重要的是要注意插值不适用于单引号字符串,所以

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

不会打印$foo

的内容

答案 4 :(得分:1)

您可以使用qqq几乎使用任何字符。例如:

#!/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 DELIMITER foo DELIMITER。但是,你可以使用heredocs产生类似的效果:

print <<DELIMITER
...
DELIMETER
;

print <<'DELIMETER'
...
DELIMETER
;

但您的源代码真的丑陋。

答案 5 :(得分:0)

如果你想按字面意思打印一个字符串,你就有了Perl 5.10或更高版本

say 'This is a string with "quotes"' ;

将使用换行符打印字符串。重要的是使用单引号' '而不是双引号" "