23

Perl(点等于)中的“.=”是什么意思?下面的示例代码(在 while 子句中):

if( my $file = shift @ARGV ) {
    $parser->parse( Source => {SystemId => $file} );
} else {
    my $input = "";
    while( <STDIN> ) { $input .= $_; }
    $parser->parse( Source => {String => $input} );
}
exit;

感谢您的任何见解。

4

4 回答 4

29

.点是连接运算符。右边的等号表示这是一个赋值运算符,就像在 C 中一样。

例如:

$input .= $_;

做同样的事情

$input = $input . $_;

然而,这也有一些 perl 魔法,例如,这消除了初始化变量以避免“未初始化”警告的需要。试试区别:

perl -we 'my $x; $x = $x + 1'   # Use of uninitialized value in addition ...
perl -we 'my $x; $x += 1'       # no warning

这意味着您的代码中的行:

my $input = "";

是相当多余的。尽管有些人可能会觉得很舒服。

于 2013-01-21T17:55:56.407 回答
8

对于几乎任何二元运算符X,$a X= $b都等价于$a = $a X $b. 点.是字符串连接运算符;因此,$a .= $b意思是“坚持$b到底$a”。

在您的代码中,您从一个空的 开始$input,然后重复读取一行并将其追加到$input没有剩余的行。您最终应该将整个文件作为 的内容$input,一次一行。

它应该相当于无环

local $/;
$input = <STDIN>;

(将行分隔符定义为未定义的字符,然后读取直到永远不会出现的“行尾”)。

编辑:根据 TLP 的评论更改。

于 2013-01-21T17:44:00.260 回答
5

您已经找到了字符串连接运算符。

让我们尝试一下:

my $string = "foo";

$string .= "bar";

print $string;
foobar
于 2013-01-21T17:43:30.173 回答
1

这将连接到 $input var。通过 STDIN 输入的任何内容都被分配给 $input。

于 2013-01-21T17:49:40.513 回答