Lvalue substr - замена части строки

substr Lvalue

Есть несколько странных функций в 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.

Author

Gabor Szabo (szabgab) Gabor Szabo