Есть несколько странных функций в Perl, которые могут принимать значения слева.
Например, если вы хотите изменить содержимое строки, то можете использовать substr с 4-мя параметрами, где четвертый параметр это строка для замены, или можете использовать substr
как левостороннюю функцию (lvalue) и присвоить ей значение.
substr $text, 14, 7, "jumped from";
and
substr($text, 14, 7) = "jumped from";
эти два выражения эквивалентны.
Несколько примеров:
substr с 4-мя параметрами
use strict;
use warnings;
use 5.010;
my $text = "The black cat climbed the green tree.";
substr $text, 14, 7, "jumped from";
say $text;
substr с 3-мя параметрами как Lvalue
use strict;
use warnings;
use 5.010;
my $text = "The black cat climbed the green tree.";
substr($text, 14, 7) = "jumped from";
say $text;
Обе эти программы выведут:
The black cat jumped from the green tree.
Какое же выражение использовать?
Я думаю, что 4-х параметровый вариант более понятен. Если вы хотите убедиться, что никто из вашей команды не использует Lvalue-вариант substr, то используйте Perl::Critic с включенным правилом ProhibitLvalueSubstr.