“。=”在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;
感谢您的任何见解。
答案 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。