7

在 Perl 中连接变量有不同的方法吗?

我不小心写了以下代码行:

print "$linenumber is: \n" . $linenumber;

这导致输出如下:

22 is:
22

我期待:

$linenumber is:
22

所以我想知道。它必须将$linenumber双引号中的 解释为对变量的引用(太酷了!)。

使用这种方法有什么注意事项,它是如何工作的?

4

6 回答 6

13

使用双引号时会发生变量插值。因此,特殊字符需要转义。在这种情况下,您需要转义$

print "\$linenumber is: \n" . $linenumber;

它可以重写为:

print "\$linenumber is: \n$linenumber";

为避免字符串插值,请使用单引号:

print '$linenumber is: ' . "\n$linenumber";  # No need to escape `$`
于 2012-08-02T17:10:50.490 回答
6

我喜欢 .= 运算符方法:

#!/usr/bin/perl
use strict;
use warnings;

my $text .= "... contents ..."; # Append contents to the end of variable $text.
$text .= $text; # Append variable $text contents to variable $text contents.
print $text; # Prints "... contents ...... contents ..."
于 2013-10-23T08:42:50.940 回答
3

在 Perl 中,任何用双引号构建的字符串都将被插入,因此任何变量都将被其值替换。像许多其他语言一样,如果您需要打印 a $,您将不得不对其进行转义。

print "\$linenumber is:\n$linenumber";

或者

print "\$linenumber is:\n" . $linenumber;

或者

printf "\$linenumber is:\n%s", $linenumber;

标量插值

于 2012-08-02T17:18:04.457 回答
2

如果您将代码从

print "$linenumber is: \n" . $linenumber;

print '$linenumber is:' . "\n" . $linenumber;

或者

print '$linenumber is:' . "\n$linenumber";

它会打印

$linenumber is:
22

当想要打印变量名时,我发现有用的是使用单引号,这样其中的变量就不会被翻译成它们的值,从而使代码更容易阅读。

于 2012-08-02T17:20:11.960 回答
1

在制定此响应时,我发现此网页解释了以下信息:

###################################################
#Note that when you have double quoted strings, you don't always need to concatenate. Observe this sample:

#!/usr/bin/perl

$a='Big ';
$b='Macs';
print 'I like to eat ' . $a . $b;

#This prints out:
#  I like to eat Big Macs

###################################################

#If we had used double quotes, we could have accomplished the same thing like this:

#!/usr/bin/perl

$a='Big ';
$b='Macs';
print "I like to eat $a $b";

#Printing this:
#  I like to eat Big Macs
#without having to use the concatenating operator (.).

###################################################

#Remember that single quotes do not interpret, so had you tried that method with single quotes, like this:


#!/usr/bin/perl

$a='Big ';
$b='Macs';
print 'I like to eat $a $b';
#Your result would have been:
#  I like to eat $a $b
#Which don't taste anywhere near as good.

我认为这会对社区有所帮助,所以我提出这个问题并回答我自己的问题。其他有用的答案非常受欢迎!

于 2012-08-02T17:08:08.590 回答
1

您可以使用反斜杠$来逐字打印:

print "\$linenumber is: \n" . $linenumber;

这打印出你所期望的。如果您不希望 Perl 插入变量名,您也可以使用单引号,但随后"\n"将按字面意思插入。

于 2012-08-02T17:09:54.480 回答