Làm thế nào để vượt qua những mảng ở Perl

Nhiệm vụ. Trong mã của Perl chương trình có một mảng @arr (ba chữ cái đầu từ chữ "mảng"). Trong mảng này có giá trị. Anh cần phải đi qua tất cả các mảng yếu tố và thực hiện một số hoạt động với mỗi mục.

Đi qua các mảng sử dụng foreach

Thế nên cách giải quyết vấn đề này là để sử dụng foreach. Đây là một mẫu chương trình:

▶ Run
#!/usr/bin/perl

my @arr = (1, 2, 3);

foreach my $el (@arr) {
    warn $el;
}

Đó là tất cả rất đơn giản. Đó là một mảng. Tiếp theo chúng ta tạo ra một biến $el (viết tắt của từ element). Chu kỳ foreach nơi đó biến yếu tố đầu tiên của các mảng (trong ví dụ của chúng tôi số này là 1). Thực hiện những vòng lặp cơ thể warn $el; — này mang lại các giá trị trên màn hình. Chu kỳ foreach đặt vào biến $el tiếp theo giá trị từ mảng một lần nữa thực hiện những vòng lặp cơ thể. Đây là lặp đi lặp lại cho đến khi lặp cơ thể không phải là thực hiện tất cả các mảng yếu tố.

Đi qua các mảng sử dụng một vòng for

Đây là một mẫu chương trình làm thế nào để đi bộ trên một Perl loạt sử dụng một vòng tương tự như những vòng lặp trong ngôn ngữ C:

▶ Run
#!/usr/bin/perl

my @arr = (1, 2, 3);

for (my $i = 0; $i < @arr; $i++) {
    warn $arr[$i];
}

What ' s going on. Đó là một mảng @mũi. Sau đó chúng tôi tạo ra một biến mới $i và giao nó giá trị 0 (0 là các chỉ số các yếu tố đầu tiên trong một Perl mảng). Sau đó có thể vòng cơ thể warn $arr[$i];. Sau đó, biến $ivới điều hành ++ là một tăng. Nó sau đó kiểm tra điều kiện $i < @arr. Nếu tình trạng trở về thực sự, sau đó, tất cả lặp đi lặp lại.

Giải pháp này là hơi phức tạp hơn so với các giải pháp sử dụng foreach. Anh cần phải cẩn thận làm việc với những ranh giới giá trị. Nếu đó là sai để viết một kiểm tra, bạn có thể bỏ qua những giá trị cuối cùng hoặc để truy cập vào không tồn tại một phần tử ngoài tố cuối cùng của các mảng (điều trị này sẽ trở lại undef).

Đây là một ví dụ chương trình làm việc cùng một cách, nhưng sử dụng một điều kiện khác nhau for:

▶ Run
#!/usr/bin/perl

my @arr = (1, 2, 3);

for (my $i = 0; $i <= $#arr; $i++) {
    warn $arr[$i];
}

for mảng nó có ý nghĩa để sử dụng nếu bạn đang ở trong vòng cơ thể không nên chỉ có giá trị của các yếu tố, và số của nó. Nhưng trong trường hợp này bạn có thể sử dụng foreach chu kỳ tự phơi bày sự biến với các chỉ số:

▶ Run
#!/usr/bin/perl

my @arr = (1, 2, 3);
my $i = 0;

foreach my $el (@arr) {
    warn "index: $i value: $el";
    $i++;
}

Chọn điều này là dễ dàng hơn cảm nhận của các người và ít nhạy cảm hơn để Bahamas với giá trị biên giới. Nhưng có một cách thuận tiện hơn để nói điều tương tự với each.

Đi qua các mảng sử dụng whileeach

Từ khóa each là không được sử dụng đó rất thường xuyên, nhưng hầu như luôn luôn khi nó sử dụng nó sử dụng để làm việc với Manh. Ít được biết đến, nhưng each có thể được sử dụng để đi qua các mảng, với các chỉ số của các yếu tố và các yếu tố chính. Ở đây là trước mã được viết bằng each:

▶ Run
#!/usr/bin/perl

my @arr = (1, 2, 3);

while (my ($i, $el) = each @arr) {
    warn "index: $i value: $el";
}

each có thể được áp dụng cho mảng từ Perl 5.12. Nếu bạn chạy mã này trên hơn trước đó một phiên bản của Perl, nó sẽ lỗi:

Type of arg 1 to each must be hash (not private array) at script.pl line 5, near "@arr) "
Execution of script.pl aborted due to compilation errors.

Chủ đề liên quan

Các bài viết khác