Что означает точка-значение в Perl?
Что означает ". =" в Perl (точки равны)? Пример кода ниже (в предложении while):
if( my $file = shift @ARGV ) {
$parser->parse( Source => {SystemId => $file} );
} else {
my $input = "";
while( <STDIN> ) { $input .= $_; }
$parser->parse( Source => {String => $input} );
}
exit;
Спасибо за понимание.
Ответы
Ответ 1
Период .
- это оператор конкатенации. Знак равенства справа означает, что это оператор присваивания , как в 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 = "";
Совершенно избыточно. Хотя некоторые люди могут найти утешение.
Ответ 2
Для почти любого двоичного оператора X
, $a X= $b
эквивалентно $a = $a X $b
. Точка .
является оператором конкатенации строк; таким образом, $a .= $b
означает "stick $b
в конце $a
".
В вашем коде вы начинаете с пустого $input
, затем многократно читаете строку и добавляете ее в $input
до тех пор, пока строки не останутся. Вы должны получить весь файл как содержимое $input
, по одной строке за раз.
Он должен быть эквивалентен петлевому
local $/;
$input = <STDIN>;
(определите разделитель строк как не определенный символ, затем прочитайте до тех пор, пока не будет "конец строки" ).
EDIT: Изменено в соответствии с комментарием TLP.
Ответ 3
Вы нашли оператор конкатенации строк.
Попробуйте:
my $string = "foo";
$string .= "bar";
print $string;
foobar
Ответ 4
Выполняет конкатенацию в $input var. Все, что приходит через STDIN, присваивается $input.