点等于Perl意味着什么?

时间:2013-01-21 17:41:57

标签: perl

“。=”在Perl(dot-equals)中是什么意思?下面的示例代码(在while子句中):

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

感谢您的任何见解。

4 个答案:

答案 0 :(得分:24)

句点.concatenation operator。右边的等号表示这是assignment operator,就像在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 = "";

非常多余。虽然有些人可能会觉得很安慰。

答案 1 :(得分:7)

对于几乎任何二元运算符X$a X= $b等同于$a = $a X $b。点.是字符串连接运算符;因此,$a .= $b表示“$b”末尾的“$a”。

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

它应该等同于无环

local $/;
$input = <STDIN>;

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

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

答案 2 :(得分:5)

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

让我们试一试:

my $string = "foo";

$string .= "bar";

print $string;
foobar

答案 3 :(得分:1)

这会对$ input var执行连接。通过STDIN进入的任何内容都被分配给$ input。