Печать строки в Perl - PullRequest
       40

Печать строки в Perl

2 голосов
/ 05 ноября 2010

Есть ли простой способ, возможно, с помощью подпрограммы, напечатать строку в Perl, не экранируя каждый специальный символ?

Это то, что я хочу сделать:очевидно, было бы здорово, если бы я мог поставить строку в качестве разделителя вместо специальных символов.

Ответы [ 6 ]

8 голосов
/ 05 ноября 2010

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 ''.
4 голосов
/ 05 ноября 2010
$str = q(this is a "string");
print $str;

если вы имеете в виду кавычки и апострофы со специальными символами

3 голосов
/ 05 ноября 2010

Вы можете использовать директиву __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
2 голосов
/ 05 ноября 2010

Печать не делает особых действий с выходами, строки в двойных кавычках делают это. Вы можете попробовать строки в одинарных кавычках:

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

В единственной строке в кавычках единственные символы, которые должны быть экранированы, это одинарные кавычки и обратный слеш, который происходит непосредственно перед концом строки (т.е. 'foo\\').

Важно отметить, что интерполяция не работает со строками в одинарных кавычках, поэтому

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

Не печатает содержимое $foo.

1 голос
/ 06 ноября 2010

Вы можете использовать любого персонажа с 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 DELIMITER foo DELIMITER. Тем не менее, вы можете использовать heredocs для аналогичного эффекта:

print <<DELIMITER
...
DELIMETER
;

или

print <<'DELIMETER'
...
DELIMETER
;

но ваш исходный код будет действительно безобразным.

0 голосов
/ 05 ноября 2010

Если вы хотите напечатать строку буквально, и у вас есть Perl 5.10 или более поздняя версия, то

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

напечатает строку с новой строкой. Важнейшей особенностью является использование одинарных кавычек ' ' вместодвойные " "

...