Perl双引号
示例
与单引号字符串不同,双引号字符串使用插值和转义。要双引号字符串,请使用双引号"或qq运算符。
my $greeting = "Hello!\n"; print $greeting; # => Hello! (followed by a linefeed) my $bush = "他们低估了我。" print qq/As Bush once said: "$bush"\n/; # => As Bush once said: "他们低估了我。" (with linefeed)
这qq在这里很有用,以避免必须转义引号。没有它,我们将不得不写...
print "As Bush once said: \"$bush\"\n";
...那不是很好。
Perl不限制你使用一个斜杠/用qq;您可以使用任何(可见)字符。
use feature 'say';
say qq/You can use slashes.../;
say qq{...or braces...};
say qq^...or hats...^;
say qq|...or pipes...|;
# say qq ...but not whitespace. ;您还可以将数组内插到字符串中。
use feature 'say';
my @letters = ('a', 'b', 'c');
say "I like these letters: @letters.";
# => I like these letters: a b c.默认情况下,这些值以空格分隔–因为特殊变量$"默认为单个空格。当然,这可以更改。
use feature 'say';
my @letters = ('a', 'b', 'c');
{local $" = ", "; say "@letters"; } # a, b, c如果愿意,可以选择useEnglish并更改$LIST_SEPARATOR:
use v5.18; # English should be avoided on older Perls
use English;
my @letters = ('a', 'b', 'c');
{ local $LIST_SEPARATOR = "\n"; say "我最喜欢的信件:\n\n@letters" }对于任何比这更复杂的事情,您应该使用循环。
say "我最喜欢的信件:";
say;
for my $letter (@letters) {
say " - $letter";
}插值并没有与哈希工作。
use feature 'say';
my %hash = ('a', 'b', 'c', 'd');
say "This doesn't work: %hash" # This doesn't work: %hash有些代码滥用引用的内插法,请避免使用它。
use feature 'say';
say "2 + 2 == @{[ 2 + 2 ]}"; # 2 + 2 = 4 (avoid this)
say "2 + 2 == ${\( 2 + 2 )}"; # 2 + 2 = 4 (avoid this)所谓的“购物车操作符”使perl取消@{...}引用[...]包含要内插的表达式的数组引用2+2。当您使用此技巧时,Perl会构建一个匿名数组,然后取消引用并丢弃它。
该${\(...)}版本虽然不那么浪费,但仍然需要分配内存,并且更难读取。
相反,请考虑编写:
say"2+2==".2+2;
my$result=2+2;say"2+2==$result"