Подтвердить что ты не робот

Что означает точка-значение в 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;

Спасибо за понимание.

4b9b3361

Ответ 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.