Printing string in Perl

后端 未结 6 1604
爱一瞬间的悲伤
爱一瞬间的悲伤 2021-01-15 04:39

Is there an easy way, using a subroutine maybe, to print a string in Perl without escaping every special character?

This is what I want to do:

print          


        
相关标签:
6条回答
  • 2021-01-15 05:10
    $str = q(this is a "string");
    print $str;
    

    if you mean quotes and apostrophes with 'special characters'

    0 讨论(0)
  • 2021-01-15 05:16

    If you want to print a string literally and you have Perl 5.10 or later then

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

    will print the string with a newline.. The importaning thing is to use single quotes ' ' rather than double ones " "

    0 讨论(0)
  • 2021-01-15 05:19

    The printing is not doing special things to the escapes, double quoted strings are doing it. You may want to try single quoted strings:

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

    In a single quoted string the only characters that must be escaped are single quotes and a backslash that occurs immediately before the end of the string (i.e. 'foo\\').

    It is important to note that interpolation does not work with single quoted strings, so

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

    Will not print the contents of $foo.

    0 讨论(0)
  • 2021-01-15 05:25

    You can use the __DATA__ directive which will treat all of the following lines as a file that can be accessed from the DATA handle:

    while (<DATA>) {
       print # or do something else with the lines
    }
    
    __DATA__
    #!/usr/bin/perl -w
    use Some::Module;
    ....
    

    or you can use a heredoc:

    my $string = <<'END';  #single quotes prevent any interpolation
    #!/usr/bin/perl -b
    use Some::Module;
    ....
    END
    
    0 讨论(0)
  • 2021-01-15 05:26

    You can pretty much use any character you want with q or qq. For example:

    #!/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¿;
    

    You cannot use qq DELIMITER foo DELIMITER. However, you could use heredocs for a similar effect:

    print <<DELIMITER
    ...
    DELIMETER
    ;
    

    or

    print <<'DELIMETER'
    ...
    DELIMETER
    ;
    

    but your source code would be really ugly.

    0 讨论(0)
  • 2021-01-15 05:30

    perldoc perlop, under "Quote and Quote-like Operators", contains everything you need.

    While we usually think of quotes as literal values, in Perl they function as operators, providing various kinds of interpolating and pattern matching capabilities. Perl provides customary quote characters for these behaviors, but also provides a way for you to choose your quote character for any of them. In the following table, a "{}" represents any pair of delimiters you choose.

    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 ''.
    
    0 讨论(0)
提交回复
热议问题