Gán @_ vào danh sách có thể mang lại một số tính năng bổ sung trợ giúp.
Giúp bạn thêm thông số được đặt tên vào một ngày sau, khi bạn sửa đổi mã của mình Một số người coi tính năng này, tương tự như cách kết thúc danh sách hoặc băm bằng dấu ',' để thêm thành viên trong tương lai.
Nếu bạn có thói quen sử dụng thành ngữ này, thì việc chuyển các đối số có thể có hại, bởi vì nếu bạn chỉnh sửa mã để thêm đối số, bạn có thể kết thúc bằng một lỗi nhỏ, nếu bạn không chú ý.
ví dụ:
sub do_something {
my ($foo) = @_;
}
sau chỉnh sửa để
sub do_something {
my ($foo,$bar) = @_; # still works
}
tuy nhiên
sub do_another_thing {
my $foo = shift;
}
Nếu một đồng nghiệp, những người sử dụng các hình thức đầu tiên giáo điều (có lẽ họ nghĩ rằng sự thay đổi là ác) chỉnh sửa tập tin và vắng mặt của bạn -mập nhật thông tin này để đọc
sub do_another_thing {
my ($foo, $bar) = shift; # still 'works', but $bar not defined
}
và họ có thể đã giới thiệu một lỗi nhỏ.
Chỉ định cho @_ có thể nhỏ gọn và hiệu quả hơn với không gian dọc, khi bạn có một số lượng nhỏ thông số để chỉ định cùng một lúc. Nó cũng cho phép bạn cung cấp các đối số mặc định nếu bạn đang sử dụng kiểu băm của các tham số chức năng được đặt tên
ví dụ:
my (%arguments) = (user=>'defaultuser',password=>'password',@_);
Tôi vẫn coi đó là câu hỏi về phong cách/khẩu vị. Tôi nghĩ điều quan trọng nhất là áp dụng một phong cách này hay phong cách khác với sự nhất quán, tuân theo nguyên tắc ít ngạc nhiên nhất.
Tôi nghĩ bạn nên hỏi các đồng nghiệp của bạn tại sao họ nghĩ rằng sự thay đổi là ác và chia sẻ với chúng tôi những câu trả lời của họ vào đây trong SO – ccheneson
@Bombe, tôi thấy rằng bạn sử dụng PHP khá một chút, nhưng bạn cảm thấy cần phải được xúc phạm về Perl. Tôi hy vọng bạn nhận thức được rằng hầu hết các khiếu nại phổ biến về Perl áp dụng như nhau đối với PHP. Mọi ngôn ngữ đều có những bit xấu xí của nó, nhưng hầu hết đều có thứ gì đó tốt để đưa ra điều đó làm cho nó đáng giá để đối phó với chúng. Để rõ ràng, như Perl, PHP là một công cụ tuyệt vời, rằng chúng tôi may mắn có quyền truy cập miễn phí - tương tự như vậy đối với Java, Python, Ruby và vân vân. Vui lòng không xúc phạm đến việc lựa chọn công cụ của mọi người. Một nụ cười không thay đổi bản chất của bình luận của bạn. Một xúc phạm được gửi đi với một nụ cười vẫn là một sự xúc phạm. – daotoad
Đối với những gì nó có giá trị, rassie, bất cứ ai dogmatically ủng hộ một tính năng của Perl trên khác là thiếu điểm Perl. –