2013-12-11 13 views
5

Tôi đang sử dụng Tệp :: Slurp để ghi vào một tệp. Vấn đề là các phần tử mảng được viết dưới dạng một chuỗi đơn trên một dòng. Tôi muốn in các phần tử mảng trên các dòng riêng biệt.Làm cách nào để sử dụng Tệp :: Slurp để viết một mảng vào một tệp có dòng mới?

Tôi luôn có thể định dạng các phần tử mảng của mình để có một dòng mới trong mỗi phần tử mà tôi không muốn làm.

Tệp có :: Slurp hỗ trợ bất kỳ tùy chọn in phần tử mảng nào trên các dòng riêng biệt không? Tôi không tìm thấy bất kỳ tùy chọn nào trong tài liệu.

use File::Slurp; 
my @input =(); 

push (@input, "1:2"); 
push (@input, "a:b"); 

write_file("./out", @input); 

Output trông như thế này

1:2a:b 

Tôi muốn

1:2 
a:b 
+2

[Mô-đun sử dụng 'kết nối 'thẳng, @ _'] (https://metacpan.org/source/URI/File-Slurp-9999.19/lib/File/Slurp.pm#L366), vì vậy không có tùy chọn để thêm dòng mới. Đối với một tập nhỏ, tôi chỉ sử dụng 'map' như được đề xuất bên dưới. Đối với một tập hợp lớn, có thể bạn sẽ không sử dụng Tệp :: Slurp. – rutter

+0

Cảm ơn, tôi thích sử dụng bản đồ để nối thêm các dòng mới trên các phần tử của tôi. – sam

Trả lời

9

Tôi không nghĩ File::Slurp có một tùy chọn để in các phần tử mảng trên dòng riêng biệt. Sử dụng map để thêm dòng mới vào tất cả các phần tử mảng của bạn. Điều này không sửa đổi mảng của bạn:

use warnings; 
use strict; 
use File::Slurp; 

my @input =(); 

push (@input, "1:2"); 
push (@input, "a:b"); 

write_file("./out", map { "$_\n" } @input); 
5

Từ documentation

write_file($file_name, {atomic => 1}, map "$_=$conf{$_}\n", keys %conf) ; 
+0

+1. Có vẻ như POD cần được vá để SYNOPSIS hiển thị dưới dạng mã. – toolic

+0

@toolic có, mô-đun lõi và nó đã buồn bã bị hỏng perldoc –

+0

Nó không phải là một mô-đun lõi: 'corelist File :: Slurp' – toolic

6

Trong trường hợp này, chỉ cần đặt biến $" Perl để \n và viết các mảng nội suy đến tập tin:

use strict; 
use warnings; 
use File::Slurp; 

local $" = "\n"; 

my @input =(); 
push(@input, "1:2"); 
push(@input, "a:b"); 

write_file("./out", "@input"); 

Xuất ra tệp:

1:2 
a:b 
+1

một newline => '" @input \ n "', hoặc 'qq {@input $"} ' –

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