LValues рекомендуется избегать. Они забавные и все такое, но они сбивают с толку новых пользователей, которые делают предположения о том, как все подпрограммы работают, и, таким образом, этого следует избегать в коде, когда доступен лучший способ.
Иногда бывает очень полезно использовать результат LValue для грязной работы.
substr( $string, $start, $stop ) = 'somevalue' # replaces the specified part of the substring.
Однако, это также делает то же самое:
substr( $string, $start, $stop , 'somevalue' );
Различие здесь в том, что в основном первое имеет значительно более выразительную силу, поскольку оно делегирует поведение коду, который использует его вместо самой функции.
Например:
substr( $string, $start, $stop ) =~ s/a/b/g
Требуется ли вам сделать
my $x = substr( $string, $start, $stop );
$x =~ s/a/b/g/;
substr( $string, $start, $stop, $x );
Что немного противно.
Хотя здесь есть еще один неприятный момент, потому что вам нужно подумать о том, работает ли эта замена или нет с помощью $ x задним числом, чтобы изменить строку или нет (поскольку substr является подпрограммой LValue). Я не думаю, что это так, но это достаточно неоднозначно, я должен проверить руководство, чтобы вспомнить, делает ли это или нет, и это плохо.