lvalues được khuyến khích để tránh. Họ vui vẻ và tất cả, nhưng họ làm lẫn lộn những người dùng mới, những người đưa ra giả định về cách tất cả các hoạt động của người đăng ký và do đó cần tránh mã khi có cách tốt hơn.
Đôi khi có thể cực kỳ thiết thực khi sử dụng kết quả LValue để thực hiện công việc bẩn.
substr($string, $start, $stop) = 'somevalue' # replaces the specified part of the substring.
Tuy nhiên, điều này cũng làm điều tương tự:
substr($string, $start, $stop , 'somevalue');
Sự khác biệt ở đây là hầu hết các cựu đã điện đáng kể diễn cảm hơn, vì nó đại biểu các hành vi vào mã có sử dụng nó thay cho chính nó.
Ví dụ:
substr($string, $start, $stop) =~ s/a/b/g
sẽ yêu cầu bạn phải làm
my $x = substr($string, $start, $stop);
$x =~ s/a/b/g/;
substr($string, $start, $stop, $x);
Đó là một chút khó chịu.
Mặc dù, có thêm một sự khó chịu ở đây, vì bạn phải suy nghĩ về việc làm thay thế hay không với $ x hoạt động hồi tố để sửa đổi chuỗi hoặc không (do nền là một phụ LValue). Tôi không nghĩ rằng nó có, nhưng không rõ ràng của nó, tôi phải kiểm tra hướng dẫn để nhớ liệu nó có hay không, và đó là xấu.
Nguồn
2009-02-02 21:25:29
$ x chứa một bản sao chứ không phải một giá trị. Nhưng nếu bạn bí danh một nền lvalue ala 'cho (substr (...)) {' hoặc 'foo (substr (...))' bạn có thể làm nhiều hơn một điều với lvalue. – ysth
Tôi đang gặp sự cố khi hiểu một số cụm từ của bạn: A) "để sử dụng kết quả LValue để thực hiện công việc bẩn thỉu." nhưng tôi không thể thấy rằng ilustrated trong ví dụ - hoặc tôi không hiểu những gì bạn có nghĩa là "một kết quả LValue" B) "vì nó đại biểu cho hành vi mã sử dụng nó thay vì chức năng chính nó." có lẽ đó là về tiếng Anh không phải là tiếng mẹ đẻ, nhưng tôi nhầm lẫn về ý nghĩa của đại từ ở đây –
và C) "bởi vì bạn phải suy nghĩ về việc làm thay thế hay không với $ x hoạt động hồi tố để sửa đổi chuỗi hay không" - quá không rõ ràng với tôi, thậm chí không thể chỉ ra chính xác ... –