Tác vụ: để tạo băm sử dụng bản đồ, trong đó các khóa là phần tử của mảng đã cho @a và các giá trị là các thành phần đầu tiên của danh sách được trả về bởi một số hàm f ($ element_of_a):Perl: ánh xạ thành phần tử đầu tiên của danh sách
my @a = (1, 2, 3);
my %h = map {$_ => (f($_))[0]} @a;
Tất cả đều ổn cho đến khi f() trả về danh sách trống (điều này hoàn toàn đúng cho f() và trong trường hợp đó tôi muốn gán undef). Lỗi có thể được sao chép bằng mã sau:
my %h = map {$_ =>()[0]} @a;
chính lỗi đó có vẻ như "Số lượng phần tử lẻ trong phân bổ hàm băm". Khi tôi viết lại đoạn code như vậy:
my @a = (1, 2, 3);
my $s =()[0];
my %h = map {$_ => $s} @a;
hoặc
my @a = (1, 2, 3);
my %h = map {$_ => undef} @a;
Perl không phàn nàn gì cả.
Vậy làm cách nào để tôi giải quyết vấn đề này - lấy các phần tử đầu tiên trong danh sách được trả về bởi f(), khi danh sách trả về trống?
Phiên bản Perl là 5.12.3
Cảm ơn.
Bó gọi cho 'f' để khi nó trả về một danh sách trống, bạn cung cấp 'undef' hoặc phần tử đầu tiên của danh sách nó trở lại. –