2015-06-21 14 views
9

Trong perlvar documentation có một văn bản về @_:Làm cách nào tôi có thể sử dụng biến mảng mặc định Perl @_ bằng cách nhấn?

Trong một chương trình con mảng @_ chứa các thông số truyền cho rằng chương trình con. Bên trong một chương trình con, @_ là mảng mặc định cho các toán tử mảng push, pop, shift và unshift.

Đây là cách phổ biến để sử dụng shift không có tham số để lấy phần tử đầu tiên từ mảng. Người ta rất thường xuyên sử dụng như:

sub some_method { 
    my $self = shift; # the same as `my $self = shift @_;` 

    ... 
} 

Nhưng trong tài liệu đó được viết rằng nó có thể được sử dụng với push, nhưng tôi không thể tạo ra ví dụ làm việc mà không chỉ định rõ @_ để push. Từ đọc tài liệu này, tôi mong đợi push 123; để đẩy tới @_, nhưng nó không hoạt động.

+1

Gửi đây là một lỗi qua 'perldoc perlbug' – toolic

+2

Tôi đã sử dụng perbug và gửi messge. Đây là tôi đã gửi - https://gist.github.com/bessarabov/2e938f4bbb79e78d1941 – bessarabov

Trả lời

9

Tôi tin rằng bạn đã tìm thấy lỗi trong tài liệu.

@_ là mặc định cho popshift, nhưng không phải cho pushunshift. Đối với cả hai pushunshift, mảng phải được chỉ định rõ ràng.

perldoc -f push cho thấy cú pháp như sau:

push ARRAY,LIST 
push EXPR,LIST 

không có tùy chọn để lại mảng không xác định; tương tự cho perldoc -f unshift.

(OP đã đệ trình một báo cáo lỗi Perl, xem https://gist.github.com/bessarabov/2e938f4bbb79e78d1941)

Các vấn đề liên quan