2011-08-14 11 views
6

Dizgiler içeren bir dizgeyi, dizilerdeki elemanlarla yeni satırlarla yeni satırlarla nasıl dönüştürebilirim? Bu dikkate ÖrneğinDizgilerle satırlarla Skaler

:

$lines = "line 1\nline 2\nline 3\n"; 

Bunu almak istiyorum:

$lines[0] --> "line 1\n" 
$lines[1] --> "line 2\n" 
$lines[2] --> "line 3\n" 

İdeal olarak, ben aray elemanları, newline tutmak istiyorum.

cevap

2

Kullanım split:

my @lines = split(/\n/m, $lines); 

DÜZENLEME: Açıklamalarda belirtildiği gibi /^/m üzerine, bölünmüş yeni satır tutmak, ya da başka bir cevapta belirtildiği gibi, sıfır genişlikli olan ileriye dönük kullanmak.

+0

teşekkür ederiz. Sadece durumda: yeni hattı tutmak mümkün mü? Ve üzgünüm, cevabın daha açık olduğunu beyan etmeliydim. –

+5

Bunun yerine/^/m 'üzerinde bölmeyi deneyin. –

+0

Teşekkürler @Jim Davis, iyi çalışıyor. Sıfır genişlikli maç, zeki fikir. –

4

Tek yol split sonra map kullanmaktır.

use warnings; 
use strict; 

my $lines = "line 1\nline 2\nline 3\n"; 
my @lines = map { "$_\n" } split /\n/, $lines; 
+1

Teşekkürler, bana biraz ilerlemiş (Perl acemi) gibi görünüyor, ama kesinlikle araştırmak için bir şey, asla harita kullandım. –

+1

Rica ederim. Başımı 'map' etrafında sarmak biraz zamanımı aldı, ama şimdi sahip olduğum, sık sık kullandım. Bir dizinin (veya listenin) her elemanı üzerinde bir işlem yapmak olarak düşünün. Bu durumda, sadece her satıra '\ n' ekliyorum. – toolic

+3

@new 'map' oldukça kullanışlı ve göründüğü kadar zor değil. Kullanmayı öğrenmenizi tavsiye edebilirim. – TLP

7

Sen bölünmüş, newline korumak için arkada bir görünüm negatif kullanabilirsiniz:

@lines = split /(?<=\n)/, $lines; 
+1

+1 Harika cevap. –

3

başka yolu da, split olmadan:

use warnings; 
use strict; 

my $lines = "line 1\nline 2\nline 3\n"; 
my @lines = $lines =~ /(.*\n)/g; 
+1

+1, Sadece etkileyici. – sidyll

+0

Sanırım bu yeni bir çizgi ile bitmeyen bir çizgiyi kaybedecek. Belki de @lines = $ lines = ~/(. * \ N?)/G; '? –

+0

@Joel, kodunuz OP'nin giriş verileri için '@ lines' dizisine boş bir eleman ekleyecektir. OP'nin istediği bu değil. – toolic

İlgili konular